{
  "schemaVersion": 1,
  "updatedAt": "2026-10-07T23:38:49.911Z",
  "count": 334,
  "language": "en",
  "quality": "Native-size exports from accepted PNG frames. GIF uses 256 colors; WebP is lossless. No upscaling or new motion.",
  "branding": "TrainAI branding is included in every exported frame.",
  "usage": "For TrainAI content production. Keep the TrainAI branding visible. An animated GIF is not an Instagram carousel: convert individual demos to video slides only when the publishing tool supports mixed-media carousels. Do not publish a silent standalone Reel by default.",
  "exercises": [
    {
      "id": "trainai-90-90-hip-switch",
      "slug": "90-90-hip-switch",
      "name": "90/90 hip switch",
      "category": "Mobility",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Seated 90/90 hip switch.",
        "Both knees maintain right-angle bend.",
        "Feet pivot; heels do NOT slide outward away from hips.",
        "Hands support behind pelvis."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-90-90-hip-switch-c8c7e0e564e1.gif?alt=media&token=ded302fc-a80b-4a9a-93a3-2dde3c6a4ae1",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-90-90-hip-switch-17a53c528afc.png?alt=media&token=2fb91e27-7d47-4e51-8d7d-9733786a36cd",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/90-90-hip-switch/",
      "mediaKind": "animated-demonstration",
      "frames": 18,
      "durationMs": 2890,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "93897c0856cd1eb4e2c39198a183c59de166bd9fcb3243402dbe9bc3371fc149",
          "bytes": 556452,
          "mimeType": "image/gif",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-90-90-hip-switch-93897c0856cd1eb4.gif?alt=media&token=b9419a90-3203-47f3-a389-05f4ccd2836c",
          "name": "trainai/creator-media/2026-10-07/trainai-90-90-hip-switch-93897c0856cd1eb4.gif",
          "verifiedAt": "2026-10-07T23:23:26.937Z"
        },
        "webp": {
          "sha256": "98290d237bdef8638d946bb0d915678fc641cf30ff75cdd51c4947836d3a7fae",
          "bytes": 892906,
          "mimeType": "image/webp",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-90-90-hip-switch-98290d237bdef863.webp?alt=media&token=f5c19c65-988e-4fac-8661-b42f4bfec0e3",
          "name": "trainai/creator-media/2026-10-07/trainai-90-90-hip-switch-98290d237bdef863.webp",
          "verifiedAt": "2026-10-07T23:23:28.024Z"
        },
        "poster": {
          "sha256": "3f084d9005aa999efa39443ac41d0cec8b46d2b68745eb88284e893c307f5542",
          "bytes": 85836,
          "mimeType": "image/png",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-90-90-hip-switch-3f084d9005aa999e.png?alt=media&token=a8571530-0267-4566-982a-ee7d721341fa",
          "name": "trainai/creator-media/2026-10-07/trainai-90-90-hip-switch-3f084d9005aa999e.png",
          "verifiedAt": "2026-10-07T23:23:25.980Z"
        }
      }
    },
    {
      "id": "trainai-air-bike-ergometer",
      "slug": "air-bike-ergometer",
      "name": "Air-bike ergometer",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "air bike",
      "requiredEquipment": [
        "air-bike"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Adjust the air-bike seat and place both feet securely on the pedals.",
        "Pedal continuously while alternately pushing and pulling the handles.",
        "Keep the trunk steady and choose a sustainable pace."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-air-bike-ergometer-9665851c7859.gif?alt=media&token=e96c2f0e-0e0e-412b-8de8-d0fff5ea84c0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-air-bike-ergometer-ba04b6cf6598.png?alt=media&token=f26f962f-12b5-4402-b42d-ad66387b00d2",
      "aliases": [
        "cycle cross trainer"
      ],
      "legacyIds": [
        "2331"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/air-bike-ergometer/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 960,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0bba4a9187deaaaa197ca9f1c7149d36c3308457ea46dd213b594727b089b12b",
          "bytes": 302781,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-air-bike-ergometer-0bba4a9187deaaaa.gif?alt=media&token=5637167e-cb3b-4b1d-815e-1558122c0824",
          "name": "trainai/creator-media/2026-10-07/trainai-air-bike-ergometer-0bba4a9187deaaaa.gif",
          "verifiedAt": "2026-10-07T23:23:27.999Z"
        },
        "webp": {
          "sha256": "0f9ade36f36fa115cc0e044bba470c415d159a52a0453542030cb6864364e41a",
          "bytes": 411800,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-air-bike-ergometer-0f9ade36f36fa115.webp?alt=media&token=4453cf3f-c82b-43d0-a4b6-751f3ed828ba",
          "name": "trainai/creator-media/2026-10-07/trainai-air-bike-ergometer-0f9ade36f36fa115.webp",
          "verifiedAt": "2026-10-07T23:23:30.550Z"
        },
        "poster": {
          "sha256": "1478b549a14dcd2787372cfacc6aef49c2703ac598d3176f8aacda09de8f1009",
          "bytes": 195095,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-air-bike-ergometer-1478b549a14dcd27.png?alt=media&token=79f362c1-2f9d-4a91-9c6f-8a591f0b33b9",
          "name": "trainai/creator-media/2026-10-07/trainai-air-bike-ergometer-1478b549a14dcd27.png",
          "verifiedAt": "2026-10-07T23:23:29.310Z"
        }
      }
    },
    {
      "id": "trainai-alternate-heel-touch",
      "slug": "alternate-heel-touch",
      "name": "Alternate heel touch",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Alternate heel touch: reclined supine, shoulders just lifted, knees bent, feet flat fixed shoulder width.",
        "Arms long beside torso.",
        "Lateral side bend reaches right hand to right heel, then returns center, then left hand to left heel.",
        "Never two reaches with the same hand.",
        "Head and shoulders stay low, no sit-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-alternate-heel-touch-ef65f01381d0.gif?alt=media&token=e1e47f86-4d29-4510-b1e4-e94cc65accf0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-alternate-heel-touch-122283699414.png?alt=media&token=48d74057-6833-4887-9c7b-d338e24a21b7",
      "aliases": [
        "alternate heel touchers"
      ],
      "legacyIds": [
        "0006"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/alternate-heel-touch/",
      "mediaKind": "animated-demonstration",
      "frames": 9,
      "durationMs": 1530,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "09502e0661148d6d009f22ac9a234b030f19d23b36dfc6e3979618884c83bff1",
          "bytes": 406820,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-alternate-heel-touch-09502e0661148d6d.gif?alt=media&token=809bcc8e-1deb-4637-9d10-31602849c9ab",
          "name": "trainai/creator-media/2026-10-07/trainai-alternate-heel-touch-09502e0661148d6d.gif",
          "verifiedAt": "2026-10-07T23:23:31.201Z"
        },
        "webp": {
          "sha256": "21d626e0f78f9879b1ee2ada408eecd1f8fc51e1cbd87de8c13b163ed44fc3be",
          "bytes": 651514,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-alternate-heel-touch-21d626e0f78f9879.webp?alt=media&token=a413b913-d2e8-45a0-a4f3-5ea35091ad12",
          "name": "trainai/creator-media/2026-10-07/trainai-alternate-heel-touch-21d626e0f78f9879.webp",
          "verifiedAt": "2026-10-07T23:23:36.609Z"
        },
        "poster": {
          "sha256": "ae238dc857ae77c603e5557a1ea90b5118785d8e40c74454be62b3cc739c8c5c",
          "bytes": 119705,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-alternate-heel-touch-ae238dc857ae77c6.png?alt=media&token=9d5b8347-035d-4aa4-b8ca-9aebfe2c03d2",
          "name": "trainai/creator-media/2026-10-07/trainai-alternate-heel-touch-ae238dc857ae77c6.png",
          "verifiedAt": "2026-10-07T23:23:32.507Z"
        }
      }
    },
    {
      "id": "trainai-ankle-circles",
      "slug": "ankle-circles",
      "name": "Ankle circles",
      "category": "Dynamic warm-up",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Sit on floor with left knee bent supporting left foot, right leg extended and heel lightly raised.",
        "Hands behind hips support torso.",
        "Slowly circle right ankle: toes point forward, inward, up toward shin, outward, returning.",
        "Knee and thigh still.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-ankle-circles-e2b0e64cf7e5.gif?alt=media&token=d5b19116-b4b9-4680-8a4f-18dda9dc07eb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-ankle-circles-40e2df589c26.png?alt=media&token=a1ecebfb-c2eb-4f6e-83ad-a03b648189f8",
      "aliases": [
        "ankle circles"
      ],
      "legacyIds": [
        "1368"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/ankle-circles/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "1fc1516e21a480337a7307ac7e8d48cb1710761b693db80929ab79508f7a5231",
          "bytes": 420978,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-ankle-circles-1fc1516e21a48033.gif?alt=media&token=42e3181c-6bca-4bf4-8cd6-8852d3ab5119",
          "name": "trainai/creator-media/2026-10-07/trainai-ankle-circles-1fc1516e21a48033.gif",
          "verifiedAt": "2026-10-07T23:23:32.531Z"
        },
        "webp": {
          "sha256": "be63ec45d54859ea7c4ed190820b7f7730d4027806abcef8b89bb99d835ae59f",
          "bytes": 669072,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-ankle-circles-be63ec45d54859ea.webp?alt=media&token=c5c5aef8-8498-4c34-bb89-eeb50902ce65",
          "name": "trainai/creator-media/2026-10-07/trainai-ankle-circles-be63ec45d54859ea.webp",
          "verifiedAt": "2026-10-07T23:23:38.549Z"
        },
        "poster": {
          "sha256": "1fa8863de691c513ec558161f53a0ca8541b775d26fb39c05c22ebc67913b82b",
          "bytes": 67954,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-ankle-circles-1fa8863de691c513.png?alt=media&token=f9256e9f-13ca-4d54-ac3e-808767a6fea0",
          "name": "trainai/creator-media/2026-10-07/trainai-ankle-circles-1fa8863de691c513.png",
          "verifiedAt": "2026-10-07T22:43:56.890Z"
        }
      }
    },
    {
      "id": "trainai-arm-circles",
      "slug": "arm-circles",
      "name": "Arm circles",
      "category": "Dynamic warm-up",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Stand feet hip width, both arms extended sideways at shoulder height.",
        "Make one small smooth forward circle from shoulder joints, elbows long and hands relaxed.",
        "Arms trace front-down-back-up path without giant swings; torso and feet still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-arm-circles-d6f78f4103d4.gif?alt=media&token=8e6df769-705f-45a2-9732-5d5c55327057",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-arm-circles-99e556a171f3.png?alt=media&token=642e3b69-4b66-4326-affa-5a3d01958d11",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/arm-circles/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6ef11392123a5b28d3c773805be9696690a4273fa43caec38f406798bfb92e89",
          "bytes": 273919,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-arm-circles-6ef11392123a5b28.gif?alt=media&token=f644f7e7-2ae2-40b1-8097-c16e66c63fab",
          "name": "trainai/creator-media/2026-10-07/trainai-arm-circles-6ef11392123a5b28.gif",
          "verifiedAt": "2026-10-07T23:23:34.920Z"
        },
        "webp": {
          "sha256": "efe33a3be121e29ebec792864267577e7892bd0dbb905cd0429a27adf3db0014",
          "bytes": 444622,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-arm-circles-efe33a3be121e29e.webp?alt=media&token=9c95e8ee-e93e-4c86-be00-92ffeb75129e",
          "name": "trainai/creator-media/2026-10-07/trainai-arm-circles-efe33a3be121e29e.webp",
          "verifiedAt": "2026-10-07T23:23:45.595Z"
        },
        "poster": {
          "sha256": "ad732bce4257b4f422478901383cdd1c28c91bdfb973845bab0580a79300521e",
          "bytes": 46197,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-arm-circles-ad732bce4257b4f4.png?alt=media&token=a9bd24c2-3c85-4ff2-80f3-04a40c36dd5f",
          "name": "trainai/creator-media/2026-10-07/trainai-arm-circles-ad732bce4257b4f4.png",
          "verifiedAt": "2026-10-07T22:43:57.968Z"
        }
      }
    },
    {
      "id": "trainai-assisted-chin-up",
      "slug": "assisted-chin-up",
      "name": "Assisted chin-up",
      "category": "Pull-up and suspension",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "assisted-pull-up-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Select appropriate assistance and use the machine support as directed.",
        "Hold the chin-up handles with palms toward you and pull upward with a steady trunk.",
        "Lower under control without dropping onto the support."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-assisted-chin-up-6095e4ea3096.gif?alt=media&token=389e8f3b-81d7-4c25-89ab-38586a47c33e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-assisted-chin-up-9c3835d87d42.png?alt=media&token=60dc7b1b-3a30-4710-b8f5-001df208a3fa",
      "aliases": [
        "assisted chin-up"
      ],
      "legacyIds": [
        "1431"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/assisted-chin-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "def1c731e3e517c846be578aa6a694de8500359ffcb7a5ff395a99a45b6da7d8",
          "bytes": 486297,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-assisted-chin-up-def1c731e3e517c8.gif?alt=media&token=3d8b237c-6b5f-4e84-a298-ef00b9586216",
          "name": "trainai/creator-media/2026-10-07/trainai-assisted-chin-up-def1c731e3e517c8.gif",
          "verifiedAt": "2026-10-07T23:23:42.544Z"
        },
        "webp": {
          "sha256": "a158880d90e6eb2778eba44c158605c2bb3ff78ae40582842deb023557d66e1c",
          "bytes": 721086,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-assisted-chin-up-a158880d90e6eb27.webp?alt=media&token=9e2f0284-e2d3-445f-8576-128bd6c11f19",
          "name": "trainai/creator-media/2026-10-07/trainai-assisted-chin-up-a158880d90e6eb27.webp",
          "verifiedAt": "2026-10-07T23:23:44.019Z"
        },
        "poster": {
          "sha256": "24bdb25aa55661517442523e8c327f27a8430c25d2a6b7638c80f7c72e2ac552",
          "bytes": 79029,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-assisted-chin-up-24bdb25aa5566151.png?alt=media&token=12e6ea59-ecb8-4f51-8a33-3b8e345e4859",
          "name": "trainai/creator-media/2026-10-07/trainai-assisted-chin-up-24bdb25aa5566151.png",
          "verifiedAt": "2026-10-07T22:44:01.196Z"
        }
      }
    },
    {
      "id": "trainai-assisted-pull-up",
      "slug": "assisted-pull-up",
      "name": "Assisted pull-up",
      "category": "Pull-up and suspension",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "assisted-pull-up-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Select appropriate assistance on a pull-up machine and use its pad as directed.",
        "Hold the overhead handles with an overhand grip and pull upward without swinging.",
        "Lower slowly while maintaining contact with the support."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-assisted-pull-up-164b6d62329a.gif?alt=media&token=8ac0464d-b4f5-4254-ae08-3eed346d3c02",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-assisted-pull-up-ae10757238f9.png?alt=media&token=d30e6aa8-1221-4610-b8dd-c5f853b47933",
      "aliases": [
        "assisted pull-up"
      ],
      "legacyIds": [
        "1432"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/assisted-pull-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "87eb1614acf74527073dab7a319ef52c9f28ca920288db662c2b0c7e42a677df",
          "bytes": 481589,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-assisted-pull-up-87eb1614acf74527.gif?alt=media&token=8b9ddd2f-c96a-464d-855b-37e603315bbc",
          "name": "trainai/creator-media/2026-10-07/trainai-assisted-pull-up-87eb1614acf74527.gif",
          "verifiedAt": "2026-10-07T23:23:47.539Z"
        },
        "webp": {
          "sha256": "f17aedfff8314885d823517fc60eeda6af32c6c1a73d5e8afbb88d6494eaa2cd",
          "bytes": 738530,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-assisted-pull-up-f17aedfff8314885.webp?alt=media&token=efc2c9ea-0375-45c6-aa6e-e6574bf523d1",
          "name": "trainai/creator-media/2026-10-07/trainai-assisted-pull-up-f17aedfff8314885.webp",
          "verifiedAt": "2026-10-07T23:23:46.285Z"
        },
        "poster": {
          "sha256": "32b25a424e5d2311549d5191fc397f1aac9d2c8544f4cd2d3051af9a52aa128a",
          "bytes": 77979,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-assisted-pull-up-32b25a424e5d2311.png?alt=media&token=b7167d72-4a56-4bb0-a232-07e8f949967a",
          "name": "trainai/creator-media/2026-10-07/trainai-assisted-pull-up-32b25a424e5d2311.png",
          "verifiedAt": "2026-10-07T22:44:02.396Z"
        }
      }
    },
    {
      "id": "trainai-back-extension",
      "slug": "back-extension",
      "name": "Back extension",
      "category": "Gym machines",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [
        "back-extension-bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Use a fixed 45-degree back extension bench, hips supported below hip crease and ankles secured.",
        "Arms crossed on chest.",
        "Start body straight from head to heels; hinge forward at hips with neutral spine, then return only to straight body alignment.",
        "No arching beyond straight.",
        "Bench and feet remain fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-back-extension-6cfadcc3995a.gif?alt=media&token=d3bd3b10-4e77-485f-b462-c202c4315876",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-back-extension-ba03e5a6f7d0.png?alt=media&token=b65cf0ed-a8c2-4bc4-8bc4-49077496e043",
      "aliases": [
        "hyperextension"
      ],
      "legacyIds": [
        "0489"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/back-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "1993ff6c325f022eed684cc29944510ac721b8d9e8656821816a63cb5d305e68",
          "bytes": 310120,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-back-extension-1993ff6c325f022e.gif?alt=media&token=f63b67d7-3fdf-4a8c-8555-4be68b697faa",
          "name": "trainai/creator-media/2026-10-07/trainai-back-extension-1993ff6c325f022e.gif",
          "verifiedAt": "2026-10-07T23:23:50.394Z"
        },
        "webp": {
          "sha256": "a51203270ee5dafa8098ccc374cf8624fc293943148b87140f57ac43039e91eb",
          "bytes": 516530,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-back-extension-a51203270ee5dafa.webp?alt=media&token=5513740c-88fa-46e4-9d87-33deecb52819",
          "name": "trainai/creator-media/2026-10-07/trainai-back-extension-a51203270ee5dafa.webp",
          "verifiedAt": "2026-10-07T23:23:48.642Z"
        },
        "poster": {
          "sha256": "97d70910bee7284f53807a282157558c17e6ca1902af01a801e3c5535ab5e234",
          "bytes": 52734,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-back-extension-97d70910bee7284f.png?alt=media&token=d8acc39f-1414-4732-b71f-737c3362c2f9",
          "name": "trainai/creator-media/2026-10-07/trainai-back-extension-97d70910bee7284f.png",
          "verifiedAt": "2026-10-07T22:44:03.561Z"
        }
      }
    },
    {
      "id": "trainai-band-biceps-curl",
      "slug": "band-biceps-curl",
      "name": "Band biceps curl",
      "category": "Bands",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with both feet securely on middle of orange band.",
        "Arms begin down beside thighs holding ends, palms forward.",
        "Curl both hands toward shoulders by bending elbows, then lower.",
        "Elbows stay beside ribs and feet stay still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-biceps-curl-5db687ae3e40.gif?alt=media&token=e07fa7b0-9137-4c86-98bb-7de87ce88810",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-biceps-curl-4ba16437792b.png?alt=media&token=ee2c063b-65fb-4a53-b575-a5eb0731fb8a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-biceps-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "84c5e7a203242240984c2de57148d948e71748b361c3ee7cd3630a8f60ed8309",
          "bytes": 285563,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-biceps-curl-84c5e7a203242240.gif?alt=media&token=2f417b17-ef6c-48c9-903a-3253bb494b8b",
          "name": "trainai/creator-media/2026-10-07/trainai-band-biceps-curl-84c5e7a203242240.gif",
          "verifiedAt": "2026-10-07T23:23:50.446Z"
        },
        "webp": {
          "sha256": "0f58b3adb3f378f346d69ee526c0f6226f245270c3577b085c2d57f7706e9746",
          "bytes": 475268,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-biceps-curl-0f58b3adb3f378f3.webp?alt=media&token=5ead3201-e876-4a73-acb1-977108214e44",
          "name": "trainai/creator-media/2026-10-07/trainai-band-biceps-curl-0f58b3adb3f378f3.webp",
          "verifiedAt": "2026-10-07T23:23:51.345Z"
        },
        "poster": {
          "sha256": "5ce9d92f09b94072921ac6a6569e29bd571b9987b45e9909441b1f13bf549037",
          "bytes": 48729,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-biceps-curl-5ce9d92f09b94072.png?alt=media&token=f8111c46-e4d8-4e3e-86e1-7fe1501842b9",
          "name": "trainai/creator-media/2026-10-07/trainai-band-biceps-curl-5ce9d92f09b94072.png",
          "verifiedAt": "2026-10-07T22:44:04.443Z"
        }
      }
    },
    {
      "id": "trainai-band-external-rotation",
      "slug": "band-external-rotation",
      "name": "Band external rotation",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall with elbows tucked against ribs, bent 90 degrees, forearms forward.",
        "Hold a short orange resistance band between hands.",
        "Rotate forearms outward while elbows remain pinned at sides, gently stretching band, then return.",
        "This is shoulder external rotation, not a pull-apart at shoulder height."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-external-rotation-4b8ff6595db5.gif?alt=media&token=10a64b65-3b84-4f66-9622-87b189e8c830",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-external-rotation-f748027efbd5.png?alt=media&token=5158d30c-5668-4844-bb9b-2ea3c88ada12",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-external-rotation/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2ba8e1731f3359920ea8e1abbc4b4e94decf094f30bc83ccf5ad8ebab66694a5",
          "bytes": 286854,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-external-rotation-2ba8e1731f335992.gif?alt=media&token=8b491e12-78d7-4554-8ba9-ac85e4ec36ed",
          "name": "trainai/creator-media/2026-10-07/trainai-band-external-rotation-2ba8e1731f335992.gif",
          "verifiedAt": "2026-10-07T23:23:55.251Z"
        },
        "webp": {
          "sha256": "3515daa3a17468d18f9c8dda978b74d8d4288c42ace1c4656a4b048cd1fe2f84",
          "bytes": 469242,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-external-rotation-3515daa3a17468d1.webp?alt=media&token=13eba76b-7f1d-488f-8c47-139969169b96",
          "name": "trainai/creator-media/2026-10-07/trainai-band-external-rotation-3515daa3a17468d1.webp",
          "verifiedAt": "2026-10-07T23:23:56.426Z"
        },
        "poster": {
          "sha256": "75054fc939229f780880414d2662a084fa7231eacc2c7072beb729dcf39b0652",
          "bytes": 44793,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-external-rotation-75054fc939229f78.png?alt=media&token=3fb81f76-65a3-45a5-878e-62ebdbf752c9",
          "name": "trainai/creator-media/2026-10-07/trainai-band-external-rotation-75054fc939229f78.png",
          "verifiedAt": "2026-10-07T22:44:05.656Z"
        }
      }
    },
    {
      "id": "trainai-band-face-pull",
      "slug": "band-face-pull",
      "name": "Band face pull",
      "category": "Bands",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing a fixed small anchor at eye level, hold two ends of an orange band with arms forward.",
        "Pull toward sides of face while elbows spread out at shoulder height, ending hands beside temples and forearms upright.",
        "Reverse to arms extended.",
        "No leaning, feet planted and anchor identical."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-face-pull-fbc9e6d0db71.gif?alt=media&token=4e6c3521-06cb-4fb8-ad6f-07ae403c5ff7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-face-pull-29f547a5f8b8.png?alt=media&token=1e594c23-ab69-4226-a215-df3b72a25c68",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-face-pull/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6d075144a8e49dc7b8404b397e84e27c94c7e5988bc4bd81b949eed597ec9c02",
          "bytes": 280693,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-face-pull-6d075144a8e49dc7.gif?alt=media&token=6293e964-1176-4fc8-801a-77166fdc3081",
          "name": "trainai/creator-media/2026-10-07/trainai-band-face-pull-6d075144a8e49dc7.gif",
          "verifiedAt": "2026-10-07T23:23:56.812Z"
        },
        "webp": {
          "sha256": "538b489f0fa4a7d6cbb78898a7c31d122459a8ab4ddc5c743560551a1ddfa331",
          "bytes": 489898,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-face-pull-538b489f0fa4a7d6.webp?alt=media&token=afb01867-c0df-47bc-a115-37be553a2606",
          "name": "trainai/creator-media/2026-10-07/trainai-band-face-pull-538b489f0fa4a7d6.webp",
          "verifiedAt": "2026-10-07T23:23:57.462Z"
        },
        "poster": {
          "sha256": "db190ab89f2cb730434385bd650e5182582be5a488117a2a3ba61f6f2d74775c",
          "bytes": 45656,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-face-pull-db190ab89f2cb730.png?alt=media&token=4aa635ed-69f5-4c20-ae2d-27e4eaf6ac71",
          "name": "trainai/creator-media/2026-10-07/trainai-band-face-pull-db190ab89f2cb730.png",
          "verifiedAt": "2026-10-07T22:44:07.510Z"
        }
      }
    },
    {
      "id": "trainai-band-lat-pulldown",
      "slug": "band-lat-pulldown",
      "name": "Band lat pulldown",
      "category": "Bands",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-high-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a resistance band to a rated high anchor and kneel facing it.",
        "Hold the ends and pull the elbows down toward the ribs without leaning back sharply.",
        "Return slowly while keeping tension in the band."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-lat-pulldown-d37904012a8d.gif?alt=media&token=dc686c2f-5e1f-4baf-9198-f4b5b1fa8577",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-lat-pulldown-774431e1b1e7.png?alt=media&token=2b7bba20-87f0-454d-bb2e-d9b0f432a15a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-lat-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3d6426d40ca8f8138eb1426008c94e0733eff55a2ea7c717ff37f65b5c7b2a99",
          "bytes": 229217,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-lat-pulldown-3d6426d40ca8f813.gif?alt=media&token=8d5a6169-91ef-4be6-a336-1b0a0d114b57",
          "name": "trainai/creator-media/2026-10-07/trainai-band-lat-pulldown-3d6426d40ca8f813.gif",
          "verifiedAt": "2026-10-07T23:24:01.250Z"
        },
        "webp": {
          "sha256": "aa62a3f8f7661ff0578acd7d85d7f8b66df408653225e5bbc84ba9d8757eb65f",
          "bytes": 390160,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-lat-pulldown-aa62a3f8f7661ff0.webp?alt=media&token=aafad9b9-5e16-4d4e-8945-ffb342b40950",
          "name": "trainai/creator-media/2026-10-07/trainai-band-lat-pulldown-aa62a3f8f7661ff0.webp",
          "verifiedAt": "2026-10-07T23:23:59.484Z"
        },
        "poster": {
          "sha256": "3fb5cbb70284e3c049b8ade65ea1a2fb408a642f724e29c816f3e33d5346ea9b",
          "bytes": 39991,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-lat-pulldown-3fb5cbb70284e3c0.png?alt=media&token=b38f8415-6a6f-49db-8c2c-a12eda18c600",
          "name": "trainai/creator-media/2026-10-07/trainai-band-lat-pulldown-3fb5cbb70284e3c0.png",
          "verifiedAt": "2026-10-07T23:23:58.362Z"
        }
      }
    },
    {
      "id": "trainai-band-lateral-raise",
      "slug": "band-lateral-raise",
      "name": "Band lateral raise",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand on middle of an orange resistance band.",
        "Hold ends by thighs and raise both nearly straight arms sideways to shoulder height, then lower.",
        "Elbows softly bent, palms down, shoulders level.",
        "Feet and torso still; band remains under both shoes."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-lateral-raise-6e1d6fce04f7.gif?alt=media&token=b3d86048-93be-4ca9-94db-6c3ee8b75281",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-lateral-raise-416087cfcb1f.png?alt=media&token=60eac182-4848-4e6c-801d-286daa6ac7a9",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-lateral-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "15ff9eef1e41f9f5ddf9adfd2d8824b5e93cca51980f2b4755938b0bbb1b00c6",
          "bytes": 324431,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-lateral-raise-15ff9eef1e41f9f5.gif?alt=media&token=89d99599-508e-4488-803a-b216f88ddc65",
          "name": "trainai/creator-media/2026-10-07/trainai-band-lateral-raise-15ff9eef1e41f9f5.gif",
          "verifiedAt": "2026-10-07T23:24:07.260Z"
        },
        "webp": {
          "sha256": "78fccfa5a1ae4d91aaccb3a0aa3238333f9ed3a300b42d1cfb2d5ce0f90d924f",
          "bytes": 577624,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-lateral-raise-78fccfa5a1ae4d91.webp?alt=media&token=4d2fba2a-f387-4c32-931e-cfb3f2990ef7",
          "name": "trainai/creator-media/2026-10-07/trainai-band-lateral-raise-78fccfa5a1ae4d91.webp",
          "verifiedAt": "2026-10-07T23:24:12.466Z"
        },
        "poster": {
          "sha256": "2abdb504122a75901d0d807dbda46bd7048c8e0f363b091881abc1053b053c89",
          "bytes": 50678,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-lateral-raise-2abdb504122a7590.png?alt=media&token=c0722e6d-c479-4056-ad47-589401e69137",
          "name": "trainai/creator-media/2026-10-07/trainai-band-lateral-raise-2abdb504122a7590.png",
          "verifiedAt": "2026-10-07T22:44:10.094Z"
        }
      }
    },
    {
      "id": "trainai-band-pallof-press",
      "slug": "band-pallof-press",
      "name": "Band Pallof press",
      "category": "Bands",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold band handle in both hands at sternum.",
        "Press both hands straight forward away from chest, resist sideways pull without rotating torso, then return.",
        "Anchor stays immobile and band stays attached."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-pallof-press-399fa050dbda.gif?alt=media&token=2acddc19-02f6-4dc3-8ba6-4ea12671030d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-pallof-press-20c07b8bc388.png?alt=media&token=1fe6feb8-61d4-4e86-ad9a-4058b9f3089a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-pallof-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a1b77703c9a80df21b27eca81c8f23c72d864ab41484cea05ff02b6175a72b1e",
          "bytes": 318168,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-pallof-press-a1b77703c9a80df2.gif?alt=media&token=ccf1fe65-3528-4f2a-ba65-c2d71901b780",
          "name": "trainai/creator-media/2026-10-07/trainai-band-pallof-press-a1b77703c9a80df2.gif",
          "verifiedAt": "2026-10-07T23:24:07.498Z"
        },
        "webp": {
          "sha256": "67f92e3e01f781a9b844b20d65d3db33120bf6e4cf21a4c7392da6e16fde739a",
          "bytes": 508942,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-pallof-press-67f92e3e01f781a9.webp?alt=media&token=2bd423f4-7c4f-4e71-a298-792bcc922a83",
          "name": "trainai/creator-media/2026-10-07/trainai-band-pallof-press-67f92e3e01f781a9.webp",
          "verifiedAt": "2026-10-07T22:44:11.637Z"
        },
        "poster": {
          "sha256": "08ee1cacc652e213771142725897113b6753be0b5331282b4b3332c874cf5cdb",
          "bytes": 51981,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-pallof-press-08ee1cacc652e213.png?alt=media&token=786f3880-56ac-4280-be96-ba29582a42a5",
          "name": "trainai/creator-media/2026-10-07/trainai-band-pallof-press-08ee1cacc652e213.png",
          "verifiedAt": "2026-10-07T22:44:11.657Z"
        }
      }
    },
    {
      "id": "trainai-band-pull-apart",
      "slug": "band-pull-apart",
      "name": "Band pull-apart",
      "category": "Bands",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall, arms held straight forward at shoulder height, holding an orange band between hands.",
        "Pull hands apart horizontally until arms form a wide T and band touches upper chest, then return hands forward.",
        "Elbows only softly bent; shoulders do not shrug.",
        "Legs and torso stay still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-pull-apart-27140d9eb901.gif?alt=media&token=e9101d93-89ad-4856-ab84-9d1b716f0148",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-pull-apart-2b6bc2c72af4.png?alt=media&token=634e4c19-4662-431a-ab53-fbb7dcd5f59e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-pull-apart/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0c95ff3c13cf49f05ad295869cf4de217d746c0b16246b51205ab241592a3a9a",
          "bytes": 278288,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-pull-apart-0c95ff3c13cf49f0.gif?alt=media&token=7dae402e-c08d-44f3-b2ae-e0e52e9c94c2",
          "name": "trainai/creator-media/2026-10-07/trainai-band-pull-apart-0c95ff3c13cf49f0.gif",
          "verifiedAt": "2026-10-07T23:24:09.986Z"
        },
        "webp": {
          "sha256": "19a6fd868d6844010debcded21fcb739b192f9f1f1e3baa7242dc02ebc78a51f",
          "bytes": 467190,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-pull-apart-19a6fd868d684401.webp?alt=media&token=f723272f-0d21-4640-b38f-77d03c293783",
          "name": "trainai/creator-media/2026-10-07/trainai-band-pull-apart-19a6fd868d684401.webp",
          "verifiedAt": "2026-10-07T22:44:12.940Z"
        },
        "poster": {
          "sha256": "433de60cfc18526b133723fd6927e463f2fae109b25a23d53ec72941346a9045",
          "bytes": 41251,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-pull-apart-433de60cfc18526b.png?alt=media&token=c0577804-07fd-4ae4-902d-cc0e31dcbb25",
          "name": "trainai/creator-media/2026-10-07/trainai-band-pull-apart-433de60cfc18526b.png",
          "verifiedAt": "2026-10-07T22:44:12.360Z"
        }
      }
    },
    {
      "id": "trainai-band-romanian-deadlift",
      "slug": "band-romanian-deadlift",
      "name": "Band Romanian deadlift",
      "category": "Bands",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand on middle of orange band, hold ends by thighs with long straight arms.",
        "Push hips back with soft knees and neutral back, lower hands along shins to mid-shin, then extend hips to stand.",
        "Band connects hands to under shoes.",
        "Feet fixed, no squat, no rounded back."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-romanian-deadlift-069a7764febc.gif?alt=media&token=12e97df3-039c-477b-bc40-d50fde9e20c4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-romanian-deadlift-5b34416af338.png?alt=media&token=e92cec69-2b7e-4d48-8e58-a4fa74374daa",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-romanian-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b3aafa3411324411832a3592b95f80d81fc1fa3a169927b664fd7c2c8e69946d",
          "bytes": 268607,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-romanian-deadlift-b3aafa3411324411.gif?alt=media&token=deec9dc8-b781-4228-9d49-5c49992b5041",
          "name": "trainai/creator-media/2026-10-07/trainai-band-romanian-deadlift-b3aafa3411324411.gif",
          "verifiedAt": "2026-10-07T23:24:15.411Z"
        },
        "webp": {
          "sha256": "855c5527e231cb80729ff9382869b17baafbc617de62b2ca2603f6f880fcbd87",
          "bytes": 455424,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-romanian-deadlift-855c5527e231cb80.webp?alt=media&token=223f5df3-db85-42bd-ba6c-b97cd76ce0c9",
          "name": "trainai/creator-media/2026-10-07/trainai-band-romanian-deadlift-855c5527e231cb80.webp",
          "verifiedAt": "2026-10-07T22:44:13.520Z"
        },
        "poster": {
          "sha256": "77de5df385608e21e7a49275efe699c33c26ba6186021861e5118a947ea4cd03",
          "bytes": 48231,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-romanian-deadlift-77de5df385608e21.png?alt=media&token=a653599b-bbb0-4ce4-bd86-938bcac48b37",
          "name": "trainai/creator-media/2026-10-07/trainai-band-romanian-deadlift-77de5df385608e21.png",
          "verifiedAt": "2026-10-07T22:44:13.747Z"
        }
      }
    },
    {
      "id": "trainai-band-shoulder-press",
      "slug": "band-shoulder-press",
      "name": "Band shoulder press",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand on the center of an orange resistance band with both feet.",
        "Hold two band ends at shoulders, elbows bent.",
        "Press both hands overhead together, then lower to shoulders.",
        "Band strands remain connected under shoes, extending along outside arms.",
        "Feet, hips and torso remain still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-shoulder-press-e2ae213b1152.gif?alt=media&token=d6a8252e-59c9-4efc-8a4f-cc2cb25a927d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-shoulder-press-98fd19f177fa.png?alt=media&token=bd8496bf-23e7-4a79-a715-1ae75582588b",
      "aliases": [
        "band shoulder press"
      ],
      "legacyIds": [
        "0997"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-shoulder-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "961bd2ae51ff938a0a34dead8703531386e13077f5e4d0b858c4e230e3dde2a0",
          "bytes": 276133,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-shoulder-press-961bd2ae51ff938a.gif?alt=media&token=dc8aa9e7-03f0-4c41-813d-639428696b89",
          "name": "trainai/creator-media/2026-10-07/trainai-band-shoulder-press-961bd2ae51ff938a.gif",
          "verifiedAt": "2026-10-07T23:24:15.875Z"
        },
        "webp": {
          "sha256": "feadcb5dfd8309f27b1436f4f7f96560935bff822dd381978386da1810040136",
          "bytes": 474896,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-shoulder-press-feadcb5dfd8309f2.webp?alt=media&token=78cce337-7588-4994-96a7-ed05d1a9e304",
          "name": "trainai/creator-media/2026-10-07/trainai-band-shoulder-press-feadcb5dfd8309f2.webp",
          "verifiedAt": "2026-10-07T22:44:14.980Z"
        },
        "poster": {
          "sha256": "35b016248078343ad68a26b54b26366eba14f871c6767036e747467802874923",
          "bytes": 46288,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-shoulder-press-35b016248078343a.png?alt=media&token=54b34d43-bb0c-4911-bf72-a7cb6cbc046a",
          "name": "trainai/creator-media/2026-10-07/trainai-band-shoulder-press-35b016248078343a.png",
          "verifiedAt": "2026-10-07T22:44:14.989Z"
        }
      }
    },
    {
      "id": "trainai-band-straight-arm-pulldown",
      "slug": "band-straight-arm-pulldown",
      "name": "Band straight-arm pulldown",
      "category": "Bands",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-high-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with slight hip hinge, facing a small high anchor.",
        "Grasp two handles of orange band with nearly straight arms raised ahead to shoulder height.",
        "Sweep straight arms down to thighs, then return.",
        "Keep elbow angle unchanged, no rowing or triceps pressdown.",
        "Torso, shoes and high anchor stay fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-straight-arm-pulldown-de93f920a336.gif?alt=media&token=43270a54-f92e-4c73-a17c-47ddb9329837",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-straight-arm-pulldown-3e0f21e500b9.png?alt=media&token=67f9e4a7-1e10-4290-8c45-faa3eaafea14",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-straight-arm-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "61eca0e18c11a0dfa9e29004b3c5d8dcc6d9676d56b722f7ce015f6c390d126e",
          "bytes": 291344,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-straight-arm-pulldown-61eca0e18c11a0df.gif?alt=media&token=0d36badf-96a2-4265-a51b-393ab08f084a",
          "name": "trainai/creator-media/2026-10-07/trainai-band-straight-arm-pulldown-61eca0e18c11a0df.gif",
          "verifiedAt": "2026-10-07T23:24:15.027Z"
        },
        "webp": {
          "sha256": "2f7df19f3f3d472ddeab9977282c653a69f0cb1ebd12f60451d3809c29e15a6d",
          "bytes": 508280,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-straight-arm-pulldown-2f7df19f3f3d472d.webp?alt=media&token=8180bc2a-9ea0-469c-a864-8d24c538ee27",
          "name": "trainai/creator-media/2026-10-07/trainai-band-straight-arm-pulldown-2f7df19f3f3d472d.webp",
          "verifiedAt": "2026-10-07T23:24:21.657Z"
        },
        "poster": {
          "sha256": "14b3feb1f9b1116185f7864f4d2a0fb4798eb1653a5b9f9f5d8be58713b36ff6",
          "bytes": 47341,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-straight-arm-pulldown-14b3feb1f9b11161.png?alt=media&token=9a319d68-5f1e-4da3-8033-8d430fca5e36",
          "name": "trainai/creator-media/2026-10-07/trainai-band-straight-arm-pulldown-14b3feb1f9b11161.png",
          "verifiedAt": "2026-10-07T23:24:16.715Z"
        }
      }
    },
    {
      "id": "trainai-band-triceps-pressdown",
      "slug": "band-triceps-pressdown",
      "name": "Band triceps pressdown",
      "category": "Bands",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-high-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing a small fixed high band anchor.",
        "Orange band runs down to two handles in hands.",
        "Elbows tucked at ribs start bent 90 degrees.",
        "Straighten elbows to push hands to thighs, then return forearms to horizontal.",
        "Upper arms, torso and feet stay stationary."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-triceps-pressdown-0553ff44c29a.gif?alt=media&token=26daf8c9-ace0-400f-92d8-41cbab8cf5fa",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-band-triceps-pressdown-4020bdc50aac.png?alt=media&token=f434868a-5ff3-47ab-a61d-2433922fe58e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-triceps-pressdown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a79e852bc556de3b45425c906832d603e4e11e44642c4c8ca8a3f5d02504deea",
          "bytes": 286484,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-triceps-pressdown-a79e852bc556de3b.gif?alt=media&token=3233a171-8780-4a5c-978b-4f997a7823be",
          "name": "trainai/creator-media/2026-10-07/trainai-band-triceps-pressdown-a79e852bc556de3b.gif",
          "verifiedAt": "2026-10-07T23:24:19.689Z"
        },
        "webp": {
          "sha256": "5b67e18bb960c0ec43e8b23aae7a162e0ef75b2dbb90f7fed045e95ab48a738d",
          "bytes": 488962,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-triceps-pressdown-5b67e18bb960c0ec.webp?alt=media&token=c6c4b924-3771-49ab-8da5-d5378582d038",
          "name": "trainai/creator-media/2026-10-07/trainai-band-triceps-pressdown-5b67e18bb960c0ec.webp",
          "verifiedAt": "2026-10-07T23:24:19.091Z"
        },
        "poster": {
          "sha256": "bd72bf5d2fb3a171de98707059cb43c883b6f1683646115b89451852ee043d3c",
          "bytes": 47057,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-band-triceps-pressdown-bd72bf5d2fb3a171.png?alt=media&token=fdda3b92-902f-4d0b-baa3-d9a9d61894d8",
          "name": "trainai/creator-media/2026-10-07/trainai-band-triceps-pressdown-bd72bf5d2fb3a171.png",
          "verifiedAt": "2026-10-07T23:24:19.875Z"
        }
      }
    },
    {
      "id": "trainai-banded-clamshell",
      "slug": "banded-clamshell",
      "name": "Banded clamshell",
      "category": "Bands",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "mini-band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on left side, head supported by left forearm, hips and knees bent, feet stacked.",
        "Orange mini loop band above knees.",
        "Keep pelvis stacked and feet together while lifting only upper knee outward, then lower.",
        "Do not roll torso backward or lift feet.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-banded-clamshell-714e492b0325.gif?alt=media&token=9a10e6e2-849c-4366-948a-dddc01cd006a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-banded-clamshell-0918f929e256.png?alt=media&token=4c6af25a-816d-4401-8045-2f6c401df1c3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/banded-clamshell/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7dbb7bc617431cc33bbf9fa548f82a18fc5beeae1a2759472aa972462f82e913",
          "bytes": 380535,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-banded-clamshell-7dbb7bc617431cc3.gif?alt=media&token=d1d87151-5376-4a99-82c4-5c1c6947a98e",
          "name": "trainai/creator-media/2026-10-07/trainai-banded-clamshell-7dbb7bc617431cc3.gif",
          "verifiedAt": "2026-10-07T23:24:23.241Z"
        },
        "webp": {
          "sha256": "65551201746c817210a9073c352042ed610e867d191f093883986263448168c4",
          "bytes": 631390,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-banded-clamshell-65551201746c8172.webp?alt=media&token=a14f888b-950b-460b-a6a9-28b9478ea952",
          "name": "trainai/creator-media/2026-10-07/trainai-banded-clamshell-65551201746c8172.webp",
          "verifiedAt": "2026-10-07T22:44:18.919Z"
        },
        "poster": {
          "sha256": "ea902380675db896eac292da4e6045be5ab8afb3b41a45853346387f23759a8f",
          "bytes": 61528,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-banded-clamshell-ea902380675db896.png?alt=media&token=6c993583-4e8c-465c-9c01-aef56c0ee70a",
          "name": "trainai/creator-media/2026-10-07/trainai-banded-clamshell-ea902380675db896.png",
          "verifiedAt": "2026-10-07T22:44:18.756Z"
        }
      }
    },
    {
      "id": "trainai-banded-glute-bridge",
      "slug": "banded-glute-bridge",
      "name": "Banded glute bridge",
      "category": "Bands",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "mini-band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on back, knees bent, both feet flat, orange mini band around thighs above knees.",
        "Arms rest on floor.",
        "Lift hips until shoulders-hips-knees align, keeping knees slightly apart against band, then lower hips.",
        "Head, shoulders, hands and feet remain on floor at fixed positions."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-banded-glute-bridge-e9e9d5fbf475.gif?alt=media&token=3c595219-1d2e-4385-927c-51efb89c0d10",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-banded-glute-bridge-66b4294bfc42.png?alt=media&token=78aee824-b1b4-409f-8a9a-2c738932c572",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/banded-glute-bridge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e58f3a9bc83796509ab31cd59f7ea4473d1b236f02449415226c8f894123c33c",
          "bytes": 272950,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-banded-glute-bridge-e58f3a9bc8379650.gif?alt=media&token=4a161e76-be1a-4dd9-8242-1c2f0b21b374",
          "name": "trainai/creator-media/2026-10-07/trainai-banded-glute-bridge-e58f3a9bc8379650.gif",
          "verifiedAt": "2026-10-07T23:24:22.016Z"
        },
        "webp": {
          "sha256": "b3f6dace452fc58cba7067a5d95e9d93625c240f7b71e3059b77fef31bd928f5",
          "bytes": 469052,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-banded-glute-bridge-b3f6dace452fc58c.webp?alt=media&token=aaa2f2a8-4aae-4adf-92e4-958696bcc61b",
          "name": "trainai/creator-media/2026-10-07/trainai-banded-glute-bridge-b3f6dace452fc58c.webp",
          "verifiedAt": "2026-10-07T22:44:19.836Z"
        },
        "poster": {
          "sha256": "d2e7998a68e4961f46e5adbf180ecc2d50881d3d83cb45d948e18244afbf552e",
          "bytes": 45180,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-banded-glute-bridge-d2e7998a68e4961f.png?alt=media&token=567a0e1a-f25a-4d0b-a3c3-18b610cb1d20",
          "name": "trainai/creator-media/2026-10-07/trainai-banded-glute-bridge-d2e7998a68e4961f.png",
          "verifiedAt": "2026-10-07T22:44:19.661Z"
        }
      }
    },
    {
      "id": "trainai-barbell-back-squat",
      "slug": "barbell-back-squat",
      "name": "Barbell back squat",
      "category": "Barbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "rack",
        "safeties"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start standing inside a simple black squat rack with safeties, small symmetrical plates on barbell resting across upper back/trapezius below neck, hands grip just outside shoulders.",
        "Feet planted shoulder width.",
        "Sit hips down between knees into controlled squat, then stand.",
        "Bar stays supported on upper back and follows torso, knees track toes.",
        "Rack and safeties never move."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-back-squat-d2c5a1786808.gif?alt=media&token=dde5339e-72ba-4032-9690-3c8d3044746a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-back-squat-e1841de1b3cf.png?alt=media&token=83d2677f-e955-48d5-b0c1-0be9b87d3194",
      "aliases": [
        "barbell full squat"
      ],
      "legacyIds": [
        "0043"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-back-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3d22d1880632b82cb451d14422ba0e6609e2545f043af2e7c6c1defb17d29488",
          "bytes": 498188,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-back-squat-3d22d1880632b82c.gif?alt=media&token=5ca7b684-fc6c-4941-a83a-d4f694eab431",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-back-squat-3d22d1880632b82c.gif",
          "verifiedAt": "2026-10-07T23:24:26.038Z"
        },
        "webp": {
          "sha256": "8a354a4798914e11213e7d0eeb242c8f6f19932019e703d6bc3437c4a79b9968",
          "bytes": 775998,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-back-squat-8a354a4798914e11.webp?alt=media&token=e2f48df2-806a-4bb5-835c-06c439501b94",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-back-squat-8a354a4798914e11.webp",
          "verifiedAt": "2026-10-07T22:44:21.601Z"
        },
        "poster": {
          "sha256": "54c7d26561e44085ff5e4da7fc74631c9b3fee9a221e687f075adbe127fe78f0",
          "bytes": 75909,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-back-squat-54c7d26561e44085.png?alt=media&token=9eb07d13-aad2-4718-a56f-1e2f9b304e16",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-back-squat-54c7d26561e44085.png",
          "verifiedAt": "2026-10-07T22:44:20.685Z"
        }
      }
    },
    {
      "id": "trainai-barbell-bench-press",
      "slug": "barbell-bench-press",
      "name": "Barbell bench press",
      "category": "Barbell foundations",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Barbell bench press.",
        "Lie on a FLAT bench, head at left feet at right, feet flat and back supported.",
        "Start arms straight vertically above middle chest with a moderate-width overhand grip.",
        "Lower a single rigid barbell toward MIDDLE CHEST/STERNUM just below nipple level.",
        "At bottom wrists stack over elbows and bar touches mid-chest, well away from face/neck.",
        "Elbows about 45 degrees from torso.",
        "Keep bar as one rigid shaft with unchanged plates.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-bench-press-f7999292a8c7.gif?alt=media&token=9cdaffa6-c8fd-444d-a12d-d627fea9bb0f",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-bench-press-b3acbb6c1f86.png?alt=media&token=74bec8fb-c190-439c-bc07-8c94b57d6e5d",
      "aliases": [
        "barbell bench press"
      ],
      "legacyIds": [
        "0025"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-bench-press/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1440,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4653da66e474c66a9c22574fd169305e074cc738229da993aa0bebd7e915d27b",
          "bytes": 369285,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-bench-press-4653da66e474c66a.gif?alt=media&token=db161774-e660-49e5-b56d-a1efb0aa194a",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-bench-press-4653da66e474c66a.gif",
          "verifiedAt": "2026-10-07T23:24:24.343Z"
        },
        "webp": {
          "sha256": "536c36145c4b9a3107ad3f4d828609c79988986c373d2d5224b75ebf2610c58b",
          "bytes": 569002,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-bench-press-536c36145c4b9a31.webp?alt=media&token=fcdb8008-3b04-440c-9baf-416c2b730294",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-bench-press-536c36145c4b9a31.webp",
          "verifiedAt": "2026-10-07T23:24:29.626Z"
        },
        "poster": {
          "sha256": "a72b8221f20e9136e0e2848425e01eb60695895ed489288c295514c0be0caa5c",
          "bytes": 132582,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-bench-press-a72b8221f20e9136.png?alt=media&token=8d899bc8-e9e9-4133-9318-f4c24747a616",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-bench-press-a72b8221f20e9136.png",
          "verifiedAt": "2026-10-07T23:24:25.676Z"
        }
      }
    },
    {
      "id": "trainai-barbell-bent-over-row",
      "slug": "barbell-bent-over-row",
      "name": "Barbell bent-over row",
      "category": "Barbell foundations",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand feet planted, knees soft, torso hinged to roughly 35 degrees above horizontal with straight back.",
        "Hold light barbell with overhand shoulder-width grip, arms extended beneath shoulders.",
        "Pull to lower ribs with elbows back, then lower.",
        "Torso angle and feet remain fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-bent-over-row-8e77cdb1a747.gif?alt=media&token=9c2709a4-8484-427a-84c2-32d591daa99b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-bent-over-row-ee0f0af60bf2.png?alt=media&token=759894ee-cebf-4f8d-aae5-467f2d230081",
      "aliases": [
        "barbell bent over row"
      ],
      "legacyIds": [
        "0027"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-bent-over-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2320ffa58bf0ceb10ee0b9bfd60af4bd2b71c017f6983f98c407b8d2097a8227",
          "bytes": 434413,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-bent-over-row-2320ffa58bf0ceb1.gif?alt=media&token=ad77f50a-1959-4e8d-96c5-1fe8985761d3",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-bent-over-row-2320ffa58bf0ceb1.gif",
          "verifiedAt": "2026-10-07T23:24:29.540Z"
        },
        "webp": {
          "sha256": "bc6fc3a11de827d189ae24411bc782c3b976d6b8f150fc6b41e3277910c43cda",
          "bytes": 705344,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-bent-over-row-bc6fc3a11de827d1.webp?alt=media&token=ad0b90ce-9004-4146-9b8c-efdea325c40d",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-bent-over-row-bc6fc3a11de827d1.webp",
          "verifiedAt": "2026-10-07T22:44:23.791Z"
        },
        "poster": {
          "sha256": "7b4f2da80201758757a2ddd9010a7c8cabca3f175034ab03b7d0d5d1406422b8",
          "bytes": 71668,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-bent-over-row-7b4f2da802017587.png?alt=media&token=04488a67-cc71-46ec-9fad-1cb8058592e9",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-bent-over-row-7b4f2da802017587.png",
          "verifiedAt": "2026-10-07T22:44:23.801Z"
        }
      }
    },
    {
      "id": "trainai-barbell-box-squat",
      "slug": "barbell-box-squat",
      "name": "Barbell box squat",
      "category": "Barbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "rack",
        "safeties",
        "rated-squat-box"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set a stable, load-rated box behind you and use a rack with safety supports.",
        "With the bar across your upper back, squat until you touch the box lightly without rocking backward.",
        "Stand through both feet while keeping the trunk braced."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-box-squat-7a4c6fbedb65.gif?alt=media&token=1a2dddb5-62e4-407d-b78a-a07e291c0342",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-box-squat-9b6896916793.png?alt=media&token=3944506c-2b8d-4cc7-8695-ffaa8150f37d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-box-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "faddf3dfff561ba1fc3a95a23547782558f318e3798cc31a9dd220f89c86f3b4",
          "bytes": 550414,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-box-squat-faddf3dfff561ba1.gif?alt=media&token=75f73cfa-96d9-4233-a854-6f7e9ea911fb",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-box-squat-faddf3dfff561ba1.gif",
          "verifiedAt": "2026-10-07T23:24:29.800Z"
        },
        "webp": {
          "sha256": "ab40cb0b0f125c262e73d3239055fd22da2bba89dd6a0270385c27df2ce47560",
          "bytes": 864774,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-box-squat-ab40cb0b0f125c26.webp?alt=media&token=117fb265-2a1c-4865-be19-11c0f178187e",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-box-squat-ab40cb0b0f125c26.webp",
          "verifiedAt": "2026-10-07T22:44:26.068Z"
        },
        "poster": {
          "sha256": "722ab6090e7a45cf0b9583da696cee2a8e9ad58833c54758aba7d85c8891700d",
          "bytes": 83977,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-box-squat-722ab6090e7a45cf.png?alt=media&token=528b4718-0ea2-439f-8ab6-d7c9df11e2eb",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-box-squat-722ab6090e7a45cf.png",
          "verifiedAt": "2026-10-07T22:44:25.093Z"
        }
      }
    },
    {
      "id": "trainai-barbell-curl",
      "slug": "barbell-curl",
      "name": "Barbell curl",
      "category": "Barbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand holding light straight barbell with underhand shoulder-width grip, arms down.",
        "Bend elbows to curl bar toward lower chest, then lower.",
        "Upper arms stay beside ribs, wrists straight, no torso rocking or knee movement."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-curl-326d816dfcf3.gif?alt=media&token=7287cbf5-ffe1-4401-b39e-121b7f552bdd",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-curl-19d98d520064.png?alt=media&token=ecf8faf7-e55d-4c43-9367-643a7985388a",
      "aliases": [
        "barbell curl"
      ],
      "legacyIds": [
        "0031"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a447461d6c275bf00666f25eb9f280dd8d8d46c6c7f518f30dc6f39cef335d10",
          "bytes": 342663,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-curl-a447461d6c275bf0.gif?alt=media&token=51ec0c9a-ad24-42fd-8b22-5455558cd985",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-curl-a447461d6c275bf0.gif",
          "verifiedAt": "2026-10-07T23:24:32.792Z"
        },
        "webp": {
          "sha256": "1650a6aec04032cb10a7dbe4aa889fa2ea19b281a0a3f5425c8765de1c302a14",
          "bytes": 551020,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-curl-1650a6aec04032cb.webp?alt=media&token=c189754a-384c-4256-a4c0-f699b2658bed",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-curl-1650a6aec04032cb.webp",
          "verifiedAt": "2026-10-07T22:44:26.645Z"
        },
        "poster": {
          "sha256": "942e690d4bb9ddc94c7bb457c9769095a948e054bff815ec9169c0fdaf5c297a",
          "bytes": 56237,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-curl-942e690d4bb9ddc9.png?alt=media&token=6168302b-d63f-4354-8983-600d452c006d",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-curl-942e690d4bb9ddc9.png",
          "verifiedAt": "2026-10-07T22:44:26.837Z"
        }
      }
    },
    {
      "id": "trainai-barbell-deadlift",
      "slug": "barbell-deadlift",
      "name": "Barbell deadlift",
      "category": "Barbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Light barbell with equal round plates begins on floor over mid-foot.",
        "Athlete already grips bar just outside knees, hips hinged and knees bent, neutral back.",
        "Stand by extending hips and knees, bar travels close to shins and thighs, finish tall, then lower to floor while keeping grip.",
        "No shrugging or back hyperextension."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-deadlift-29b566783fe0.gif?alt=media&token=8b03fc13-1938-4620-85bd-e2114f8d76bb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-deadlift-d37bcfb9a91b.png?alt=media&token=1a8670fd-a7d9-46fd-b3e1-429b996fb043",
      "aliases": [
        "barbell deadlift"
      ],
      "legacyIds": [
        "0032"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 2160,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a2425e525fce0d5539c0eb12c067845e4deacd3f30ed4c6cf60abf7ea7bbc988",
          "bytes": 298033,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-deadlift-a2425e525fce0d55.gif?alt=media&token=bf2fc682-b951-4174-82b3-fef9d20cb75f",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-deadlift-a2425e525fce0d55.gif",
          "verifiedAt": "2026-10-07T23:24:31.667Z"
        },
        "webp": {
          "sha256": "f4c9f28e94a54fd7ff6c1a772d82d7b5d8698b082f86a6a7004b7de04813e28d",
          "bytes": 472996,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-deadlift-f4c9f28e94a54fd7.webp?alt=media&token=357dfdb7-8fce-4792-bafa-c8612109a070",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-deadlift-f4c9f28e94a54fd7.webp",
          "verifiedAt": "2026-10-07T22:44:27.482Z"
        },
        "poster": {
          "sha256": "b2472844cb66f05611cd0e546d6d94ce400e5be2813c63de32386548e8e5a407",
          "bytes": 62264,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-deadlift-b2472844cb66f056.png?alt=media&token=63a5dcc0-4220-443a-ba50-e678cb11f37d",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-deadlift-b2472844cb66f056.png",
          "verifiedAt": "2026-10-07T22:44:27.573Z"
        }
      }
    },
    {
      "id": "trainai-barbell-front-squat",
      "slug": "barbell-front-squat",
      "name": "Barbell front squat",
      "category": "Barbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "rack",
        "safeties"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Barbell front squat: bar rests across FRONT shoulders/deltoids with fingertips under bar and elbows pointing HIGH FORWARD, upper arms near horizontal.",
        "Never hold it like a biceps curl.",
        "Start standing; bend hips/knees into controlled squat until thighs roughly parallel, heels flat, torso upright.",
        "Bar stays supported on shoulders, elbows stay forward.",
        "One rigid barbell with two equal plates."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-front-squat-2ef88644233b.gif?alt=media&token=b9032163-379b-4e42-bfb3-8311421e9e3b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-front-squat-27107d2167f2.png?alt=media&token=64656f3b-0f88-4415-abce-d6b50e395534",
      "aliases": [
        "barbell front squat",
        "barbell clean-grip front squat"
      ],
      "legacyIds": [
        "0042",
        "0029"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-front-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 1760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c30915c3b3897410c406812734a3bc067ec400add71747938bedf9caf2cd5028",
          "bytes": 847338,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-front-squat-c30915c3b3897410.gif?alt=media&token=790b1619-c1bb-4ee6-b104-eaeb0aba413c",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-front-squat-c30915c3b3897410.gif",
          "verifiedAt": "2026-10-07T23:24:37.894Z"
        },
        "webp": {
          "sha256": "2b6909660dcff562b249b6eeeac8b4cd6ed7dda41932ff98173b494f34d75843",
          "bytes": 1261266,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-front-squat-2b6909660dcff562.webp?alt=media&token=9368670b-e994-4047-8cb8-2093d29dc783",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-front-squat-2b6909660dcff562.webp",
          "verifiedAt": "2026-10-07T23:24:52.177Z"
        },
        "poster": {
          "sha256": "67dc9479768c7d5d2573951d8d21f3a474074cffd5264b1726a7fdbb6cc8272d",
          "bytes": 136073,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-front-squat-67dc9479768c7d5d.png?alt=media&token=06224d69-0de4-43ec-9719-560b7985a920",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-front-squat-67dc9479768c7d5d.png",
          "verifiedAt": "2026-10-07T23:24:36.263Z"
        }
      }
    },
    {
      "id": "trainai-barbell-hip-thrust",
      "slug": "barbell-hip-thrust",
      "name": "Barbell hip thrust",
      "category": "Barbell foundations",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "bench",
        "pad"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Upper back supported across a fixed low bench.",
        "Knees bent, feet flat shoulder width.",
        "Light padded barbell rests across hip crease and held securely with both hands.",
        "Start hips lowered, extend hips to bring shoulders-hips-knees in straight line, chin gently tucked, then lower.",
        "Bench and feet stay fixed; bar moves with pelvis."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-hip-thrust-3b905aede1b1.gif?alt=media&token=20d9e441-309a-4c7e-b808-e0073f1c2da3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-hip-thrust-f1de4a98b365.png?alt=media&token=03595053-e5e5-4bfb-a879-b9749fc4d9c0",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-hip-thrust/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "166481cf5a1a909fe5b210d0141f09ee270b431e1b0162235c99d6f3875d05d7",
          "bytes": 619374,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-hip-thrust-166481cf5a1a909f.gif?alt=media&token=aa7fe513-a973-4865-ac1e-7ee9321afec0",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-hip-thrust-166481cf5a1a909f.gif",
          "verifiedAt": "2026-10-07T23:24:41.609Z"
        },
        "webp": {
          "sha256": "2446fd735a57040e3ff99ceb3f8968b485e1f5775ad9d5d2cd2a36f10cfe1adb",
          "bytes": 991446,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-hip-thrust-2446fd735a57040e.webp?alt=media&token=dd8f7514-db43-4eef-acf7-b81d2f76864c",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-hip-thrust-2446fd735a57040e.webp",
          "verifiedAt": "2026-10-07T23:24:45.963Z"
        },
        "poster": {
          "sha256": "ca20fd3550cef74450d0eb23ba5ef247617ae360a34ec36615709bf67c2fa2a4",
          "bytes": 123188,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-hip-thrust-ca20fd3550cef744.png?alt=media&token=4900c50f-654a-4ac0-8949-57fe52c01f2c",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-hip-thrust-ca20fd3550cef744.png",
          "verifiedAt": "2026-10-07T23:24:42.881Z"
        }
      }
    },
    {
      "id": "trainai-barbell-incline-bench-press",
      "slug": "barbell-incline-bench-press",
      "name": "Barbell incline bench press",
      "category": "Barbell foundations",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "adjustable-bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie against a fixed 30-degree incline bench inside rack with safeties.",
        "Feet planted.",
        "Hold light barbell above upper chest, grip just wider than shoulders.",
        "Lower to upper chest with controlled elbows, then press to extension.",
        "Keep head, back and pelvis supported.",
        "No unracking, no change in bench angle."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-incline-bench-press-e7b947d2199f.gif?alt=media&token=d858579c-3532-44c4-b822-6490f4e4b0e9",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-incline-bench-press-0e70d4292801.png?alt=media&token=711daac3-7be0-40e5-bd63-b4d431bec27c",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-incline-bench-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f190a9e296d7b2bef5e91b2ee2bab0e9657212dff8a7dbcf2d5311b72aad7ea0",
          "bytes": 556002,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-incline-bench-press-f190a9e296d7b2be.gif?alt=media&token=4c2b0527-290d-4bcd-b124-8b9aacbbcb6f",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-incline-bench-press-f190a9e296d7b2be.gif",
          "verifiedAt": "2026-10-07T23:24:44.866Z"
        },
        "webp": {
          "sha256": "fe368bc980ba596e471c2dd44c574c43f72546b2a7fbf9c52f6a1dcfc82176eb",
          "bytes": 845818,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-incline-bench-press-fe368bc980ba596e.webp?alt=media&token=466efe54-9eb3-42fd-8776-4b6d67b13893",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-incline-bench-press-fe368bc980ba596e.webp",
          "verifiedAt": "2026-10-07T23:24:47.078Z"
        },
        "poster": {
          "sha256": "3e80bbe670024e730cfa681ddc34ba2a3a08fa465ce1a1c5c683afc1f638e9ba",
          "bytes": 87380,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-incline-bench-press-3e80bbe670024e73.png?alt=media&token=b4411c1f-63e9-4b7e-aadc-4a35798eddbf",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-incline-bench-press-3e80bbe670024e73.png",
          "verifiedAt": "2026-10-07T23:24:46.824Z"
        }
      }
    },
    {
      "id": "trainai-barbell-overhead-press",
      "slug": "barbell-overhead-press",
      "name": "Barbell overhead press",
      "category": "Barbell foundations",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "rack"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand feet hip width holding light barbell at upper chest with overhand grip just wider than shoulders.",
        "Press vertically overhead, move head slightly back to clear bar then head through at top.",
        "Lower to chest.",
        "Knees straight but not locked, no leg drive or leaning."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-overhead-press-41287f360ff4.gif?alt=media&token=db34e999-9fd9-4d99-9a54-1928c26fbc7b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-overhead-press-b18e007ca34a.png?alt=media&token=901af360-899b-43e0-bbb1-f28b2596fb2e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-overhead-press/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 2160,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0e17558f41431fdfd64a2dd4c61b301cc0dda8e8baf7fd0dd47bed551aafe2ab",
          "bytes": 330805,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-overhead-press-0e17558f41431fdf.gif?alt=media&token=841bd613-9b17-4a01-8296-f63eb21eb6d1",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-overhead-press-0e17558f41431fdf.gif",
          "verifiedAt": "2026-10-07T23:24:49.187Z"
        },
        "webp": {
          "sha256": "e8d315924a68e2d729e4bb55772c12c841aac34dcf5ef33004ead253af79dbab",
          "bytes": 506474,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-overhead-press-e8d315924a68e2d7.webp?alt=media&token=44ca7193-a22e-4a34-875e-ca55509e1871",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-overhead-press-e8d315924a68e2d7.webp",
          "verifiedAt": "2026-10-07T23:24:48.384Z"
        },
        "poster": {
          "sha256": "b0a8304c911fbc31c94378c2ca1d409f2a13769e342b1c186bad109553ace030",
          "bytes": 71412,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-overhead-press-b0a8304c911fbc31.png?alt=media&token=ba00c371-eaad-49aa-9887-fed78e752643",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-overhead-press-b0a8304c911fbc31.png",
          "verifiedAt": "2026-10-07T23:24:49.683Z"
        }
      }
    },
    {
      "id": "trainai-barbell-romanian-deadlift",
      "slug": "barbell-romanian-deadlift",
      "name": "Barbell Romanian deadlift",
      "category": "Barbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand holding light barbell with equal plates in front of thighs, hands shoulder width, arms straight.",
        "Push hips backward with softly bent knees, slide bar close to legs to mid-shin, then extend hips to stand.",
        "Bar never released, back neutral, feet planted."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-romanian-deadlift-81cf2cb4d723.gif?alt=media&token=3cf80de7-4bb9-4902-9a3e-5fef95425fd3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-romanian-deadlift-7300b1bee945.png?alt=media&token=61cd7477-99ff-4e79-ae65-98bab65e5fc0",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-romanian-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ecac6a1970257bafec96c85e3cdb7e51496848e4b20e2a85798e98498ea89b6b",
          "bytes": 341909,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-romanian-deadlift-ecac6a1970257baf.gif?alt=media&token=6e8b0c2b-e594-4b5f-bc8a-b34fb4f7f20b",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-romanian-deadlift-ecac6a1970257baf.gif",
          "verifiedAt": "2026-10-07T23:24:52.201Z"
        },
        "webp": {
          "sha256": "e583eb99fcf9a6f41501b2293653e4c30944b423ffcc140b9b61134eeffb7f43",
          "bytes": 552118,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-romanian-deadlift-e583eb99fcf9a6f4.webp?alt=media&token=e52e0c2b-4c42-4309-9319-64b49bc1a232",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-romanian-deadlift-e583eb99fcf9a6f4.webp",
          "verifiedAt": "2026-10-07T23:24:52.214Z"
        },
        "poster": {
          "sha256": "69b8d7bb6a5862fa3b56bae8f77c6ba74d5d74f63ff3785b60e0724ae98a5dc2",
          "bytes": 56594,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-romanian-deadlift-69b8d7bb6a5862fa.png?alt=media&token=2c7b25be-dc14-4c2b-9b5f-82b0dd08565a",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-romanian-deadlift-69b8d7bb6a5862fa.png",
          "verifiedAt": "2026-10-07T23:24:55.781Z"
        }
      }
    },
    {
      "id": "trainai-barbell-sumo-deadlift",
      "slug": "barbell-sumo-deadlift",
      "name": "Barbell sumo deadlift",
      "category": "Barbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start with feet wide and toes turned outward, barbell over mid-foot with equal plates on floor.",
        "Grip bar with both hands INSIDE knees.",
        "Extend knees and hips to stand tall with bar close to body, then lower under control with same wide stance.",
        "Knees track toes, back neutral and feet stay fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-sumo-deadlift-dd8920e61b2f.gif?alt=media&token=475079f0-ca9c-484a-a45a-44598d3a7622",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-barbell-sumo-deadlift-6443a873fc34.png?alt=media&token=d94967cb-c75a-472e-9eb5-86ab7d73b6fa",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-sumo-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 2160,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "dbed590c5129cd338114c0c6c6c1c0cb4a8d092505d2909796b37735494b6437",
          "bytes": 298064,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-sumo-deadlift-dbed590c5129cd33.gif?alt=media&token=70774ab5-088f-4905-924f-292e03ec002f",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-sumo-deadlift-dbed590c5129cd33.gif",
          "verifiedAt": "2026-10-07T23:24:57.688Z"
        },
        "webp": {
          "sha256": "ddc1fce9a240c161ffcd67d5b518e03b80895e4f92480b55ab91dc1d92634614",
          "bytes": 465670,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-sumo-deadlift-ddc1fce9a240c161.webp?alt=media&token=09f60cca-0cfc-4524-b60c-851d28140487",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-sumo-deadlift-ddc1fce9a240c161.webp",
          "verifiedAt": "2026-10-07T22:44:34.447Z"
        },
        "poster": {
          "sha256": "3d0c1b17862bc33c4a25761946ecdfaaf3c42ed76ee3ae399ea77ecb9d6cd8bd",
          "bytes": 63027,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-sumo-deadlift-3d0c1b17862bc33c.png?alt=media&token=77e6d6a7-2c9b-4cc9-8a47-1304d1888745",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-sumo-deadlift-3d0c1b17862bc33c.png",
          "verifiedAt": "2026-10-07T22:44:34.467Z"
        }
      }
    },
    {
      "id": "trainai-bear-crawl",
      "slug": "bear-crawl",
      "name": "Bear crawl",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Start on hands and toes with knees bent and hovering just above the floor.",
        "Move one hand and the opposite foot forward in a short step.",
        "Alternate diagonal pairs while keeping the back level and the hips low."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bear-crawl-12528ae334be.gif?alt=media&token=3700f734-5861-4fbd-9636-64e28e00647b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bear-crawl-8ef977548a98.png?alt=media&token=e31608db-6a80-4f0b-9dcf-3d4d644bbd33",
      "aliases": [
        "bear crawl"
      ],
      "legacyIds": [
        "3360"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/bear-crawl/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3361dbe308a5268aa7f8e6ac1bf0f064da0efa99cd61dc9cd5e2b375b5aa5335",
          "bytes": 308256,
          "mimeType": "image/gif",
          "width": 624,
          "height": 624,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bear-crawl-3361dbe308a5268a.gif?alt=media&token=c52aef62-3e0a-4263-992e-68842c81dd3e",
          "name": "trainai/creator-media/2026-10-07/trainai-bear-crawl-3361dbe308a5268a.gif",
          "verifiedAt": "2026-10-07T23:24:59.654Z"
        },
        "webp": {
          "sha256": "cdbf50d5969c12ae2caffea72bc4c1e28fca1c669051c937057f868fdd70f622",
          "bytes": 505520,
          "mimeType": "image/webp",
          "width": 624,
          "height": 624,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bear-crawl-cdbf50d5969c12ae.webp?alt=media&token=52c29156-f479-492e-8fb8-1b9810270f2a",
          "name": "trainai/creator-media/2026-10-07/trainai-bear-crawl-cdbf50d5969c12ae.webp",
          "verifiedAt": "2026-10-07T23:24:58.984Z"
        },
        "poster": {
          "sha256": "e02ced81a378c17d3daf51dcd17016bd56211b065a2aa93b3837bfe62008bdd3",
          "bytes": 241213,
          "mimeType": "image/png",
          "width": 624,
          "height": 624,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bear-crawl-e02ced81a378c17d.png?alt=media&token=6342ba53-0e82-4336-8eaf-dc8937f63fb4",
          "name": "trainai/creator-media/2026-10-07/trainai-bear-crawl-e02ced81a378c17d.png",
          "verifiedAt": "2026-10-07T23:24:59.526Z"
        }
      }
    },
    {
      "id": "trainai-bear-plank",
      "slug": "bear-plank",
      "name": "Bear plank",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Start with palms under shoulders, knees under hips, toes tucked.",
        "Lift both knees only a few centimeters from floor while keeping hips low and back flat.",
        "Hold the bear hover, then lower knees.",
        "Knees remain bent about 90 degrees; do not turn it into a straight-leg plank."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bear-plank-50e90f79f329.gif?alt=media&token=589cdb33-2a21-4a86-beb4-2f99f12d7e46",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bear-plank-8dbe7575cc99.png?alt=media&token=9e0d1d03-3b8d-4f47-95b2-abe29c3d0b98",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bear-plank/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "282818f90d0200693a68285899b3ad5994d63ea01ec7e0d154f05db139577b00",
          "bytes": 240942,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bear-plank-282818f90d020069.gif?alt=media&token=ebb77711-43f9-47b3-a92d-3604b1cce7be",
          "name": "trainai/creator-media/2026-10-07/trainai-bear-plank-282818f90d020069.gif",
          "verifiedAt": "2026-10-07T23:25:02.747Z"
        },
        "webp": {
          "sha256": "80e6e63a8acb67302f18c8a5d720c03e1f4dcd6c66f5c33868794e9f54f1dfea",
          "bytes": 384540,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bear-plank-80e6e63a8acb6730.webp?alt=media&token=4bace4f1-3363-4afe-a5ed-113addde90cd",
          "name": "trainai/creator-media/2026-10-07/trainai-bear-plank-80e6e63a8acb6730.webp",
          "verifiedAt": "2026-10-07T22:44:36.585Z"
        },
        "poster": {
          "sha256": "3ffcea9e0a6da4ec246764c3b27a65cb8607e0a7da98c2c3ce7d7bbeec626bff",
          "bytes": 74510,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bear-plank-3ffcea9e0a6da4ec.png?alt=media&token=4c030a7c-100d-45a8-90a8-472f74b5f20b",
          "name": "trainai/creator-media/2026-10-07/trainai-bear-plank-3ffcea9e0a6da4ec.png",
          "verifiedAt": "2026-10-07T22:44:36.294Z"
        }
      }
    },
    {
      "id": "trainai-bench-supported-one-arm-dumbbell-row",
      "slug": "bench-supported-one-arm-dumbbell-row",
      "name": "Bench-supported one-arm dumbbell row",
      "category": "Dumbbell foundations",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Support one palm and same-side knee on a flat bench, other foot planted on floor.",
        "With neutral back, pull a dumbbell in the free hand from beneath shoulder toward that hip, elbow close to ribs; lower to straight arm.",
        "Trunk stays still, no twisting or shrugging."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bench-supported-one-arm-dumbbell-row-d617b70af84a.gif?alt=media&token=07158119-c1bd-4b6b-97a4-0088d6b109c7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bench-supported-one-arm-dumbbell-row-a42bfb3c8717.png?alt=media&token=bb647e14-2f28-4783-b34c-58009df39fd0",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bench-supported-one-arm-dumbbell-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "48bb524dd1537f19e05bc491b8fd2f10fd2304e50abdd0107f783982859d92cc",
          "bytes": 413392,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bench-supported-one-arm-dumbbell-row-48bb524dd1537f19.gif?alt=media&token=02b24102-cc18-4a3d-a08e-05e988965b77",
          "name": "trainai/creator-media/2026-10-07/trainai-bench-supported-one-arm-dumbbell-row-48bb524dd1537f19.gif",
          "verifiedAt": "2026-10-07T23:25:02.761Z"
        },
        "webp": {
          "sha256": "d1d8fae6d34f1aa56951cc6d088d7165c7f91446059716df06a876dd8ffeb6e8",
          "bytes": 645526,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bench-supported-one-arm-dumbbell-row-d1d8fae6d34f1aa5.webp?alt=media&token=00bd072c-5e6f-4be7-8229-4d8857743ef2",
          "name": "trainai/creator-media/2026-10-07/trainai-bench-supported-one-arm-dumbbell-row-d1d8fae6d34f1aa5.webp",
          "verifiedAt": "2026-10-07T22:44:37.847Z"
        },
        "poster": {
          "sha256": "6f9ea011fb9c18b88304e54fb06b7b9d907240190045f06de2d5ce1a7ff6fe8c",
          "bytes": 70819,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bench-supported-one-arm-dumbbell-row-6f9ea011fb9c18b8.png?alt=media&token=ac4180b9-49df-450e-a807-a9c4a1355f36",
          "name": "trainai/creator-media/2026-10-07/trainai-bench-supported-one-arm-dumbbell-row-6f9ea011fb9c18b8.png",
          "verifiedAt": "2026-10-07T22:44:37.612Z"
        }
      }
    },
    {
      "id": "trainai-bent-knee-wall-calf-stretch",
      "slug": "bent-knee-wall-calf-stretch",
      "name": "Bent-knee wall calf stretch",
      "category": "Static stretching",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Bend both knees slightly while keeping left heel flat; lower hips gently toward wall to stretch lower left calf.",
        "Torso long, hold then ease back.",
        "Heel never lifts.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bent-knee-wall-calf-stretch-63bed67f45a2.gif?alt=media&token=9f12e0bd-2bbe-4590-9347-27faf328fc47",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bent-knee-wall-calf-stretch-77d43ef77238.png?alt=media&token=f103b3d3-a73a-4461-9306-de9d10546cfb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bent-knee-wall-calf-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b8113dc3ece1356edc9c4f3acb9269f636ac43776b6c75e73ef24a853f92c261",
          "bytes": 144493,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bent-knee-wall-calf-stretch-b8113dc3ece1356e.gif?alt=media&token=a4407fed-a8c4-4ea8-aae6-a021d3305139",
          "name": "trainai/creator-media/2026-10-07/trainai-bent-knee-wall-calf-stretch-b8113dc3ece1356e.gif",
          "verifiedAt": "2026-10-07T23:25:03.898Z"
        },
        "webp": {
          "sha256": "e33d7e36cfb11219aa8e3e8b25d0a634bb0f4ecf5783e1289571fdae58f69db3",
          "bytes": 214478,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bent-knee-wall-calf-stretch-e33d7e36cfb11219.webp?alt=media&token=61212f2b-3fcc-459a-87a2-879bedd00e82",
          "name": "trainai/creator-media/2026-10-07/trainai-bent-knee-wall-calf-stretch-e33d7e36cfb11219.webp",
          "verifiedAt": "2026-10-07T22:44:38.528Z"
        },
        "poster": {
          "sha256": "fb0610795b4f66144e97198bb699e90740f9c5b5a8a5951996619e469b6b4289",
          "bytes": 51877,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bent-knee-wall-calf-stretch-fb0610795b4f6614.png?alt=media&token=189a9a29-f48e-47c7-90ed-0ee9383fe15b",
          "name": "trainai/creator-media/2026-10-07/trainai-bent-knee-wall-calf-stretch-fb0610795b4f6614.png",
          "verifiedAt": "2026-10-07T22:44:38.562Z"
        }
      }
    },
    {
      "id": "trainai-bicycle-crunch",
      "slug": "bicycle-crunch",
      "name": "Bicycle crunch",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on your back with fingertips lightly beside your head and knees bent.",
        "Rotate one shoulder toward the opposite knee while extending the other leg.",
        "Alternate sides with control and avoid pulling on the neck."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bicycle-crunch-490e8c80162b.gif?alt=media&token=b7ee38ad-cf89-47db-9b46-fbe7da3d31d2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bicycle-crunch-55ae0cd62454.png?alt=media&token=6f92d87b-9345-4cdc-9f7e-c1e10a313c39",
      "aliases": [
        "air bike"
      ],
      "legacyIds": [
        "0003"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/bicycle-crunch/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1400,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f61482af46038244b5db6f61d8c3e348c27439a48b6e6afc2dcb43ae28e70863",
          "bytes": 253793,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bicycle-crunch-f61482af46038244.gif?alt=media&token=17e3dc85-f709-49b3-9048-589c167e50b4",
          "name": "trainai/creator-media/2026-10-07/trainai-bicycle-crunch-f61482af46038244.gif",
          "verifiedAt": "2026-10-07T23:25:05.970Z"
        },
        "webp": {
          "sha256": "d8546ae176ecce09b8462ab30565abf7a6d9882f96155f95dbf4128a7a66d391",
          "bytes": 393182,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bicycle-crunch-d8546ae176ecce09.webp?alt=media&token=05e32f54-5552-4132-9c1d-519c6980bc54",
          "name": "trainai/creator-media/2026-10-07/trainai-bicycle-crunch-d8546ae176ecce09.webp",
          "verifiedAt": "2026-10-07T23:25:07.758Z"
        },
        "poster": {
          "sha256": "86fa7a6f47b50b51db955b29f20258a222fc35b734efc23ed6c2e7b1e5d29db0",
          "bytes": 168333,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bicycle-crunch-86fa7a6f47b50b51.png?alt=media&token=80ab84a8-6f58-4def-b7c7-bf26bd629bd4",
          "name": "trainai/creator-media/2026-10-07/trainai-bicycle-crunch-86fa7a6f47b50b51.png",
          "verifiedAt": "2026-10-07T23:25:07.716Z"
        }
      }
    },
    {
      "id": "trainai-bird-dog",
      "slug": "bird-dog",
      "name": "Bird dog",
      "category": "Core",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Bird dog from hands and knees.",
        "Lift the near right ARM forward and the far left LEG backward to horizontal; supporting far left HAND and near right KNEE stay grounded.",
        "Spine stays neutral, hips level.",
        "Both extended limbs are opposite sides, never same-side.",
        "Show one controlled side only; no switching sides needed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bird-dog-3f71c3c8ad7d.gif?alt=media&token=21e1af3b-3e72-456d-b52a-32f65968e1ad",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bird-dog-b39d41ae369f.png?alt=media&token=3d7b6411-588b-472a-9541-abec871da3e5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bird-dog/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 1760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6f8a94d442daab42b93b36c0359ca3ab5a02e82fd9d5ed5a1681a95e16016ce4",
          "bytes": 587068,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bird-dog-6f8a94d442daab42.gif?alt=media&token=1a195498-13b9-49ef-b2d0-2a70452ee899",
          "name": "trainai/creator-media/2026-10-07/trainai-bird-dog-6f8a94d442daab42.gif",
          "verifiedAt": "2026-10-07T23:25:09.814Z"
        },
        "webp": {
          "sha256": "844ffab0ddbe17ce87c9fa3f4c80906589d1248ffd507b59490b72a28048be40",
          "bytes": 961930,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bird-dog-844ffab0ddbe17ce.webp?alt=media&token=39810ae2-9af5-4921-beca-978b06064c86",
          "name": "trainai/creator-media/2026-10-07/trainai-bird-dog-844ffab0ddbe17ce.webp",
          "verifiedAt": "2026-10-07T23:25:20.114Z"
        },
        "poster": {
          "sha256": "f4bade85d9734516aa16b753e1075afc972c2add989ca091a02bf68cef3773b9",
          "bytes": 110206,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bird-dog-f4bade85d9734516.png?alt=media&token=6300647f-0d7d-4c42-8eca-9c3b0882ec7a",
          "name": "trainai/creator-media/2026-10-07/trainai-bird-dog-f4bade85d9734516.png",
          "verifiedAt": "2026-10-07T23:25:12.539Z"
        }
      }
    },
    {
      "id": "trainai-bird-dog-hold",
      "slug": "bird-dog-hold",
      "name": "Bird dog hold",
      "category": "Core",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "From all fours, reach one arm forward and the opposite leg straight backward to torso height.",
        "Hold this long level line with the other palm and knee supporting body; neck neutral, hips square.",
        "Then return the extended hand and knee to floor.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bird-dog-hold-971f2d822967.gif?alt=media&token=c0556f8e-c474-41f5-a98d-05615e707c66",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bird-dog-hold-e3e2a47d3a22.png?alt=media&token=0836ed9d-dd03-42c6-9c96-06a9471b44c7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bird-dog-hold/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "839341855910933e617e56cccb534115a62fbc846788dbb54aea08e416bba916",
          "bytes": 184226,
          "mimeType": "image/gif",
          "width": 400,
          "height": 400,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bird-dog-hold-839341855910933e.gif?alt=media&token=378eb994-3018-449a-add0-70c36c43a90d",
          "name": "trainai/creator-media/2026-10-07/trainai-bird-dog-hold-839341855910933e.gif",
          "verifiedAt": "2026-10-07T23:25:13.089Z"
        },
        "webp": {
          "sha256": "c5eeff47efa4909624773019968593a4abca27b51e37c708f430c2bb272b8fc5",
          "bytes": 295288,
          "mimeType": "image/webp",
          "width": 400,
          "height": 400,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bird-dog-hold-c5eeff47efa49096.webp?alt=media&token=727c4912-f56b-4118-b9c3-f5c071ff08ff",
          "name": "trainai/creator-media/2026-10-07/trainai-bird-dog-hold-c5eeff47efa49096.webp",
          "verifiedAt": "2026-10-07T23:25:15.197Z"
        },
        "poster": {
          "sha256": "f6d26686e327e8ba04bff7d7cb04286b965e620c6533bfcd1e1bcae241fca707",
          "bytes": 67048,
          "mimeType": "image/png",
          "width": 400,
          "height": 400,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bird-dog-hold-f6d26686e327e8ba.png?alt=media&token=f3c9c47f-de6f-4d29-8a64-25d6ef4e78e5",
          "name": "trainai/creator-media/2026-10-07/trainai-bird-dog-hold-f6d26686e327e8ba.png",
          "verifiedAt": "2026-10-07T23:25:14.111Z"
        }
      }
    },
    {
      "id": "trainai-bodyweight-hip-hinge",
      "slug": "bodyweight-hip-hinge",
      "name": "Bodyweight hip hinge",
      "category": "Home foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Bodyweight hip hinge.",
        "Stand with feet hip-width, knees softly bent and hands resting on hips.",
        "Push the hips backward while the straight neutral torso tilts forward to around 45–60 degrees from vertical; return upright by bringing the hips forward.",
        "Shins stay nearly vertical, spine neutral, neck aligned; this is a hinge rather than a deep knee squat.",
        "Shoes stay planted and identical."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bodyweight-hip-hinge-fd43bacfb162.gif?alt=media&token=b3bc7853-07a8-4a46-87e9-610b9cc311d0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bodyweight-hip-hinge-ce81ab8ee8d6.png?alt=media&token=16d4f391-415a-478c-91e1-bd1a4dd5ce8f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bodyweight-hip-hinge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ee23c828d5f076fbcbdbb3be1abaf371948258d8ac44f97201f82a81ad2f81e4",
          "bytes": 243916,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bodyweight-hip-hinge-ee23c828d5f076fb.gif?alt=media&token=55df634b-4071-430f-ba29-b285307427c6",
          "name": "trainai/creator-media/2026-10-07/trainai-bodyweight-hip-hinge-ee23c828d5f076fb.gif",
          "verifiedAt": "2026-10-07T23:25:17.617Z"
        },
        "webp": {
          "sha256": "66a59d7c12dcaf3b6f1ae44c0db826dea72c4c1c9c1af8425a2c0a64113d3b84",
          "bytes": 399150,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bodyweight-hip-hinge-66a59d7c12dcaf3b.webp?alt=media&token=71b705d1-7846-4593-8134-5187a5faa8cc",
          "name": "trainai/creator-media/2026-10-07/trainai-bodyweight-hip-hinge-66a59d7c12dcaf3b.webp",
          "verifiedAt": "2026-10-07T22:44:42.103Z"
        },
        "poster": {
          "sha256": "86b0d09a2dfd35495963bd723ecc5144b1884a05418ec5667e86ac6ff43875ec",
          "bytes": 39667,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bodyweight-hip-hinge-86b0d09a2dfd3549.png?alt=media&token=5a8b3670-7318-457b-880c-3f775564803f",
          "name": "trainai/creator-media/2026-10-07/trainai-bodyweight-hip-hinge-86b0d09a2dfd3549.png",
          "verifiedAt": "2026-10-07T22:44:41.952Z"
        }
      }
    },
    {
      "id": "trainai-bodyweight-squat",
      "slug": "bodyweight-squat",
      "name": "Bodyweight squat",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with feet about shoulder-width apart.",
        "Bend at the hips and knees into a comfortable squat, keeping heels planted and knees following the toes.",
        "Push through the feet to stand without locking the knees."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bodyweight-squat-85de5b84c777.gif?alt=media&token=9167d141-1c97-4a52-aa9c-2275fdae18eb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-bodyweight-squat-8e32de498c7b.png?alt=media&token=cd119ca0-47ed-48a9-a5b0-4518840cbf7b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/bodyweight-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 32,
      "durationMs": 2580,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c167c10f91fad22e7ba7ac8d0b2d6333736282d6407faddf8a079d76cbc8b98f",
          "bytes": 506940,
          "mimeType": "image/gif",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bodyweight-squat-c167c10f91fad22e.gif?alt=media&token=4b62cfe3-d8d6-404c-bd0b-07e4e6c1d223",
          "name": "trainai/creator-media/2026-10-07/trainai-bodyweight-squat-c167c10f91fad22e.gif",
          "verifiedAt": "2026-10-07T23:25:21.716Z"
        },
        "webp": {
          "sha256": "9be1dd98b4ab7449dab407c93f7f4c74663976b49f687168d7df1cfacff54eb8",
          "bytes": 822572,
          "mimeType": "image/webp",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bodyweight-squat-9be1dd98b4ab7449.webp?alt=media&token=058b0a7f-8535-48e0-aaf7-bb2dc51d19d9",
          "name": "trainai/creator-media/2026-10-07/trainai-bodyweight-squat-9be1dd98b4ab7449.webp",
          "verifiedAt": "2026-10-07T22:44:43.885Z"
        },
        "poster": {
          "sha256": "cf9c676bd4a83c605ff4b6005a8ef329f2a85cbf2db790061460b417f13c47fc",
          "bytes": 42781,
          "mimeType": "image/png",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-bodyweight-squat-cf9c676bd4a83c60.png?alt=media&token=18ab757f-24c1-49b6-b196-a70870ac5463",
          "name": "trainai/creator-media/2026-10-07/trainai-bodyweight-squat-cf9c676bd4a83c60.png",
          "verifiedAt": "2026-10-07T22:44:43.439Z"
        }
      }
    },
    {
      "id": "trainai-box-jump",
      "slug": "box-jump",
      "name": "Box jump",
      "category": "Power and agility",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "rated-plyometric-box"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Face a low sturdy orange plyometric box.",
        "Start both feet on floor, shallow countermovement, jump both feet onto box, land quietly with knees bent and stand tall.",
        "STEP down one foot then the other, return start.",
        "Do not jump down.",
        "Box fully fixed, no changing height."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-box-jump-3a91361c1f86.gif?alt=media&token=b294b881-bc8b-474d-90cb-02a8945173e0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-box-jump-4bdac3a44784.png?alt=media&token=d7ae7f6c-4563-4e5d-8550-745a2d674e81",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/box-jump/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "636302d5a3c035bf73aa6709c6a137f3fc36e507f10e0d458595255b50583609",
          "bytes": 213419,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-box-jump-636302d5a3c035bf.gif?alt=media&token=e263fba1-c33c-4043-be26-6bdd98e5d9e7",
          "name": "trainai/creator-media/2026-10-07/trainai-box-jump-636302d5a3c035bf.gif",
          "verifiedAt": "2026-10-07T23:25:19.477Z"
        },
        "webp": {
          "sha256": "a6140320ac92fcd3da08ebae78966f67d88f9e34f5f7d33b63abd0c3a727c2ef",
          "bytes": 360782,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-box-jump-a6140320ac92fcd3.webp?alt=media&token=d1229b7e-18d0-490f-b248-b9f2f1941342",
          "name": "trainai/creator-media/2026-10-07/trainai-box-jump-a6140320ac92fcd3.webp",
          "verifiedAt": "2026-10-07T22:44:44.638Z"
        },
        "poster": {
          "sha256": "4d2c7570bc96f064069f58138a638a7410ea58dd93a6d38d427a4a6be1681229",
          "bytes": 45096,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-box-jump-4d2c7570bc96f064.png?alt=media&token=eb781eb2-a245-46e5-b5e3-929887b5e6aa",
          "name": "trainai/creator-media/2026-10-07/trainai-box-jump-4d2c7570bc96f064.png",
          "verifiedAt": "2026-10-07T22:44:44.600Z"
        }
      }
    },
    {
      "id": "trainai-brisk-walking",
      "slug": "brisk-walking",
      "name": "Brisk walking",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [
        "walking-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Walk at a purposeful, comfortable pace with relaxed shoulders.",
        "Let the arms swing opposite the legs while taking controlled steps.",
        "Maintain a pace you can sustain without losing your posture."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-brisk-walking-29dc740659c0.gif?alt=media&token=6420c575-82b5-45aa-8350-a059d81bdf72",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-brisk-walking-f9f2842847d5.png?alt=media&token=e4db699f-0040-4840-b2de-39e692204d9d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/brisk-walking/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4fa992b3078bf31df246991a57e6d15214cffd1c27ebd59d9d1e852531681cdc",
          "bytes": 212048,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-brisk-walking-4fa992b3078bf31d.gif?alt=media&token=d4e5ca2c-38cd-4296-950d-eca6d61c5a35",
          "name": "trainai/creator-media/2026-10-07/trainai-brisk-walking-4fa992b3078bf31d.gif",
          "verifiedAt": "2026-10-07T23:25:22.076Z"
        },
        "webp": {
          "sha256": "54ea0f171b60ff3b511554fbe124be608ece73b077edf4be31040d8370279b4a",
          "bytes": 321118,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-brisk-walking-54ea0f171b60ff3b.webp?alt=media&token=2d53dae2-9bf5-4eaa-bd61-25fb30c1a552",
          "name": "trainai/creator-media/2026-10-07/trainai-brisk-walking-54ea0f171b60ff3b.webp",
          "verifiedAt": "2026-10-07T23:25:22.249Z"
        },
        "poster": {
          "sha256": "f97d69657a854eb5806d99a69115276a93479e6c4f0becea4d965261c51d4b33",
          "bytes": 156446,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-brisk-walking-f97d69657a854eb5.png?alt=media&token=a63534b2-f393-4856-944c-4421dd77b789",
          "name": "trainai/creator-media/2026-10-07/trainai-brisk-walking-f97d69657a854eb5.png",
          "verifiedAt": "2026-10-07T23:25:25.270Z"
        }
      }
    },
    {
      "id": "trainai-burpee",
      "slug": "burpee",
      "name": "Burpee",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Simple burpee without push-up: squat palms down, hop feet to plank, hop in to squat, small jump.",
        "Character kept SMALL so jump and plank fit comfortably."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-burpee-c90116c5332a.gif?alt=media&token=997aa85f-11fa-4487-9feb-4aaa9e9213dd",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-burpee-56096b780ef1.png?alt=media&token=edfb7ab3-b814-485c-9ade-b5f4b3f3c49e",
      "aliases": [
        "burpee"
      ],
      "legacyIds": [
        "1160"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/burpee/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1440,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "92ed913f55734ff42565ca60ec89e36c988ee629b96d9138a80156a0665daf54",
          "bytes": 206933,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-burpee-92ed913f55734ff4.gif?alt=media&token=96eaf969-22e9-4429-993c-573642b6cbee",
          "name": "trainai/creator-media/2026-10-07/trainai-burpee-92ed913f55734ff4.gif",
          "verifiedAt": "2026-10-07T23:25:25.613Z"
        },
        "webp": {
          "sha256": "d34563299385cd6f223dd8a0a554bbdcf8f373a64d909e42469e67dffa5e41e4",
          "bytes": 326062,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-burpee-d34563299385cd6f.webp?alt=media&token=1df95db1-83e2-444a-9d8c-b1ebfb55f3bb",
          "name": "trainai/creator-media/2026-10-07/trainai-burpee-d34563299385cd6f.webp",
          "verifiedAt": "2026-10-07T23:25:26.871Z"
        },
        "poster": {
          "sha256": "0a653b1b68a31277f419bfd6f902888ed3d8067e13a07464f10615172c6076ca",
          "bytes": 110500,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-burpee-0a653b1b68a31277.png?alt=media&token=f868d405-8609-453c-b990-f646cb5c1418",
          "name": "trainai/creator-media/2026-10-07/trainai-burpee-0a653b1b68a31277.png",
          "verifiedAt": "2026-10-07T23:25:28.667Z"
        }
      }
    },
    {
      "id": "trainai-butterfly-stretch",
      "slug": "butterfly-stretch",
      "name": "Butterfly stretch",
      "category": "Static stretching",
      "target": "adductors",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit upright on floor soles of feet together, knees open to sides.",
        "Hold feet gently, lengthen spine and hinge forward a small amount.",
        "Hold comfortable position then return upright.",
        "Do not push knees down or bounce."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-butterfly-stretch-0a03b2aa0290.gif?alt=media&token=08282d89-84e0-4f33-a8f6-b37034a0ac7d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-butterfly-stretch-0ae23525d124.png?alt=media&token=26f8f811-68a5-46ac-b324-bdeed09214f0",
      "aliases": [
        "butterfly yoga pose"
      ],
      "legacyIds": [
        "1494"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/butterfly-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a0109914296b7a82ac57a650afb4cdf4e8bd1cc157b2b846ad3c2f2fd7bcb80b",
          "bytes": 224432,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-butterfly-stretch-a0109914296b7a82.gif?alt=media&token=5154d3fe-c7b6-4e44-b86c-ab05a9dd135e",
          "name": "trainai/creator-media/2026-10-07/trainai-butterfly-stretch-a0109914296b7a82.gif",
          "verifiedAt": "2026-10-07T23:25:31.445Z"
        },
        "webp": {
          "sha256": "e2ef3226a63b571858d0327469a206dd328889decfed16be5a39b83f44f5f3a4",
          "bytes": 345048,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-butterfly-stretch-e2ef3226a63b5718.webp?alt=media&token=90ac8c4d-2abd-49bd-83e8-cfd2375a1f51",
          "name": "trainai/creator-media/2026-10-07/trainai-butterfly-stretch-e2ef3226a63b5718.webp",
          "verifiedAt": "2026-10-07T22:44:47.019Z"
        },
        "poster": {
          "sha256": "bf1b130da4481817f42c413c4f0fdbf55c43de1b22884b0732fef4b09fd5343f",
          "bytes": 84803,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-butterfly-stretch-bf1b130da4481817.png?alt=media&token=f4fd9e61-c750-47ca-bc3e-6d9381bf41cc",
          "name": "trainai/creator-media/2026-10-07/trainai-butterfly-stretch-bf1b130da4481817.png",
          "verifiedAt": "2026-10-07T22:44:47.545Z"
        }
      }
    },
    {
      "id": "trainai-cable-biceps-curl",
      "slug": "cable-biceps-curl",
      "name": "Cable biceps curl",
      "category": "Cable station",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "bar-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Standing facing a compact cable column, low pulley attached to short straight bar held with palms up.",
        "Curl bar from thighs toward chest with elbows fixed near sides.",
        "Cable stays visibly connected to LOW pulley and bar, no loose disconnected ends."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-biceps-curl-d5f87fd45edd.gif?alt=media&token=3be34a66-2f56-4cd5-854b-17477041007d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-biceps-curl-aff16284638c.png?alt=media&token=8ce053a1-2b27-4119-9988-5ca685cd1f59",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-biceps-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "77f67ede3784b97181dd8d94334e6ecc780866c597ce0f4f432c41a3ccb218e9",
          "bytes": 691244,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-biceps-curl-77f67ede3784b971.gif?alt=media&token=135f37e5-c1e7-404d-976a-025ba5bf1309",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-biceps-curl-77f67ede3784b971.gif",
          "verifiedAt": "2026-10-07T23:25:37.877Z"
        },
        "webp": {
          "sha256": "0dfd55a8505af40e3e77461c1ac29e0b393c4f66df2649da37a39a8eb1559f56",
          "bytes": 1068970,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-biceps-curl-0dfd55a8505af40e.webp?alt=media&token=b48270ed-c694-4a1e-9d62-62f2f6998d84",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-biceps-curl-0dfd55a8505af40e.webp",
          "verifiedAt": "2026-10-07T23:25:53.130Z"
        },
        "poster": {
          "sha256": "46821fb9894661f859cf34e14080ad8e19dc4d8108e18e09a7c2ca03a2ab7160",
          "bytes": 119979,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-biceps-curl-46821fb9894661f8.png?alt=media&token=37598947-a432-49b5-8f7a-71cbf3de3c29",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-biceps-curl-46821fb9894661f8.png",
          "verifiedAt": "2026-10-07T23:25:33.002Z"
        }
      }
    },
    {
      "id": "trainai-cable-chest-fly",
      "slug": "cable-chest-fly",
      "name": "Cable chest fly",
      "category": "Cable station",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "handles"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand split stance between two fixed cable columns with chest-height pulleys behind.",
        "Arms open to sides at chest level with gentle elbow bend.",
        "Sweep hands together in front of chest in a hugging arc, then reopen.",
        "Elbow bend remains constant, not a press.",
        "Columns and feet stay still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-chest-fly-10f8af7357f4.gif?alt=media&token=e127bc1c-37bc-4f14-915b-1735a844d95d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-chest-fly-e0bb27979b23.png?alt=media&token=710c593b-20dc-48c1-b4cd-32a0cd2d044b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-chest-fly/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3696c4127876b44ff4baf1df241c8847cef91f0e8c612fb6f06f984f01635959",
          "bytes": 506970,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-chest-fly-3696c4127876b44f.gif?alt=media&token=12aeffb7-008c-41c6-8b94-8e9242f4c78d",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-chest-fly-3696c4127876b44f.gif",
          "verifiedAt": "2026-10-07T23:25:36.233Z"
        },
        "webp": {
          "sha256": "f01992b714765cb09878caf1100c119dfebcbc39ec8a0bb628e9d0af0113e198",
          "bytes": 765148,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-chest-fly-f01992b714765cb0.webp?alt=media&token=b3c86064-1890-457b-8e46-60a2254ead13",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-chest-fly-f01992b714765cb0.webp",
          "verifiedAt": "2026-10-07T23:25:46.634Z"
        },
        "poster": {
          "sha256": "8c73dcfb3ef528932487d6ad328cff9b1b1376fd079254555d4f9db3b7d89597",
          "bytes": 85327,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-chest-fly-8c73dcfb3ef52893.png?alt=media&token=ae8e1b5a-6f6f-4f3a-8539-f80bb1b1fc7e",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-chest-fly-8c73dcfb3ef52893.png",
          "verifiedAt": "2026-10-07T23:25:38.705Z"
        }
      }
    },
    {
      "id": "trainai-cable-chest-press",
      "slug": "cable-chest-press",
      "name": "Cable chest press",
      "category": "Cable station",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "handles"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand in split stance between two fixed cable columns, pulleys at chest height behind.",
        "Hold handles beside chest, press both forward to near elbow extension, then return.",
        "Both cables run outside arms and stay connected.",
        "No stepping or torso sway, fixed columns identical."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-chest-press-1f94e1567ac3.gif?alt=media&token=ab04ac5b-c526-459c-b075-a22acff2d8b2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-chest-press-dacb1c6d7eb8.png?alt=media&token=221482f2-612b-4c68-9f1d-3fcb519e6de7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-chest-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "30053d5d87622f1cb4b777df0a0c7f0034cf15156dcec558bc21a22db044d846",
          "bytes": 523233,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-chest-press-30053d5d87622f1c.gif?alt=media&token=25f04872-2f3d-4698-b534-fd2b1a60436b",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-chest-press-30053d5d87622f1c.gif",
          "verifiedAt": "2026-10-07T23:25:41.476Z"
        },
        "webp": {
          "sha256": "49534bf14d14a9c53648c99a91a803bbff055cc1a17de20ae7d9281ec8844dec",
          "bytes": 809410,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-chest-press-49534bf14d14a9c5.webp?alt=media&token=15640c2a-f150-496f-b45f-b78ca9c3409d",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-chest-press-49534bf14d14a9c5.webp",
          "verifiedAt": "2026-10-07T23:25:54.801Z"
        },
        "poster": {
          "sha256": "69fdde4dc2dc97a2cbf55d626f4e503e850c4e5a9d7cc5db3c5ad0355b3c30ed",
          "bytes": 89134,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-chest-press-69fdde4dc2dc97a2.png?alt=media&token=6ec87d7a-cea0-4a39-93c7-5284e5d91174",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-chest-press-69fdde4dc2dc97a2.png",
          "verifiedAt": "2026-10-07T23:25:50.306Z"
        }
      }
    },
    {
      "id": "trainai-cable-face-pull",
      "slug": "cable-face-pull",
      "name": "Cable face pull",
      "category": "Cable station",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "rope-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing fixed cable column with pulley at eye level, hold rope ends.",
        "Pull rope toward face, separate hands beside temples and elbows out at shoulder height, then extend arms.",
        "Feet and torso still.",
        "Rope stays connected to cable and fixed pulley."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-face-pull-b425690b2118.gif?alt=media&token=be2c8395-4363-4c8c-b6bf-7730b8f10fd8",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-face-pull-6773068c7c89.png?alt=media&token=722d343c-5a38-4665-90c2-dba00f0f719d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-face-pull/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b9e3693bd07f26f7c2c5713e4980e5375c579826235d5f651da505c0614594d9",
          "bytes": 403604,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-face-pull-b9e3693bd07f26f7.gif?alt=media&token=61b373dd-b596-4b06-b80e-8660bd0892d2",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-face-pull-b9e3693bd07f26f7.gif",
          "verifiedAt": "2026-10-07T23:25:56.574Z"
        },
        "webp": {
          "sha256": "894e08a8583955b3dd48b34d338c7f00ed947bbaa476149022f3f4275bcfd9c2",
          "bytes": 637026,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-face-pull-894e08a8583955b3.webp?alt=media&token=16389ee0-d10e-4bf6-8055-8fb30df5e4d5",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-face-pull-894e08a8583955b3.webp",
          "verifiedAt": "2026-10-07T22:44:52.361Z"
        },
        "poster": {
          "sha256": "56817f40c26fc0dba4cb21cdb3ec0eb3aa2ef202cb8190adfdf39a1559a43c9f",
          "bytes": 63689,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-face-pull-56817f40c26fc0db.png?alt=media&token=165eea04-92b5-4df2-b73f-2935a77ab806",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-face-pull-56817f40c26fc0db.png",
          "verifiedAt": "2026-10-07T22:44:52.370Z"
        }
      }
    },
    {
      "id": "trainai-cable-glute-kickback",
      "slug": "cable-glute-kickback",
      "name": "Cable glute kickback",
      "category": "Cable station",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "ankle-cuff"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Standing cable glute kickback.",
        "Stand facing a cable tower on right with low pulley by floor.",
        "Hold tower with hands.",
        "Supporting NEAR leg stays planted.",
        "A clearly visible orange ankle cuff is on FAR ankle and one taut dark cable connects that cuff to low pulley.",
        "Move the CUFFED FAR leg backward toward left with knee almost straight, no back arch.",
        "The cable follows moving ankle, never connects to planted leg.",
        "Both legs retain normal length.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-glute-kickback-7bdc394ba7db.gif?alt=media&token=ce9b6c34-3d1b-4c7e-b917-0eeaba9b0a6e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-glute-kickback-99dc9792df26.png?alt=media&token=81025c00-cd09-4b5d-b590-7bb4c5aff505",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-glute-kickback/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "cdfe02652e08e44ed051c8803e5bc07471d0174e81017a5ef53376221898d27a",
          "bytes": 586913,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-glute-kickback-cdfe02652e08e44e.gif?alt=media&token=6bb7f96f-ff7c-4d87-a4c2-8dbc992f1d3c",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-glute-kickback-cdfe02652e08e44e.gif",
          "verifiedAt": "2026-10-07T23:26:05.287Z"
        },
        "webp": {
          "sha256": "12d92aa9fb26c4a575bd9da5b45999652f2b5d6eb919289a40cbe9b6b3b9f808",
          "bytes": 893280,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-glute-kickback-12d92aa9fb26c4a5.webp?alt=media&token=e209dea1-2750-46b6-a268-0f4805f1ca1f",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-glute-kickback-12d92aa9fb26c4a5.webp",
          "verifiedAt": "2026-10-07T23:26:08.671Z"
        },
        "poster": {
          "sha256": "491f98e947c436bd758b91327a371ba68f244c51cd29a387110c8c0901b74507",
          "bytes": 100651,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-glute-kickback-491f98e947c436bd.png?alt=media&token=c668d6f6-e8b7-4ca2-b379-228094b4b889",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-glute-kickback-491f98e947c436bd.png",
          "verifiedAt": "2026-10-07T23:25:58.014Z"
        }
      }
    },
    {
      "id": "trainai-cable-hip-adduction",
      "slug": "cable-hip-adduction",
      "name": "Cable hip adduction",
      "category": "Cable station",
      "target": "adductors",
      "bodyPart": "upper legs",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "ankle-cuff"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand beside low cable pulley on right side.",
        "Cuff attached to right ankle nearest the pulley.",
        "Left hand holds separate fixed support, left foot planted.",
        "Draw right leg inward across the front of planted left leg against cable.",
        "The same right ankle remains cuffed, cable taut to right-side low pulley throughout.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-hip-adduction-08604fa54c5c.gif?alt=media&token=dc7a9db2-6b4b-4997-902e-cc86500d6ee9",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-hip-adduction-f1be96067504.png?alt=media&token=60c2fbd5-30ae-4860-bdc9-f5416f09ee6d",
      "aliases": [
        "cable hip adduction"
      ],
      "legacyIds": [
        "0168"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-hip-adduction/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "79b4e8973eb5598b0f69f72ce7eabfa8c24eee1c57f7be1fa279e6f16fc1d3c5",
          "bytes": 668423,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-hip-adduction-79b4e8973eb5598b.gif?alt=media&token=9f7b2c2d-7e04-49b2-9cbe-e28bdfedf7fc",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-hip-adduction-79b4e8973eb5598b.gif",
          "verifiedAt": "2026-10-07T23:26:10.023Z"
        },
        "webp": {
          "sha256": "0722fe9d53bf41494d071583f3cea87f3f624b989554f8cdb9109dc87a995479",
          "bytes": 1008810,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-hip-adduction-0722fe9d53bf4149.webp?alt=media&token=bf1dfcd5-c1c7-46c7-88a1-6f96314f01b1",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-hip-adduction-0722fe9d53bf4149.webp",
          "verifiedAt": "2026-10-07T23:26:19.819Z"
        },
        "poster": {
          "sha256": "99b9c66448412ed279f066bc3529344183fc18c5923e9182f77567950f56ebe2",
          "bytes": 118197,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-hip-adduction-99b9c66448412ed2.png?alt=media&token=6ea551c8-dd66-4ca6-9bfa-0b59242aa096",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-hip-adduction-99b9c66448412ed2.png",
          "verifiedAt": "2026-10-07T23:26:10.033Z"
        }
      }
    },
    {
      "id": "trainai-cable-lateral-raise",
      "slug": "cable-lateral-raise",
      "name": "Cable lateral raise",
      "category": "Cable station",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Single arm cable lateral raise.",
        "Cable crosses in FRONT of thighs from LOW pulley on left to working hand on right.",
        "Other hand rests at hip.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-lateral-raise-7b962b8f6822.gif?alt=media&token=6cf6a74c-828b-41d6-b31d-4b561cc4eb26",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-lateral-raise-228dff232007.png?alt=media&token=92e62fd4-d47d-4396-83ae-313f7bd0b28b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-lateral-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1320,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "715f973da50962100c84c08723ba5b3bc562365bf71ad458d04782ad1732968d",
          "bytes": 488159,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-lateral-raise-715f973da5096210.gif?alt=media&token=4e90af34-fc9d-4063-926a-7907aa069b75",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-lateral-raise-715f973da5096210.gif",
          "verifiedAt": "2026-10-07T23:26:13.225Z"
        },
        "webp": {
          "sha256": "947283eeed1ac1eab0b42db6c6ad340f69fb1e169df3a605a31b6d14d9cdd96a",
          "bytes": 722994,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-lateral-raise-947283eeed1ac1ea.webp?alt=media&token=482081c1-26c5-49be-81e1-f092635246c4",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-lateral-raise-947283eeed1ac1ea.webp",
          "verifiedAt": "2026-10-07T23:26:13.525Z"
        },
        "poster": {
          "sha256": "e6a4fb7d4470a3351443a07521d8f124c9cab3cae021ac0508965b3ac16bb46f",
          "bytes": 225164,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-lateral-raise-e6a4fb7d4470a335.png?alt=media&token=4c0ff722-ea7b-417e-873f-6525077dcf3e",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-lateral-raise-e6a4fb7d4470a335.png",
          "verifiedAt": "2026-10-07T23:26:15.311Z"
        }
      }
    },
    {
      "id": "trainai-cable-overhead-triceps-extension",
      "slug": "cable-overhead-triceps-extension",
      "name": "Cable overhead triceps extension",
      "category": "Cable station",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "rope-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing away from low cable column in split stance, hold rope ends overhead with upper arms beside ears.",
        "Bend elbows bringing hands behind head, then straighten elbows overhead.",
        "Cable passes behind body to low pulley, remains attached, upper arms nearly fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-overhead-triceps-extension-a47b9bf6ed9b.gif?alt=media&token=2712e116-bdd7-4b30-83f0-8f13102cecb4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-overhead-triceps-extension-a616f6778248.png?alt=media&token=2fbb79f9-bf3f-464e-b01e-f645eb1d8049",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-overhead-triceps-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "1ec13c06731ebff6b35fb3d91fd338084a0b9b532e572c8d7116704c1e62b15c",
          "bytes": 335841,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-overhead-triceps-extension-1ec13c06731ebff6.gif?alt=media&token=5d7e59ad-4068-44db-872c-363d70890aec",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-overhead-triceps-extension-1ec13c06731ebff6.gif",
          "verifiedAt": "2026-10-07T23:26:16.836Z"
        },
        "webp": {
          "sha256": "6047fb1ccb8b9526656eb7e2fa244674f866e862fd1d6b015130202febb1299c",
          "bytes": 504848,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-overhead-triceps-extension-6047fb1ccb8b9526.webp?alt=media&token=414a838f-4285-4daa-aaf3-c77fa447e320",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-overhead-triceps-extension-6047fb1ccb8b9526.webp",
          "verifiedAt": "2026-10-07T23:26:19.442Z"
        },
        "poster": {
          "sha256": "1871d73c299d81cc30d2c34658a07b529c98f9769ef910a1a49a375df9653ca9",
          "bytes": 58003,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-overhead-triceps-extension-1871d73c299d81cc.png?alt=media&token=f58a56ea-b448-4bf0-baba-df93b94343a2",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-overhead-triceps-extension-1871d73c299d81cc.png",
          "verifiedAt": "2026-10-07T23:26:18.636Z"
        }
      }
    },
    {
      "id": "trainai-cable-pallof-press",
      "slug": "cable-pallof-press",
      "name": "Cable Pallof press",
      "category": "Cable station",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with left side toward chest-height pulley, feet planted shoulder width.",
        "Hold handle in both hands at sternum.",
        "Extend both arms straight forward from chest, resist turning, pause, then return hands to sternum.",
        "Cable pulls sideways to left, torso faces same direction throughout.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-pallof-press-96ba012b3528.gif?alt=media&token=eae7d845-9635-4b98-bdb2-1aaeb7e75000",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-pallof-press-6123fcdd3522.png?alt=media&token=2dde6abd-2a1b-4072-ad0e-8f1ca0911844",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-pallof-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d0d26456198110943ef35fdc21ec41e26171247811cee4770e1117975560f262",
          "bytes": 429240,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-pallof-press-d0d2645619811094.gif?alt=media&token=493e72b0-b5cb-4ff8-8cb4-e5cb560df73e",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-pallof-press-d0d2645619811094.gif",
          "verifiedAt": "2026-10-07T23:26:24.918Z"
        },
        "webp": {
          "sha256": "fec780c8eec3b17e6aba4e7b0f84873aed288f80f7d6b3cb0f40a8c19c72b272",
          "bytes": 665540,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-pallof-press-fec780c8eec3b17e.webp?alt=media&token=a52d5840-f1c8-4530-9f35-1a35ddda3c0e",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-pallof-press-fec780c8eec3b17e.webp",
          "verifiedAt": "2026-10-07T23:26:32.080Z"
        },
        "poster": {
          "sha256": "03bb906fb4dd816dcbf311237e6f173ebd5bda9f4fad538899f83bfaccd72dea",
          "bytes": 77372,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-pallof-press-03bb906fb4dd816d.png?alt=media&token=5576e848-93e4-4574-8aab-337f1696f6ad",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-pallof-press-03bb906fb4dd816d.png",
          "verifiedAt": "2026-10-07T23:26:23.740Z"
        }
      }
    },
    {
      "id": "trainai-cable-pull-through",
      "slug": "cable-pull-through",
      "name": "Cable pull-through",
      "category": "Cable station",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "rope-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing away from low pulley in wide stance, holding rope between legs.",
        "Start hinged at hips with neutral back and knees soft.",
        "Extend hips to tall upright stance, hands finish in front of thighs; return to hinge.",
        "Cable passes between legs continuously, no arm curl or back hyperextension."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-pull-through-a64d82a9ba24.gif?alt=media&token=dcffbfe9-3dcc-46b2-9227-30a5b19c65b3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-pull-through-6f2290eb98f5.png?alt=media&token=50c7c2e6-1f1a-44bc-b2e4-bfc1fe70e064",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-pull-through/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "da992cd0cbbca866930e69dc34026ad8e467e970f44ca08f0b2bf32b07e34b73",
          "bytes": 402581,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-pull-through-da992cd0cbbca866.gif?alt=media&token=314abad2-d40d-426c-8fa9-8fe1585b6941",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-pull-through-da992cd0cbbca866.gif",
          "verifiedAt": "2026-10-07T23:26:31.008Z"
        },
        "webp": {
          "sha256": "4ecff11ac71e7b9893dfde107db590a0c95ab9c1dfc9e589d1953252a3e3cfe3",
          "bytes": 659356,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-pull-through-4ecff11ac71e7b98.webp?alt=media&token=2d9bba8b-f88c-47b5-bd5d-7b6e439d599f",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-pull-through-4ecff11ac71e7b98.webp",
          "verifiedAt": "2026-10-07T22:45:01.295Z"
        },
        "poster": {
          "sha256": "369372b7f6e92dd8b0252f1168d65d04495fb6f908f454f62159073618b7e1f5",
          "bytes": 67957,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-pull-through-369372b7f6e92dd8.png?alt=media&token=e79d74a3-0be4-41f6-8719-173187b13772",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-pull-through-369372b7f6e92dd8.png",
          "verifiedAt": "2026-10-07T22:45:01.170Z"
        }
      }
    },
    {
      "id": "trainai-cable-straight-arm-pulldown",
      "slug": "cable-straight-arm-pulldown",
      "name": "Cable straight-arm pulldown",
      "category": "Cable station",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "bar-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing a high cable pulley with feet fixed and slight hip hinge.",
        "Hold straight bar shoulder width with arms reaching forward/up.",
        "With elbows kept softly bent at constant angle, pull bar in an arc to front of thighs, then return overhead.",
        "No elbow curling or torso swinging."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-straight-arm-pulldown-96ffa8c9047a.gif?alt=media&token=9a6ec20d-31c0-4ce0-866b-93286cb644bd",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-straight-arm-pulldown-5595a7f01368.png?alt=media&token=c444fc20-e295-44f2-8359-df9519e646c7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-straight-arm-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "db8b6b56bb4df766c28ed8079b24ecb404e4295c714a6e4c890c219d68def572",
          "bytes": 374185,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-straight-arm-pulldown-db8b6b56bb4df766.gif?alt=media&token=8524ad87-9928-4130-8314-876740bf1b53",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-straight-arm-pulldown-db8b6b56bb4df766.gif",
          "verifiedAt": "2026-10-07T23:26:27.329Z"
        },
        "webp": {
          "sha256": "71af1d05cbe2aebd445ee6bc008cdb8d8641229b25e3c0773144f8f8b09e4dbc",
          "bytes": 599210,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-straight-arm-pulldown-71af1d05cbe2aebd.webp?alt=media&token=9690b6c2-1dd3-4f72-85fc-5e201123facb",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-straight-arm-pulldown-71af1d05cbe2aebd.webp",
          "verifiedAt": "2026-10-07T23:26:33.109Z"
        },
        "poster": {
          "sha256": "87f0fb05614c068435281285f08a4342de9f88c84130afed669c8275e000f9e1",
          "bytes": 65011,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-straight-arm-pulldown-87f0fb05614c0684.png?alt=media&token=7ceaf0a4-faa0-4685-895c-338f4874bb7e",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-straight-arm-pulldown-87f0fb05614c0684.png",
          "verifiedAt": "2026-10-07T23:26:34.537Z"
        }
      }
    },
    {
      "id": "trainai-cable-triceps-pressdown",
      "slug": "cable-triceps-pressdown",
      "name": "Cable triceps pressdown",
      "category": "Cable station",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "rope-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing high cable column, hold short bar overhand.",
        "Upper arms pinned beside ribs, elbows initially bent 90 degrees.",
        "Straighten elbows to push bar down to thighs, then bend elbows back to 90 degrees.",
        "Upper arms and trunk do not move."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-triceps-pressdown-4ea9b6bd1d77.gif?alt=media&token=062e3d9e-27ca-4985-ba07-9247ef7a9f34",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-triceps-pressdown-fa33f9a2d734.png?alt=media&token=fac75d15-a590-4ea4-9e27-c4db8c9481f5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-triceps-pressdown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2f91bff81d518a3466c282986795797cc92fa77ee78f1e65cb4f47de08528e24",
          "bytes": 399616,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-triceps-pressdown-2f91bff81d518a34.gif?alt=media&token=52a525c2-0f11-4e73-ac7d-9d02be06f6eb",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-triceps-pressdown-2f91bff81d518a34.gif",
          "verifiedAt": "2026-10-07T23:26:41.073Z"
        },
        "webp": {
          "sha256": "c64bdce56c1f7774dca09e97cc6fc121cb6dd42f53868be3f199d84e0ddf231f",
          "bytes": 623174,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-triceps-pressdown-c64bdce56c1f7774.webp?alt=media&token=f15cb954-d564-4b4b-89d5-96c79535b710",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-triceps-pressdown-c64bdce56c1f7774.webp",
          "verifiedAt": "2026-10-07T23:26:42.231Z"
        },
        "poster": {
          "sha256": "fded9e9a7b8b55b686bc7432b6b5d8b11a5703d311405107ad7e1be8d1778c98",
          "bytes": 67522,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-triceps-pressdown-fded9e9a7b8b55b6.png?alt=media&token=8c933d81-1c24-4712-a039-13da52fc4baf",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-triceps-pressdown-fded9e9a7b8b55b6.png",
          "verifiedAt": "2026-10-07T23:26:37.291Z"
        }
      }
    },
    {
      "id": "trainai-cable-wood-chop",
      "slug": "cable-wood-chop",
      "name": "Cable wood chop",
      "category": "Cable station",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with left side toward high cable pulley, feet wider than hips.",
        "Hold handle both hands near left shoulder, then rotate torso and bring hands diagonally down toward right hip.",
        "Left foot may pivot while right foot remains planted.",
        "Return controlled along same diagonal.",
        "Cable remains attached.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-wood-chop-46782c8c8606.gif?alt=media&token=8751e488-63c1-4c11-b19f-efd096816c2c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cable-wood-chop-2be7575bfece.png?alt=media&token=d3bc79f3-e177-4e92-8172-ee36fa9a215e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cable-wood-chop/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3288343a72b62d6c8a72629249375deb166e46a07f69a28b532a8fd05ae55e7b",
          "bytes": 650797,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-wood-chop-3288343a72b62d6c.gif?alt=media&token=f15f74f8-a95e-4c52-9011-57b1902929ea",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-wood-chop-3288343a72b62d6c.gif",
          "verifiedAt": "2026-10-07T23:26:40.210Z"
        },
        "webp": {
          "sha256": "59d3a52c8befca8639f9f8c0164c51ab1b81d1fcd23dbbca67b21ed491d860d3",
          "bytes": 1036180,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-wood-chop-59d3a52c8befca86.webp?alt=media&token=ce888f69-54f5-4937-9613-076bf10e1a4c",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-wood-chop-59d3a52c8befca86.webp",
          "verifiedAt": "2026-10-07T22:45:06.417Z"
        },
        "poster": {
          "sha256": "5dcb5775adb18d6d8044cff23e98a3a6c614fe471a87a4cea24df5e4bcf92eef",
          "bytes": 52842,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cable-wood-chop-5dcb5775adb18d6d.png?alt=media&token=b77e896f-7f95-4cbf-bbf7-74e60d0ae32f",
          "name": "trainai/creator-media/2026-10-07/trainai-cable-wood-chop-5dcb5775adb18d6d.png",
          "verifiedAt": "2026-10-07T22:45:04.487Z"
        }
      }
    },
    {
      "id": "trainai-calf-foam-roll",
      "slug": "calf-foam-roll",
      "name": "Calf foam roll",
      "category": "Soft-tissue adjuncts",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "recovery",
      "measurement": "duration",
      "instructions": [
        "Sit with one calf resting on a foam roller, the other foot planted and hands supporting you behind.",
        "Gently turn the straight leg outward from the hip, then return to center to change the pressure on the calf.",
        "Keep pressure comfortable, avoid the back of the knee and switch legs after the interval."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-calf-foam-roll-5c2312a681a7.gif?alt=media&token=91b03db7-9e5b-454d-82c7-e42ce67810b5",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-calf-foam-roll-352a322bc8b7.png?alt=media&token=d49e12ac-ad34-4087-9a5c-2e38a22daead",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/calf-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8af15b2c41fd0878594547e7a1c21bffcd5ea91b14e10c7166711c61ef37baae",
          "bytes": 555683,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-calf-foam-roll-8af15b2c41fd0878.gif?alt=media&token=e42445a1-b40f-4304-8992-b156449d49f3",
          "name": "trainai/creator-media/2026-10-07/trainai-calf-foam-roll-8af15b2c41fd0878.gif",
          "verifiedAt": "2026-10-07T23:26:44.701Z"
        },
        "webp": {
          "sha256": "ec442bbb13ed2b448444e12fa21c85f2184f85d37e50830ae5922c06082308d2",
          "bytes": 892950,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-calf-foam-roll-ec442bbb13ed2b44.webp?alt=media&token=b22d1545-3ec2-433f-b680-5c72a368fb33",
          "name": "trainai/creator-media/2026-10-07/trainai-calf-foam-roll-ec442bbb13ed2b44.webp",
          "verifiedAt": "2026-10-07T22:45:05.979Z"
        },
        "poster": {
          "sha256": "72e7119cc02fed99e5642eeea2a5a0d619f01f5b74aa8da14dfea25482ca90a0",
          "bytes": 47610,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-calf-foam-roll-72e7119cc02fed99.png?alt=media&token=4ea435af-292e-4fcf-bf2a-a68dc4e1fea0",
          "name": "trainai/creator-media/2026-10-07/trainai-calf-foam-roll-72e7119cc02fed99.png",
          "verifiedAt": "2026-10-07T22:45:05.617Z"
        }
      }
    },
    {
      "id": "trainai-cat-cow",
      "slug": "cat-cow",
      "name": "Cat-cow",
      "category": "Dynamic warm-up",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "On hands and knees, hands under shoulders and knees under hips.",
        "Gently round upper back and tuck chin for cat, then smoothly extend spine and lift gaze slightly for cow.",
        "Elbows straight, palms and knees remain fixed at identical coordinates."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cat-cow-6705650fca58.gif?alt=media&token=380954b0-bcda-4ee4-8f89-6691d98e6579",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cat-cow-461b79d5f443.png?alt=media&token=9006c854-d723-4c21-bce3-32439457a000",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cat-cow/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "69f1dfc900de61aa6d4660049cb8535796a7156b6283b380e7687104bfa4a6ff",
          "bytes": 167668,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cat-cow-69f1dfc900de61aa.gif?alt=media&token=a55fd0b3-a441-498a-b810-6a47289c4d05",
          "name": "trainai/creator-media/2026-10-07/trainai-cat-cow-69f1dfc900de61aa.gif",
          "verifiedAt": "2026-10-07T23:26:42.936Z"
        },
        "webp": {
          "sha256": "ea7cd4a109feda7fccf15d6b314bff04164438ae5b20bccf0ef9383c2ff74d67",
          "bytes": 257442,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cat-cow-ea7cd4a109feda7f.webp?alt=media&token=8a6fa234-ab96-4d41-9e6a-a69d3c5ad1d1",
          "name": "trainai/creator-media/2026-10-07/trainai-cat-cow-ea7cd4a109feda7f.webp",
          "verifiedAt": "2026-10-07T22:45:06.825Z"
        },
        "poster": {
          "sha256": "54006d72f39f0ad150b2482f87be0fddef40570a9a307b294fd87ce2444c171e",
          "bytes": 55965,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cat-cow-54006d72f39f0ad1.png?alt=media&token=7ab18f15-a528-48b5-ae35-e96262602d7c",
          "name": "trainai/creator-media/2026-10-07/trainai-cat-cow-54006d72f39f0ad1.png",
          "verifiedAt": "2026-10-07T22:45:06.998Z"
        }
      }
    },
    {
      "id": "trainai-chair-assisted-squat",
      "slug": "chair-assisted-squat",
      "name": "Chair-assisted squat",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Standing behind a sturdy chair, both hands lightly resting on the top of its backrest, feet shoulder width.",
        "Bend hips and knees into a comfortable supported squat, then stand.",
        "Hands stay at the same height on the backrest.",
        "Do not sit on the chair."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chair-assisted-squat-1f7db9a0b7cb.gif?alt=media&token=6d1ce02b-9192-4108-ae1f-ea0c0a38e089",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chair-assisted-squat-961e4c65cdb5.png?alt=media&token=b81afc1b-556a-4849-a072-87ce13974984",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/chair-assisted-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 1820,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "9a4bed93f4a728c37e793636c29ff3350009f18aecd33976b2523ad156f80dc9",
          "bytes": 320540,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chair-assisted-squat-9a4bed93f4a728c3.gif?alt=media&token=de0c50d7-d7f9-4192-9b0c-17fa872fac8e",
          "name": "trainai/creator-media/2026-10-07/trainai-chair-assisted-squat-9a4bed93f4a728c3.gif",
          "verifiedAt": "2026-10-07T23:26:45.650Z"
        },
        "webp": {
          "sha256": "ec4a224af6f83a28c2bb408583c6a1b256f1a9130284bb12b597d409718341f1",
          "bytes": 498550,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chair-assisted-squat-ec4a224af6f83a28.webp?alt=media&token=e2455f48-718f-4ade-93d0-fc149828f962",
          "name": "trainai/creator-media/2026-10-07/trainai-chair-assisted-squat-ec4a224af6f83a28.webp",
          "verifiedAt": "2026-10-07T23:26:47.235Z"
        },
        "poster": {
          "sha256": "42289cb98f7b562be94c7ab53de980ebea4d5e2c80bed16c0443d3915564d522",
          "bytes": 60075,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chair-assisted-squat-42289cb98f7b562b.png?alt=media&token=33df257e-60b0-4de7-bcf5-01510c3958a1",
          "name": "trainai/creator-media/2026-10-07/trainai-chair-assisted-squat-42289cb98f7b562b.png",
          "verifiedAt": "2026-10-07T23:26:45.403Z"
        }
      }
    },
    {
      "id": "trainai-chair-supported-split-squat",
      "slug": "chair-supported-split-squat",
      "name": "Chair-supported split squat",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start in a staggered split stance with front foot flat and rear heel lifted.",
        "One hand lightly holds the backrest of a sturdy chair beside the front hip.",
        "Bend both knees to lower hips vertically, rear knee approaching the floor, then rise in the same stance.",
        "Feet do not step or switch."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chair-supported-split-squat-4e824da77abf.gif?alt=media&token=b2c879ca-f3a2-46a1-9320-9f7282826bcb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chair-supported-split-squat-bf96c1a4b098.png?alt=media&token=95a7620f-9735-4ccb-8693-a79935737278",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/chair-supported-split-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6a65a9f056b4cd8fffc8326cdd0bac06f09703b5b01e32eb570a601c7955f5a8",
          "bytes": 394151,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chair-supported-split-squat-6a65a9f056b4cd8f.gif?alt=media&token=92fb67ab-386a-4bb8-b17d-5f37bb1d2a14",
          "name": "trainai/creator-media/2026-10-07/trainai-chair-supported-split-squat-6a65a9f056b4cd8f.gif",
          "verifiedAt": "2026-10-07T23:26:48.233Z"
        },
        "webp": {
          "sha256": "abc7aa9920d7b86ae98ea2a32c731f1c439c977b88fec124ceab4e5a5933b817",
          "bytes": 621584,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chair-supported-split-squat-abc7aa9920d7b86a.webp?alt=media&token=219fab46-f4da-44c2-8c6b-358e3d9ec397",
          "name": "trainai/creator-media/2026-10-07/trainai-chair-supported-split-squat-abc7aa9920d7b86a.webp",
          "verifiedAt": "2026-10-07T22:45:08.636Z"
        },
        "poster": {
          "sha256": "f1adf3555f49c1908d300c4a37d5631a6ff811fc2cf8328cdc7d2289cc89f859",
          "bytes": 62230,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chair-supported-split-squat-f1adf3555f49c190.png?alt=media&token=b92e203f-ecac-49da-b400-a1a81beb78e2",
          "name": "trainai/creator-media/2026-10-07/trainai-chair-supported-split-squat-f1adf3555f49c190.png",
          "verifiedAt": "2026-10-07T22:45:08.738Z"
        }
      }
    },
    {
      "id": "trainai-chest-supported-dumbbell-row",
      "slug": "chest-supported-dumbbell-row",
      "name": "Chest-supported dumbbell row",
      "category": "Dumbbell foundations",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "adjustable-bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie chest-down on an incline bench with feet planted, dumbbells hanging from straight arms beneath shoulders.",
        "Pull both elbows backward to bring weights toward lower ribs, then lower.",
        "Chest stays against bench, neck neutral and no torso swinging."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chest-supported-dumbbell-row-42a0b25e42cc.gif?alt=media&token=68ed405f-16ee-4ead-97c1-bcb325069215",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chest-supported-dumbbell-row-f0f399759290.png?alt=media&token=bf37ac88-8112-4121-ba34-edd2973c70a3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/chest-supported-dumbbell-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6906a8e3aa7d60eac02b5c1ec5c7dbb58a5863290e86b72b61eef27e757c3e7a",
          "bytes": 432614,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chest-supported-dumbbell-row-6906a8e3aa7d60ea.gif?alt=media&token=0fe0e90a-d881-4e64-a6eb-a13d1b6feda1",
          "name": "trainai/creator-media/2026-10-07/trainai-chest-supported-dumbbell-row-6906a8e3aa7d60ea.gif",
          "verifiedAt": "2026-10-07T23:26:50.673Z"
        },
        "webp": {
          "sha256": "ef0073a0c192e04c9d28aa8af85864bc313b7b0b0b5c91576797e4671a3a7d76",
          "bytes": 700532,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chest-supported-dumbbell-row-ef0073a0c192e04c.webp?alt=media&token=938c3c24-ba2c-4383-a46d-eb01ee798692",
          "name": "trainai/creator-media/2026-10-07/trainai-chest-supported-dumbbell-row-ef0073a0c192e04c.webp",
          "verifiedAt": "2026-10-07T22:45:10.256Z"
        },
        "poster": {
          "sha256": "c4919448b8ed6ac1290a84febf8e50179bc6c288f79bc52697b041d733a581bf",
          "bytes": 72737,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chest-supported-dumbbell-row-c4919448b8ed6ac1.png?alt=media&token=fb3f6268-df4c-49f6-b6b6-0c3823b36beb",
          "name": "trainai/creator-media/2026-10-07/trainai-chest-supported-dumbbell-row-c4919448b8ed6ac1.png",
          "verifiedAt": "2026-10-07T22:45:09.635Z"
        }
      }
    },
    {
      "id": "trainai-child-pose",
      "slug": "child-pose",
      "name": "Child pose",
      "category": "Static stretching",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Kneel, sit hips toward heels and reach both arms forward along floor, forehead gently toward floor.",
        "Hold child pose quietly with relaxed shoulders, then lift torso slightly back toward kneeling.",
        "Hands and knees remain grounded; do not turn this into a push-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-child-pose-faa51ef8495d.gif?alt=media&token=ab74123c-1499-4f6a-9d2f-3427b4303c82",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-child-pose-6c268a2d4f90.png?alt=media&token=e6a174e6-b7a9-4763-8b96-5a184ad6ab77",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/child-pose/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a79e4e13ea5efbefc5fcedc9a09de19bb78f16be0016f9857128ebb52e8b726e",
          "bytes": 149838,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-child-pose-a79e4e13ea5efbef.gif?alt=media&token=74b2849b-1627-4b17-a7a1-5fc7e85bfc59",
          "name": "trainai/creator-media/2026-10-07/trainai-child-pose-a79e4e13ea5efbef.gif",
          "verifiedAt": "2026-10-07T23:26:48.463Z"
        },
        "webp": {
          "sha256": "90e388d913e9f05637ce621438771a1c71e5464e03c15ce061055fb7b56dceeb",
          "bytes": 236050,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-child-pose-90e388d913e9f056.webp?alt=media&token=b48a094a-8bfb-4944-a12a-7b038e2daaea",
          "name": "trainai/creator-media/2026-10-07/trainai-child-pose-90e388d913e9f056.webp",
          "verifiedAt": "2026-10-07T22:45:10.423Z"
        },
        "poster": {
          "sha256": "1c5458de4ff6ed5973fa629c2e468e913dafd4bba2d3da3c31f311fa80a157a1",
          "bytes": 52191,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-child-pose-1c5458de4ff6ed59.png?alt=media&token=1d4adf3c-e003-4487-a547-5281fbb1b754",
          "name": "trainai/creator-media/2026-10-07/trainai-child-pose-1c5458de4ff6ed59.png",
          "verifiedAt": "2026-10-07T22:45:11.002Z"
        }
      }
    },
    {
      "id": "trainai-chin-up",
      "slug": "chin-up",
      "name": "Chin-up",
      "category": "Pull-up and suspension",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [
        "rated-pull-up-bar"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hang from fixed freestanding pull-up bar with shoulder-width UNDERHAND grip, palms toward face.",
        "Pull body up until chin reaches bar, then lower to long arms.",
        "Feet together with knees softly bent, no swing.",
        "Grip and stationary bar remain unchanged."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chin-up-a006a60f6281.gif?alt=media&token=09dbb242-ae24-4e96-b040-02c69148c3c0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-chin-up-9f69e64695d9.png?alt=media&token=3148f0e2-d0cb-47a0-908e-b9c0c637c762",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/chin-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ef5c33fe6094327357a320d1e60e65bdcf33f4eb365614d6aaaba25f541b126f",
          "bytes": 339169,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chin-up-ef5c33fe60943273.gif?alt=media&token=9d90d3d7-12e4-4ecd-9acb-f2da2ea7d2d8",
          "name": "trainai/creator-media/2026-10-07/trainai-chin-up-ef5c33fe60943273.gif",
          "verifiedAt": "2026-10-07T23:26:50.626Z"
        },
        "webp": {
          "sha256": "7fbfd1f9994cada514ce1c32dede21f6c7d892f728c00e53817b5e4fde72fef1",
          "bytes": 515608,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chin-up-7fbfd1f9994cada5.webp?alt=media&token=c265eac2-d115-440a-a7cf-092c4e1d448d",
          "name": "trainai/creator-media/2026-10-07/trainai-chin-up-7fbfd1f9994cada5.webp",
          "verifiedAt": "2026-10-07T22:45:11.628Z"
        },
        "poster": {
          "sha256": "70820cf64754874d5ee7493cc1eac504f6f20611f106e5c82c2ea5573b7d156c",
          "bytes": 52343,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-chin-up-70820cf64754874d.png?alt=media&token=f4dc5438-db35-45d7-9b1b-b83968e52f9a",
          "name": "trainai/creator-media/2026-10-07/trainai-chin-up-70820cf64754874d.png",
          "verifiedAt": "2026-10-07T22:45:11.650Z"
        }
      }
    },
    {
      "id": "trainai-clamshell",
      "slug": "clamshell",
      "name": "Clamshell",
      "category": "Home foundations",
      "target": "abductors",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on side, hips stacked and both knees bent, feet together.",
        "Keeping both feet touching, lift only the top knee to open the knees like a clamshell, then lower the top knee.",
        "Do not raise the entire top leg or roll the pelvis backward.",
        "Head supported by bottom arm."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-clamshell-2ef0fa1e4078.gif?alt=media&token=6b836fd1-060c-42b3-a21c-d9a27181e2dc",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-clamshell-01d8c8a8f9b0.png?alt=media&token=e7c7d9b2-b71f-4283-8c87-901982329d97",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/clamshell/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2a8b0c971016abd7bd36dc380f326fb09ba1664455b8897bd8628aa45cf6cfce",
          "bytes": 362999,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-clamshell-2a8b0c971016abd7.gif?alt=media&token=cebd9bdf-e1e2-4eaa-bfc6-1d715eb0a67c",
          "name": "trainai/creator-media/2026-10-07/trainai-clamshell-2a8b0c971016abd7.gif",
          "verifiedAt": "2026-10-07T23:26:50.579Z"
        },
        "webp": {
          "sha256": "4bb6c911051c01958afa274077432f449be08cbfdc22a861ecabe6a735b07364",
          "bytes": 583436,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-clamshell-4bb6c911051c0195.webp?alt=media&token=c0f52d8b-a10e-442e-a2d7-d273ffa09ff9",
          "name": "trainai/creator-media/2026-10-07/trainai-clamshell-4bb6c911051c0195.webp",
          "verifiedAt": "2026-10-07T22:45:12.634Z"
        },
        "poster": {
          "sha256": "ace6ea8a4a09a84a2a30759f7d7b256d03fbde25ebfe25dd66100339c0589d89",
          "bytes": 59125,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-clamshell-ace6ea8a4a09a84a.png?alt=media&token=bf6d2849-98ad-4e2b-884a-881dc96560a5",
          "name": "trainai/creator-media/2026-10-07/trainai-clamshell-ace6ea8a4a09a84a.png",
          "verifiedAt": "2026-10-07T22:45:12.319Z"
        }
      }
    },
    {
      "id": "trainai-close-grip-barbell-bench-press",
      "slug": "close-grip-barbell-bench-press",
      "name": "Close-grip barbell bench press",
      "category": "Barbell foundations",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Close-grip barbell bench press.",
        "Lie on flat bench, head left feet right, both feet grounded.",
        "Shoulder-width overhand grip.",
        "Start with straight arms over sternum, lower bar to LOWER MIDDLE CHEST, below nipple line, elbows close to ribs and forearms vertical.",
        "Never bar above neck or face.",
        "One rigid unchanged bar and plates.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-close-grip-barbell-bench-press-b2480011c539.gif?alt=media&token=48c44540-fd48-419f-bec1-0f50567001ad",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-close-grip-barbell-bench-press-548dbbbd45e9.png?alt=media&token=b1db53d5-21ed-4962-a72d-e63a2e05b479",
      "aliases": [
        "barbell close-grip bench press"
      ],
      "legacyIds": [
        "0030"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/close-grip-barbell-bench-press/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1380,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "24d9eaba12ccf6d928e4c6546931be918669e3edf863681f53b926d72575bf2d",
          "bytes": 256790,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-close-grip-barbell-bench-press-24d9eaba12ccf6d9.gif?alt=media&token=304fd80a-2268-46cc-b207-0bcbcf2b2ebe",
          "name": "trainai/creator-media/2026-10-07/trainai-close-grip-barbell-bench-press-24d9eaba12ccf6d9.gif",
          "verifiedAt": "2026-10-07T23:26:53.685Z"
        },
        "webp": {
          "sha256": "1e28b9d29368ea18988707b042864f6c95d0c270a50503ee32d61da7fd00be58",
          "bytes": 364550,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-close-grip-barbell-bench-press-1e28b9d29368ea18.webp?alt=media&token=bafee5bc-8258-4c91-b7f7-a8e3e1db04fd",
          "name": "trainai/creator-media/2026-10-07/trainai-close-grip-barbell-bench-press-1e28b9d29368ea18.webp",
          "verifiedAt": "2026-10-07T23:26:53.345Z"
        },
        "poster": {
          "sha256": "2ba4be3d6ee82bac79db1f508df1da3462fff22409c78ce4912672f1547b6f18",
          "bytes": 107876,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-close-grip-barbell-bench-press-2ba4be3d6ee82bac.png?alt=media&token=381e6071-5b80-42f4-a8d4-b5f7ec1a964a",
          "name": "trainai/creator-media/2026-10-07/trainai-close-grip-barbell-bench-press-2ba4be3d6ee82bac.png",
          "verifiedAt": "2026-10-07T23:26:53.086Z"
        }
      }
    },
    {
      "id": "trainai-close-grip-push-up",
      "slug": "close-grip-push-up",
      "name": "Close-grip push-up",
      "category": "Home pushing",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Perform a push-up with hands close together beneath the chest, elbows tracking beside ribs.",
        "Keep a straight head-to-heel line on toes.",
        "Lower chest toward hands, then press to straight arms.",
        "Hands need not form a tiny diamond; comfortable narrow placement.",
        "No wide elbows."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-close-grip-push-up-d1976f2f691e.gif?alt=media&token=ee6f39fe-aafb-43bb-acd9-33764779cea4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-close-grip-push-up-b5af4d226f5c.png?alt=media&token=17db6003-1d16-4815-9730-8f66c5b9142f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/close-grip-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c38a2f786a7fcc9f3affb29c53d7bec88fbc2b4900294db32e1eb7fc3c13c290",
          "bytes": 361324,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-close-grip-push-up-c38a2f786a7fcc9f.gif?alt=media&token=1a9c37b3-c18f-461c-b769-dec6889c8f91",
          "name": "trainai/creator-media/2026-10-07/trainai-close-grip-push-up-c38a2f786a7fcc9f.gif",
          "verifiedAt": "2026-10-07T23:26:56.906Z"
        },
        "webp": {
          "sha256": "a853ce51a22bf39bdea9c2b82e33d2002f4bb66b1c680368c1191ac3db871a51",
          "bytes": 595908,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-close-grip-push-up-a853ce51a22bf39b.webp?alt=media&token=ff8679aa-be1b-4eea-812f-e147520da247",
          "name": "trainai/creator-media/2026-10-07/trainai-close-grip-push-up-a853ce51a22bf39b.webp",
          "verifiedAt": "2026-10-07T22:45:14.978Z"
        },
        "poster": {
          "sha256": "800673dd2bee3ed8dd87a4875acbd4c7ed53b7a283acf99e645a4ed9fe4bac24",
          "bytes": 68337,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-close-grip-push-up-800673dd2bee3ed8.png?alt=media&token=c254eac9-7aaf-4849-a136-8247f358d97c",
          "name": "trainai/creator-media/2026-10-07/trainai-close-grip-push-up-800673dd2bee3ed8.png",
          "verifiedAt": "2026-10-07T22:45:14.903Z"
        }
      }
    },
    {
      "id": "trainai-controlled-step-down",
      "slug": "controlled-step-down",
      "name": "Controlled step-down",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Begin upright on a low stable step with the nearer leg supporting the body and the other foot near the front edge.",
        "Slowly bend the supporting knee to lower the free heel toward a light floor tap in front of the step.",
        "Push through the foot on the step to rise.",
        "The free foot only taps; never transfer weight to it or jump."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-controlled-step-down-8d6777e48bb6.gif?alt=media&token=364d3bd7-d9ad-4cad-85e5-932501f89331",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-controlled-step-down-9561e05466cc.png?alt=media&token=29279ccb-57f0-487a-8876-479a81ca0b10",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/controlled-step-down/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e7cf1e6d8b09b1c2c9baaf26cae8bc233796041ee8ca4a8d61b20893e45b4d8c",
          "bytes": 273289,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-controlled-step-down-e7cf1e6d8b09b1c2.gif?alt=media&token=72a7447e-3644-467f-aa80-318e235400f5",
          "name": "trainai/creator-media/2026-10-07/trainai-controlled-step-down-e7cf1e6d8b09b1c2.gif",
          "verifiedAt": "2026-10-07T23:26:56.733Z"
        },
        "webp": {
          "sha256": "460c821a241ea1439e8063fb0c2399849d48888f5ccba4b3839394afd73d7c96",
          "bytes": 449706,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-controlled-step-down-460c821a241ea143.webp?alt=media&token=79955009-12a0-4411-926b-2b7d7ac36c6c",
          "name": "trainai/creator-media/2026-10-07/trainai-controlled-step-down-460c821a241ea143.webp",
          "verifiedAt": "2026-10-07T23:26:57.843Z"
        },
        "poster": {
          "sha256": "247aa56042e8b1681ede8ac527a07b3a475631185b274aad9339bfab6410d727",
          "bytes": 43432,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-controlled-step-down-247aa56042e8b168.png?alt=media&token=d8a164d9-22ee-4375-ac65-f3feb9654489",
          "name": "trainai/creator-media/2026-10-07/trainai-controlled-step-down-247aa56042e8b168.png",
          "verifiedAt": "2026-10-07T23:26:57.551Z"
        }
      }
    },
    {
      "id": "trainai-controlled-trunk-rotation",
      "slug": "controlled-trunk-rotation",
      "name": "Controlled trunk rotation",
      "category": "Dynamic warm-up",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall feet hip width, hands crossed lightly on chest.",
        "Rotate ribcage gently right then through center to left and center.",
        "Pelvis mostly faces forward, knees soft, no twisting knees or forcing range.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-controlled-trunk-rotation-df24aaf4f4a5.gif?alt=media&token=18b4d7e6-842e-4f4b-a4b9-cfb810df7fff",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-controlled-trunk-rotation-8ea424e37584.png?alt=media&token=59ab07db-bf38-440d-ac94-e32e3c4fecdc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/controlled-trunk-rotation/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "07a42f13221c59dbcba4f3be0210bb3b977d17c443d73b64db015d8cd4e824a4",
          "bytes": 274319,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-controlled-trunk-rotation-07a42f13221c59db.gif?alt=media&token=c27c44fa-e6f3-49dc-8c4e-e5850e165ea5",
          "name": "trainai/creator-media/2026-10-07/trainai-controlled-trunk-rotation-07a42f13221c59db.gif",
          "verifiedAt": "2026-10-07T23:26:59.335Z"
        },
        "webp": {
          "sha256": "a2f537a3e8a1d0b8bf42d2489d72f882c2b2f6ffe6cf4d7d490f000c03599f6f",
          "bytes": 458630,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-controlled-trunk-rotation-a2f537a3e8a1d0b8.webp?alt=media&token=c110c6b6-d90c-44ef-8455-999a892fb905",
          "name": "trainai/creator-media/2026-10-07/trainai-controlled-trunk-rotation-a2f537a3e8a1d0b8.webp",
          "verifiedAt": "2026-10-07T22:45:16.724Z"
        },
        "poster": {
          "sha256": "32f3bd227184ab5a2cdce0355781b3c37ccad21e41d39972561bd196812158c7",
          "bytes": 44013,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-controlled-trunk-rotation-32f3bd227184ab5a.png?alt=media&token=184225bc-5efd-4513-b053-9b8be6d4fb94",
          "name": "trainai/creator-media/2026-10-07/trainai-controlled-trunk-rotation-32f3bd227184ab5a.png",
          "verifiedAt": "2026-10-07T22:45:16.745Z"
        }
      }
    },
    {
      "id": "trainai-cross-body-shoulder-stretch",
      "slug": "cross-body-shoulder-stretch",
      "name": "Cross-body shoulder stretch",
      "category": "Static stretching",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Cross-body shoulder stretch.",
        "Stand tall, feet hip-width.",
        "Bring the right arm across the upper chest at about shoulder level, right elbow softly straight.",
        "Left hand supports the right upper arm just above the elbow, gently drawing it across the body.",
        "Shoulders relaxed, no neck tilt, no pressing the elbow joint and no twisting the torso.",
        "Hold then release gently.",
        "Demonstrate one side only.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cross-body-shoulder-stretch-e00eba7e4123.gif?alt=media&token=44aa93d8-e26e-461d-b99f-84b612ae1d0e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-cross-body-shoulder-stretch-476869b9e3ad.png?alt=media&token=eeaa9c76-abd8-44aa-8eb0-644961804b4d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/cross-body-shoulder-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ec300a3d2fd2acfe30e70d1cdfb675c49a48e285f094f0b06f91ef35139cb1ff",
          "bytes": 270159,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cross-body-shoulder-stretch-ec300a3d2fd2acfe.gif?alt=media&token=1fadcb02-d370-48dd-966a-899ab38e4606",
          "name": "trainai/creator-media/2026-10-07/trainai-cross-body-shoulder-stretch-ec300a3d2fd2acfe.gif",
          "verifiedAt": "2026-10-07T23:27:00.774Z"
        },
        "webp": {
          "sha256": "53a3f01ca153e6e43e7c240a1142cf6dfc57e6d20a2ae8127118ee6a5dd3bf2a",
          "bytes": 428242,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cross-body-shoulder-stretch-53a3f01ca153e6e4.webp?alt=media&token=3be739b1-2efe-4154-b66b-d24362da82e7",
          "name": "trainai/creator-media/2026-10-07/trainai-cross-body-shoulder-stretch-53a3f01ca153e6e4.webp",
          "verifiedAt": "2026-10-07T23:27:14.925Z"
        },
        "poster": {
          "sha256": "82b653981c2dffba4083044d8d151244115d89cfef318af927418d1f8ae219a8",
          "bytes": 47349,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-cross-body-shoulder-stretch-82b653981c2dffba.png?alt=media&token=cd282ad6-b9b3-4e4f-9d17-0db253c808bc",
          "name": "trainai/creator-media/2026-10-07/trainai-cross-body-shoulder-stretch-82b653981c2dffba.png",
          "verifiedAt": "2026-10-07T23:27:00.257Z"
        }
      }
    },
    {
      "id": "trainai-curl-up",
      "slug": "curl-up",
      "name": "Curl-up",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on back with knees bent, feet flat and arms reaching toward thighs.",
        "Curl upper chest a small distance so shoulder blades just lift from floor, then lower slowly.",
        "Keep neck neutral, chin gently tucked, pelvis and feet fixed.",
        "This is a short abdominal curl, not a full sit-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-curl-up-51ada0e1ba72.gif?alt=media&token=b2fee7fe-8870-483e-9a7e-36f4b287572d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-curl-up-6fdd76f136f9.png?alt=media&token=6caa8231-e62d-40ff-bf48-0f7dd21e9723",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/curl-up/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1640,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "03013c7662170c30267214fa11ffe8e6ef092962ad1ad800ce40a20248166744",
          "bytes": 116154,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-curl-up-03013c7662170c30.gif?alt=media&token=7aa7be93-dd38-4e07-b4f7-7b63d5d9b531",
          "name": "trainai/creator-media/2026-10-07/trainai-curl-up-03013c7662170c30.gif",
          "verifiedAt": "2026-10-07T23:27:02.105Z"
        },
        "webp": {
          "sha256": "348eaebd5ddcb550781f1c72b6e75afce08d51c1146a16ecd399b2b178442af4",
          "bytes": 187418,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-curl-up-348eaebd5ddcb550.webp?alt=media&token=5933705e-1ea2-400c-a0f3-4e00509ea29b",
          "name": "trainai/creator-media/2026-10-07/trainai-curl-up-348eaebd5ddcb550.webp",
          "verifiedAt": "2026-10-07T23:27:03.122Z"
        },
        "poster": {
          "sha256": "5f284bd0845578cc77ef96ab871d3aafed348c5fbc0d65c4185bdfe9f164db8e",
          "bytes": 48042,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-curl-up-5f284bd0845578cc.png?alt=media&token=192613c4-b0e0-401c-a1dd-172c414a0323",
          "name": "trainai/creator-media/2026-10-07/trainai-curl-up-5f284bd0845578cc.png",
          "verifiedAt": "2026-10-07T23:27:03.130Z"
        }
      }
    },
    {
      "id": "trainai-dead-bug",
      "slug": "dead-bug",
      "name": "Dead bug",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on your back with arms pointing upward and hips and knees bent.",
        "Brace gently and extend one leg while reaching the opposite arm overhead, stopping before your lower back arches.",
        "Return to the start and alternate sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dead-bug-7d53982ef4aa.gif?alt=media&token=c716fd06-2141-4142-829d-67d775c79427",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dead-bug-2f7f24f23a71.png?alt=media&token=4fb0ff67-f594-4640-aa17-abfa986ac9c6",
      "aliases": [
        "dead bug"
      ],
      "legacyIds": [
        "0276"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/dead-bug/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 1780,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d5e0c8140cb57b6aa781be51a81ae3a2f3c7ee93d563280ba1ecd1fe446202aa",
          "bytes": 247931,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dead-bug-d5e0c8140cb57b6a.gif?alt=media&token=b2ea9529-d3c4-4a1a-ba41-74698c8322de",
          "name": "trainai/creator-media/2026-10-07/trainai-dead-bug-d5e0c8140cb57b6a.gif",
          "verifiedAt": "2026-10-07T23:27:08.904Z"
        },
        "webp": {
          "sha256": "09761cb1f0d090a92257a247cdd875ab333adb343535d4d254f69459c4ef4479",
          "bytes": 395204,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dead-bug-09761cb1f0d090a9.webp?alt=media&token=f7f93df9-5127-4871-aadd-f0ca094026df",
          "name": "trainai/creator-media/2026-10-07/trainai-dead-bug-09761cb1f0d090a9.webp",
          "verifiedAt": "2026-10-07T23:27:09.275Z"
        },
        "poster": {
          "sha256": "d731666b40206ea77f45fd28543e48bc4aa3016a322a9ce596b5080ddd4a45cc",
          "bytes": 59040,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dead-bug-d731666b40206ea7.png?alt=media&token=f31f1dd9-a45f-4f21-830d-ec960af2b3cb",
          "name": "trainai/creator-media/2026-10-07/trainai-dead-bug-d731666b40206ea7.png",
          "verifiedAt": "2026-10-07T23:27:10.708Z"
        }
      }
    },
    {
      "id": "trainai-doorway-chest-stretch",
      "slug": "doorway-chest-stretch",
      "name": "Doorway chest stretch",
      "category": "Static stretching",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [
        "doorway"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Stand in a doorway with forearms resting on the frame and elbows slightly below shoulder height.",
        "Step forward gently until you feel a comfortable stretch across the chest.",
        "Keep ribs down and ease out without bouncing."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-doorway-chest-stretch-b57263471496.gif?alt=media&token=84e0cf9d-711d-41a3-90b3-102b5fa96dbf",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-doorway-chest-stretch-2df81191ba1c.png?alt=media&token=7745164b-5624-4006-8ddb-ebdc80120983",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/doorway-chest-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e3d95310f9e19105ed72c21b05e58ae6a1075084e2b8678e2c5c43be81077dbc",
          "bytes": 151657,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-doorway-chest-stretch-e3d95310f9e19105.gif?alt=media&token=451c0189-1828-4f58-b465-d6443ddd66ed",
          "name": "trainai/creator-media/2026-10-07/trainai-doorway-chest-stretch-e3d95310f9e19105.gif",
          "verifiedAt": "2026-10-07T23:27:10.182Z"
        },
        "webp": {
          "sha256": "01b81cc82721b5f57dd353b97e86bada015bb3f38a8aaddd284445ea7d79bf78",
          "bytes": 215600,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-doorway-chest-stretch-01b81cc82721b5f5.webp?alt=media&token=51ef3406-73a2-4a6a-ace3-c0ce60bb0e20",
          "name": "trainai/creator-media/2026-10-07/trainai-doorway-chest-stretch-01b81cc82721b5f5.webp",
          "verifiedAt": "2026-10-07T23:27:12.437Z"
        },
        "poster": {
          "sha256": "a425d923117e47a66098b7658b663eaec3565f4e37ed9a898e3a32277bace113",
          "bytes": 58994,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-doorway-chest-stretch-a425d923117e47a6.png?alt=media&token=0dbf8946-f600-43f8-8118-41e5f5f4bf48",
          "name": "trainai/creator-media/2026-10-07/trainai-doorway-chest-stretch-a425d923117e47a6.png",
          "verifiedAt": "2026-10-07T23:27:11.452Z"
        }
      }
    },
    {
      "id": "trainai-dowel-shoulder-flexion",
      "slug": "dowel-shoulder-flexion",
      "name": "Dowel shoulder flexion",
      "category": "Mobility",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [
        "dowel"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall holding a straight light dowel with both hands wider than shoulders, overhand grip.",
        "Lift dowel from front of thighs forward and overhead with elbows nearly straight, then lower.",
        "Stop comfortable overhead without leaning back.",
        "Dowel remains same rigid length."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dowel-shoulder-flexion-9c961f17b9a0.gif?alt=media&token=86e0017d-ebc4-437e-87ae-2bcf8c3e3fbe",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dowel-shoulder-flexion-83a49aaa75b2.png?alt=media&token=1fc10e20-0739-4a26-b268-9ecfc7ced80e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dowel-shoulder-flexion/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "54e83467b5f8afb4d4ae6aa508c77d8afd9ca29daaaa5eda8956c2377b021fb8",
          "bytes": 227802,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dowel-shoulder-flexion-54e83467b5f8afb4.gif?alt=media&token=c18a6003-7251-4adc-a948-30de8e9363b8",
          "name": "trainai/creator-media/2026-10-07/trainai-dowel-shoulder-flexion-54e83467b5f8afb4.gif",
          "verifiedAt": "2026-10-07T23:27:12.527Z"
        },
        "webp": {
          "sha256": "cb496d6ccc24e015c8b31c798faa873c47d74777896a2ce0f6683225175cb5a2",
          "bytes": 378640,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dowel-shoulder-flexion-cb496d6ccc24e015.webp?alt=media&token=ee07414a-c468-44b8-8179-7a50115c8d97",
          "name": "trainai/creator-media/2026-10-07/trainai-dowel-shoulder-flexion-cb496d6ccc24e015.webp",
          "verifiedAt": "2026-10-07T23:27:15.144Z"
        },
        "poster": {
          "sha256": "ac93868435fb234723554d4f5da1b012cc2d198ff1fb5bfc276cbcd7588407c4",
          "bytes": 47415,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dowel-shoulder-flexion-ac93868435fb2347.png?alt=media&token=fde347cc-fc24-47cc-8252-94e6305046dd",
          "name": "trainai/creator-media/2026-10-07/trainai-dowel-shoulder-flexion-ac93868435fb2347.png",
          "verifiedAt": "2026-10-07T23:27:13.724Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-bench-press",
      "slug": "dumbbell-bench-press",
      "name": "Dumbbell bench press",
      "category": "Dumbbell foundations",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie face up on a flat exercise bench, feet flat on floor, one dumbbell in each hand beside chest.",
        "Press both weights above chest, then bend elbows to lower under control.",
        "Forearms near vertical, elbows angled about 45 degrees from torso.",
        "Head, upper back and hips remain on bench."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-bench-press-35e8f64e4995.gif?alt=media&token=948a708d-8254-4832-8294-f79083c3026a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-bench-press-efdd82e5ff00.png?alt=media&token=72961ea4-d957-4d09-b505-54c2a54d943b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-bench-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7116deac47a6202ec88f371c685f9814570dff2056dacee6bb9eea3dee7f44f8",
          "bytes": 443898,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-bench-press-7116deac47a6202e.gif?alt=media&token=ef6233ba-3bcd-47db-8f25-76fe2a2b2f6d",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-bench-press-7116deac47a6202e.gif",
          "verifiedAt": "2026-10-07T23:27:17.439Z"
        },
        "webp": {
          "sha256": "b84c0c9540ea83086fe4a714437dcc49fb7dc45d0f2cca92c9d87e9718edc5dd",
          "bytes": 701358,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-bench-press-b84c0c9540ea8308.webp?alt=media&token=1cf4ace9-bd99-44b2-8a64-2030257aeb87",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-bench-press-b84c0c9540ea8308.webp",
          "verifiedAt": "2026-10-07T22:45:24.510Z"
        },
        "poster": {
          "sha256": "586c5078c1c7ac84222e8fc84fbbdc4ecb1b771d8b3fb288239b22fafdccdf3d",
          "bytes": 63924,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-bench-press-586c5078c1c7ac84.png?alt=media&token=02b0b367-99d3-4dd7-9ea2-c553e74f06d4",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-bench-press-586c5078c1c7ac84.png",
          "verifiedAt": "2026-10-07T22:45:22.759Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-bent-over-row",
      "slug": "dumbbell-bent-over-row",
      "name": "Dumbbell bent-over row",
      "category": "Dumbbell foundations",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand hip-width holding two dumbbells, hinge forward with soft knees and a neutral back.",
        "Keep this hinged torso position while pulling elbows backward toward hips to bring weights to ribs, then lower to straight arms.",
        "Do not stand up between repetitions."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-bent-over-row-ae2e9490b35f.gif?alt=media&token=a0523e39-7057-404d-9bec-e8cd38856b20",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-bent-over-row-244ee00584b3.png?alt=media&token=2e48f70b-6997-44cb-92df-ab0022f6bcac",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-bent-over-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3dd0835e7b91ed664a917e75caac55f12583a4021eced4fe663aa691a53a1674",
          "bytes": 312716,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-bent-over-row-3dd0835e7b91ed66.gif?alt=media&token=446968b1-c6d7-4057-8a12-68ef7e776ca7",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-bent-over-row-3dd0835e7b91ed66.gif",
          "verifiedAt": "2026-10-07T23:27:17.847Z"
        },
        "webp": {
          "sha256": "e75d6b764e7450cc16ed99f8d6fa5adcb96e8e6f3942414ee8b17c1a6eb8421e",
          "bytes": 503844,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-bent-over-row-e75d6b764e7450cc.webp?alt=media&token=c12b7804-a773-43ef-807e-3d0c8f2a3023",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-bent-over-row-e75d6b764e7450cc.webp",
          "verifiedAt": "2026-10-07T22:45:23.741Z"
        },
        "poster": {
          "sha256": "ebc273d13c0479b296783ea06a0b5d52862ccebeecaf316821ec7f03c570fe02",
          "bytes": 53501,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-bent-over-row-ebc273d13c0479b2.png?alt=media&token=1b96191b-c980-4bc9-a66c-9f5034335c31",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-bent-over-row-ebc273d13c0479b2.png",
          "verifiedAt": "2026-10-07T22:45:24.025Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-biceps-curl",
      "slug": "dumbbell-biceps-curl",
      "name": "Dumbbell biceps curl",
      "category": "Dumbbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall with a dumbbell in each hand, palms forward and elbows close to the sides.",
        "Bend the elbows to curl the weights without swinging the torso.",
        "Lower the weights slowly while keeping wrists aligned."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-biceps-curl-8ecfe1d60af0.gif?alt=media&token=1076736e-3d77-470e-b4d3-6149f25fbc99",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-biceps-curl-0e0c5012d6a1.png?alt=media&token=39db31aa-a49e-4b8a-8200-67e7fcdf0003",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-biceps-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7f8e6e3393d2ec6faf58d91c302241ab81496421a59993efc0fda0fbe35f7449",
          "bytes": 565919,
          "mimeType": "image/gif",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-biceps-curl-7f8e6e3393d2ec6f.gif?alt=media&token=3bca60d9-aeff-4163-9f7e-6c673bb63914",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-biceps-curl-7f8e6e3393d2ec6f.gif",
          "verifiedAt": "2026-10-07T23:27:19.492Z"
        },
        "webp": {
          "sha256": "e5816c5a03e09cad0d7d11591b0282a0a1425ca50c62ed5cd9beb66e8d0405f6",
          "bytes": 886740,
          "mimeType": "image/webp",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-biceps-curl-e5816c5a03e09cad.webp?alt=media&token=6e627b5c-7e07-457c-bede-d20b7a879027",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-biceps-curl-e5816c5a03e09cad.webp",
          "verifiedAt": "2026-10-07T22:45:26.210Z"
        },
        "poster": {
          "sha256": "9933419bdf517dd725c34d63cc00683183af5b72e78f189b29da5c96135057a3",
          "bytes": 52404,
          "mimeType": "image/png",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-biceps-curl-9933419bdf517dd7.png?alt=media&token=cc21844d-3e1f-4634-bba1-1de6cd699441",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-biceps-curl-9933419bdf517dd7.png",
          "verifiedAt": "2026-10-07T22:45:25.481Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-deadlift",
      "slug": "dumbbell-deadlift",
      "name": "Dumbbell deadlift",
      "category": "Dumbbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start with two dumbbells on floor outside feet.",
        "Bend hips and knees, grasp handles with straight arms and a neutral back.",
        "Press feet into floor to stand upright holding weights at sides, then lower them along same path.",
        "Hips and shoulders rise together.",
        "Both feet remain planted."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-deadlift-8ae2d261aad8.gif?alt=media&token=518e370d-5b1b-4f74-a5eb-14e34f960ae7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-deadlift-579aa9dcc229.png?alt=media&token=33979451-20b8-48f3-8313-4fd9dfe70c5f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5bab5d570d75afce18b6077912f7135973e0f06b4eef260e56473c1293f05144",
          "bytes": 136865,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-deadlift-5bab5d570d75afce.gif?alt=media&token=2627f0b5-8238-4893-9d77-0e44eef9ed22",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-deadlift-5bab5d570d75afce.gif",
          "verifiedAt": "2026-10-07T23:27:19.346Z"
        },
        "webp": {
          "sha256": "1262a2b1b71fe5fd5a4ab43be7978e6f5218b1dfdd0f4a93cf96f1e93b294741",
          "bytes": 224170,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-deadlift-1262a2b1b71fe5fd.webp?alt=media&token=2c3fcb40-3730-4aa3-a7f5-af80879ef504",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-deadlift-1262a2b1b71fe5fd.webp",
          "verifiedAt": "2026-10-07T22:45:26.661Z"
        },
        "poster": {
          "sha256": "9434135a9990d2cc79ac7917d18a7ba55edc287187f17d374420abd20f14d5b0",
          "bytes": 46427,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-deadlift-9434135a9990d2cc.png?alt=media&token=b5db79b3-64d7-474a-ad3e-09c8b08ef858",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-deadlift-9434135a9990d2cc.png",
          "verifiedAt": "2026-10-07T22:45:26.960Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-floor-press",
      "slug": "dumbbell-floor-press",
      "name": "Dumbbell floor press",
      "category": "Dumbbell foundations",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Supine, knees bent feet planted, one dumbbell in EACH hand.",
        "both upper arms begin lightly touching floor, elbows bent about 90 degrees, forearms vertical.",
        "Press both dumbbells vertically over chest together until elbows almost straight.",
        "Both arms move symmetrically.",
        "Never unilateral."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-floor-press-7a35ed6c1649.gif?alt=media&token=7cd516a8-314d-4e56-803a-c626e3abd30a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-floor-press-8f8a8ad5c6f2.png?alt=media&token=0e4412ff-e59d-499c-90e1-64540faea651",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-floor-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "576d548beecfea0e8b1a46774ccf60a0f2b8b81eae66ce0df7b8e44031c7a79c",
          "bytes": 679926,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-floor-press-576d548beecfea0e.gif?alt=media&token=5329020b-8fc7-49cb-b6fb-e5b9c18e311d",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-floor-press-576d548beecfea0e.gif",
          "verifiedAt": "2026-10-07T23:27:24.108Z"
        },
        "webp": {
          "sha256": "d0121b08eadef3c32560d5dc072e37599512aeb3a5042deee7450536da122fff",
          "bytes": 1098262,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-floor-press-d0121b08eadef3c3.webp?alt=media&token=d4a13ab0-3b9a-42d2-bfd5-054d87dea559",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-floor-press-d0121b08eadef3c3.webp",
          "verifiedAt": "2026-10-07T23:27:40.475Z"
        },
        "poster": {
          "sha256": "d66441aa315d8cf84b843df3e2cd2d2f03bae00f8f0f2ac0f28b3d94dadcf309",
          "bytes": 110636,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-floor-press-d66441aa315d8cf8.png?alt=media&token=a8ed3111-1dcc-471a-a4f6-5d5a9688b1e7",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-floor-press-d66441aa315d8cf8.png",
          "verifiedAt": "2026-10-07T23:27:21.057Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-front-squat",
      "slug": "dumbbell-front-squat",
      "name": "Dumbbell front squat",
      "category": "Dumbbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with one dumbbell racked at each shoulder, elbows comfortably forward.",
        "Squat by bending hips and knees with feet shoulder width, then return to standing.",
        "Heels remain down, torso controlled and both weights stay at shoulders.",
        "This is not a shoulder press."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-front-squat-8f3728d64fe9.gif?alt=media&token=34d5b86b-b4fb-4f2a-a6ba-c45bce7ee20c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-front-squat-7d9956cc6048.png?alt=media&token=d1720c48-a892-42d5-a4d5-7368267bc381",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-front-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "937495410ebf41113d14eda368e1a8e4a0ee0659517725628a6299ee9bc0eabf",
          "bytes": 266498,
          "mimeType": "image/gif",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-front-squat-937495410ebf4111.gif?alt=media&token=89f3070b-70d4-4930-ac4e-ec0ddd48939c",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-front-squat-937495410ebf4111.gif",
          "verifiedAt": "2026-10-07T23:27:24.231Z"
        },
        "webp": {
          "sha256": "0703abb75d720a030305a3118a3dad801f7f020aeda9f089070286b05f28592a",
          "bytes": 413826,
          "mimeType": "image/webp",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-front-squat-0703abb75d720a03.webp?alt=media&token=378ba19b-345e-454e-b117-303663c77c59",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-front-squat-0703abb75d720a03.webp",
          "verifiedAt": "2026-10-07T23:27:33.689Z"
        },
        "poster": {
          "sha256": "ca879637fb0aec95ea2dedd98ce00edbd0ec93ba049f5c2d15b09ed98878f007",
          "bytes": 47065,
          "mimeType": "image/png",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-front-squat-ca879637fb0aec95.png?alt=media&token=f3e56965-91ab-4ee1-8b89-2ed285521e5b",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-front-squat-ca879637fb0aec95.png",
          "verifiedAt": "2026-10-07T23:27:25.735Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-hammer-curl",
      "slug": "dumbbell-hammer-curl",
      "name": "Dumbbell hammer curl",
      "category": "Dumbbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Standing tall with one small dumbbell in each hand, arms at sides, palms facing inward.",
        "Bend both elbows together and curl toward shoulders with neutral wrists, then lower.",
        "Upper arms stay by ribs, torso and feet motionless."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-hammer-curl-f9be19ec5f8d.gif?alt=media&token=dbbc0341-c421-4a13-9f13-10f6aca1966e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-hammer-curl-42a95e4e60ba.png?alt=media&token=d386cc32-3e0d-4622-be9b-f678fe049bab",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-hammer-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7e3c74033c6ca3d665e6d350f9312a09015e4f208f568eb9c66a928bda2c0493",
          "bytes": 276365,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-hammer-curl-7e3c74033c6ca3d6.gif?alt=media&token=cbb9407d-f56b-44e0-843b-df34d64cbedb",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-hammer-curl-7e3c74033c6ca3d6.gif",
          "verifiedAt": "2026-10-07T23:27:32.303Z"
        },
        "webp": {
          "sha256": "c2b5572e9e28a1248a21437386d15165389632465556dfaa32535c122c2800ea",
          "bytes": 446838,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-hammer-curl-c2b5572e9e28a124.webp?alt=media&token=5e87287d-9375-4604-add9-14dd0bf17520",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-hammer-curl-c2b5572e9e28a124.webp",
          "verifiedAt": "2026-10-07T22:45:30.254Z"
        },
        "poster": {
          "sha256": "036df20c100ef3bbbeb9b1f1d4f3d1cf0945c58165a5ca59da670cab6ce139d4",
          "bytes": 46242,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-hammer-curl-036df20c100ef3bb.png?alt=media&token=4a5d538f-7746-4e66-baac-e9706ee6075f",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-hammer-curl-036df20c100ef3bb.png",
          "verifiedAt": "2026-10-07T22:45:29.737Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-incline-bench-press",
      "slug": "dumbbell-incline-bench-press",
      "name": "Dumbbell incline bench press",
      "category": "Dumbbell foundations",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "adjustable-bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie back on a 30-degree incline bench, feet flat, dumbbells beside upper chest.",
        "Press weights upward above chest, then lower with elbows at a comfortable angle to torso.",
        "Head and back stay against pad, no sitting upright or turning into shoulder press."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-incline-bench-press-bab215586a30.gif?alt=media&token=d38ec3f3-ea13-431f-9aee-9459e428fa39",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-incline-bench-press-570367431f64.png?alt=media&token=1296bb3a-a53f-4d78-8eaf-68dfd753eb4b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-incline-bench-press/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 2000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c644ab17cf8ce7e5f1e88e94298568e4f89fd96f55fbbbb86831145c8920c0b7",
          "bytes": 295881,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-incline-bench-press-c644ab17cf8ce7e5.gif?alt=media&token=40d861c8-4f97-41d0-bb0e-a7552cbb9b81",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-incline-bench-press-c644ab17cf8ce7e5.gif",
          "verifiedAt": "2026-10-07T23:27:36.672Z"
        },
        "webp": {
          "sha256": "13bbdb1c9c188623fe9250502498179ffbf9eae476b97aa6cdb712664d3f0d12",
          "bytes": 478524,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-incline-bench-press-13bbdb1c9c188623.webp?alt=media&token=6a95f580-910a-45ad-869c-667e2e423cbd",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-incline-bench-press-13bbdb1c9c188623.webp",
          "verifiedAt": "2026-10-07T22:45:31.060Z"
        },
        "poster": {
          "sha256": "c4850eaaeebb2eb8bf8cc238119c2b1e67d3885166e9a4cac6d771ab7f3fad6f",
          "bytes": 70813,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-incline-bench-press-c4850eaaeebb2eb8.png?alt=media&token=c9c07f95-6d0b-4c92-936c-55a56dc71a3f",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-incline-bench-press-c4850eaaeebb2eb8.png",
          "verifiedAt": "2026-10-07T22:45:31.070Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-lateral-lunge",
      "slug": "dumbbell-lateral-lunge",
      "name": "Dumbbell lateral lunge",
      "category": "Dumbbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold a dumbbell vertically against chest with both hands.",
        "Step right foot sideways, sit hips back over right heel and bend only right knee while left leg stays straight.",
        "Then push back to feet-together standing.",
        "Clearly asymmetric lateral lunge, not a centered wide squat.",
        "Keep dumbbell against chest.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-lateral-lunge-1ac5ae4fd3f4.gif?alt=media&token=64befd52-e265-42e1-82b1-6169b39f8378",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-lateral-lunge-b50fae95a0b0.png?alt=media&token=e7a86a7f-3725-4eaf-8e95-5d6329a87763",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-lateral-lunge/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2100,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "697cd5152d7688badf9fc08aab20fbb037df33e05a67f6c28b5a4fcf65060da5",
          "bytes": 240293,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-lateral-lunge-697cd5152d7688ba.gif?alt=media&token=1a670792-1904-436b-b860-0fbb4fa878a4",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-lateral-lunge-697cd5152d7688ba.gif",
          "verifiedAt": "2026-10-07T23:27:35.341Z"
        },
        "webp": {
          "sha256": "bcced408c33d00a6b0935b7d5219d8a51f3452169e705bc25f1ff49ba6622219",
          "bytes": 401000,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-lateral-lunge-bcced408c33d00a6.webp?alt=media&token=813bd902-4751-4fac-9632-bf1ef143f409",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-lateral-lunge-bcced408c33d00a6.webp",
          "verifiedAt": "2026-10-07T22:45:32.109Z"
        },
        "poster": {
          "sha256": "76a542a8d1be8bfa913728adaab99a36cd142ff7d85a07f1192f2c1516368955",
          "bytes": 43006,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-lateral-lunge-76a542a8d1be8bfa.png?alt=media&token=4cd0db3a-f27f-40e6-b995-df1bad7aaa0c",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-lateral-lunge-76a542a8d1be8bfa.png",
          "verifiedAt": "2026-10-07T22:45:31.773Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-lateral-raise",
      "slug": "dumbbell-lateral-raise",
      "name": "Dumbbell lateral raise",
      "category": "Dumbbell accessories",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Dumbbell lateral raise.",
        "Stand upright with feet hip-width and a small charcoal dumbbell in each hand beside the thighs, palms toward the body.",
        "With elbows softly bent, raise both arms out to the sides until approximately shoulder height; lower along the same path.",
        "Keep shoulders down, wrists aligned, hands slightly in front of the shoulder plane, torso and feet still.",
        "Do not shrug, swing or lift above shoulder height.",
        "Equipment moves with hands and keeps identical shape."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-lateral-raise-915bce6f0e35.gif?alt=media&token=4c614710-5739-4524-938a-8f13590349ba",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-lateral-raise-3756167a67db.png?alt=media&token=beb255ac-db7e-47ac-9e3a-2aa7595747be",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-lateral-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "684e0963f5a18fb0ab8df83890d2a237caa3255674e449ca8bd7c795a5ae31d2",
          "bytes": 329856,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-lateral-raise-684e0963f5a18fb0.gif?alt=media&token=472d7f77-d71e-468e-a24b-4d533956cfb8",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-lateral-raise-684e0963f5a18fb0.gif",
          "verifiedAt": "2026-10-07T23:27:37.572Z"
        },
        "webp": {
          "sha256": "9ef0ac6cbc98eaaa8991952a4f40118f07ccfb3c4991541f49aee50f71936bd5",
          "bytes": 519692,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-lateral-raise-9ef0ac6cbc98eaaa.webp?alt=media&token=74aa889c-cb49-4cd6-b3ee-b3e379778305",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-lateral-raise-9ef0ac6cbc98eaaa.webp",
          "verifiedAt": "2026-10-07T22:45:33.425Z"
        },
        "poster": {
          "sha256": "8ebd2fb83dab5ea025785c86301a47b197c1676c300e1dd861eaac2989bf39c8",
          "bytes": 48932,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-lateral-raise-8ebd2fb83dab5ea0.png?alt=media&token=5afd8353-636f-4656-a174-656c09eb589d",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-lateral-raise-8ebd2fb83dab5ea0.png",
          "verifiedAt": "2026-10-07T22:45:32.907Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-overhead-triceps-extension",
      "slug": "dumbbell-overhead-triceps-extension",
      "name": "Dumbbell overhead triceps extension",
      "category": "Dumbbell accessories",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with feet planted.",
        "Hold ONE dumbbell vertically with both hands cupping its upper end overhead.",
        "Keeping upper arms beside ears, bend elbows to lower the dumbbell behind the head, then straighten elbows overhead.",
        "Show clear elbows, no shoulder press or moving feet."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-overhead-triceps-extension-0d04222e9d3d.gif?alt=media&token=46e7abd1-3e1b-4155-9c4f-9b926993e581",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-overhead-triceps-extension-c2ee9b30283f.png?alt=media&token=2aa0e883-dce7-48ab-af90-5e0010d8b5fc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-overhead-triceps-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ea194576d6a1b38adceb3f53955ea1196fb17edd34bb45c9da86cae4e40632bc",
          "bytes": 216276,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-overhead-triceps-extension-ea194576d6a1b38a.gif?alt=media&token=4cbf5833-fcd4-4ed9-8b7d-b6106815e885",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-overhead-triceps-extension-ea194576d6a1b38a.gif",
          "verifiedAt": "2026-10-07T23:27:40.992Z"
        },
        "webp": {
          "sha256": "50b17c4ce89c3fc6ebc1e12f9b44f14e2083a7ecc0cdddbbe81ffed10cd43232",
          "bytes": 342280,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-overhead-triceps-extension-50b17c4ce89c3fc6.webp?alt=media&token=02f7d9d7-6464-4a22-93ea-94545889fb5b",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-overhead-triceps-extension-50b17c4ce89c3fc6.webp",
          "verifiedAt": "2026-10-07T23:27:40.984Z"
        },
        "poster": {
          "sha256": "fb1107875cc5727225c33637f716315170ec4a5dc97821983f22197f30c9643b",
          "bytes": 36913,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-overhead-triceps-extension-fb1107875cc57272.png?alt=media&token=b94d1211-c1e0-47d4-aa05-c910d5e3ff87",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-overhead-triceps-extension-fb1107875cc57272.png",
          "verifiedAt": "2026-10-07T23:27:42.993Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-reverse-fly",
      "slug": "dumbbell-reverse-fly",
      "name": "Dumbbell reverse fly",
      "category": "Dumbbell accessories",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "With feet hip width, knees soft and torso hinged forward, hold two dumbbells below shoulders.",
        "Keeping a slight fixed elbow bend, raise arms outward to either side to about torso height, then lower.",
        "Back stays neutral, no standing up or shrugging."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-reverse-fly-c90a885f57b0.gif?alt=media&token=d62c0306-4ee6-4019-9d1c-28206b3efa35",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-reverse-fly-9d65468ec259.png?alt=media&token=9b18c284-4651-4764-a813-7ee1d4e38370",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-reverse-fly/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "673b26873897c101de90ceab3aab6195233c0b098d6ed6be8efce8f671772763",
          "bytes": 350721,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-reverse-fly-673b26873897c101.gif?alt=media&token=522e2bb0-d7b5-44b0-85b8-40bfda7302a4",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-reverse-fly-673b26873897c101.gif",
          "verifiedAt": "2026-10-07T23:27:51.728Z"
        },
        "webp": {
          "sha256": "d025e3cad02a8bc3d1836218e848c938135ce54d064fed7cb8a61d76be07393a",
          "bytes": 556924,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-reverse-fly-d025e3cad02a8bc3.webp?alt=media&token=739fca20-284e-409c-b780-debb10bc14b3",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-reverse-fly-d025e3cad02a8bc3.webp",
          "verifiedAt": "2026-10-07T22:45:35.652Z"
        },
        "poster": {
          "sha256": "72f0333309d728c23e1703db36ecf8f50f2082bea5c908b7fcebf23fb64a2d76",
          "bytes": 51841,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-reverse-fly-72f0333309d728c2.png?alt=media&token=b5a3241c-10dd-4fd4-b539-adb03c5a8b9b",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-reverse-fly-72f0333309d728c2.png",
          "verifiedAt": "2026-10-07T22:45:35.100Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-reverse-lunge",
      "slug": "dumbbell-reverse-lunge",
      "name": "Dumbbell reverse lunge",
      "category": "Dumbbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand holding one dumbbell at each side with arms straight.",
        "Step one foot backward, bend both knees to lower into a reverse lunge, then drive through the front foot to return standing.",
        "Keep front heel down, trunk steady and weights beside hips.",
        "Same working leg throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-reverse-lunge-d65277e10549.gif?alt=media&token=4e1954a2-6c8f-40ee-8f91-c0c4b8b571cb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-reverse-lunge-57c5a91a6e97.png?alt=media&token=e1395e8f-366c-4776-9642-d3a0cd81f162",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-reverse-lunge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d10d2af4282164d41aa7db62187ed2416b6fead63324239186822ae60eaf3469",
          "bytes": 270541,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-reverse-lunge-d10d2af4282164d4.gif?alt=media&token=f8b2a0dd-4a3e-4e66-8c63-9b9b22202b7c",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-reverse-lunge-d10d2af4282164d4.gif",
          "verifiedAt": "2026-10-07T23:27:51.302Z"
        },
        "webp": {
          "sha256": "12a3f4c7932105c48457a34cf5861fe67ed08c3a91a43bbd42456707f7d560c1",
          "bytes": 445836,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-reverse-lunge-12a3f4c7932105c4.webp?alt=media&token=bb781e8e-d5b9-4cc9-b047-1d3e28e2afd2",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-reverse-lunge-12a3f4c7932105c4.webp",
          "verifiedAt": "2026-10-07T22:45:36.497Z"
        },
        "poster": {
          "sha256": "529d334f24f18f4df5e07047451a2e9a4414621a94618cffa1cbe3eb8fae24ce",
          "bytes": 45051,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-reverse-lunge-529d334f24f18f4d.png?alt=media&token=4030d914-b897-480b-8ce8-c6877bc9f0c0",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-reverse-lunge-529d334f24f18f4d.png",
          "verifiedAt": "2026-10-07T22:45:36.217Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-romanian-deadlift",
      "slug": "dumbbell-romanian-deadlift",
      "name": "Dumbbell Romanian deadlift",
      "category": "Dumbbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand holding two dumbbells in front of thighs, feet hip width.",
        "With a small fixed knee bend, push hips backward and hinge torso forward as weights track close to legs toward mid-shin.",
        "Keep back neutral.",
        "Extend hips to stand.",
        "Arms stay straight and knees do not turn this into a squat."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-romanian-deadlift-1195cf820e14.gif?alt=media&token=c368b9c6-0370-4532-b6e4-44bb13c4d763",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-romanian-deadlift-cca6dd3c8858.png?alt=media&token=ad229f43-d584-489d-a6bf-f1b296156d5e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-romanian-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bd3bd9b4e89b9f6f40b1575d1f76546e64798a566629abd1c92d149fab65ddcd",
          "bytes": 245811,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-romanian-deadlift-bd3bd9b4e89b9f6f.gif?alt=media&token=eacfb08d-ab77-41ed-b58c-0d12d6af8926",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-romanian-deadlift-bd3bd9b4e89b9f6f.gif",
          "verifiedAt": "2026-10-07T23:27:54.661Z"
        },
        "webp": {
          "sha256": "96359ee2a4ef732fbab9bad1954b15bba38ba4c4763d03f87270659289bb10e5",
          "bytes": 390148,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-romanian-deadlift-96359ee2a4ef732f.webp?alt=media&token=c674a2ff-e2ac-481c-a443-b7ee733be275",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-romanian-deadlift-96359ee2a4ef732f.webp",
          "verifiedAt": "2026-10-07T22:45:37.510Z"
        },
        "poster": {
          "sha256": "b11674bf0d835445df4955edd10ac71d1e649aed591d68e56b49037049d8b6df",
          "bytes": 41564,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-romanian-deadlift-b11674bf0d835445.png?alt=media&token=4727fee9-822c-4d8e-82db-5c52dc05f2ae",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-romanian-deadlift-b11674bf0d835445.png",
          "verifiedAt": "2026-10-07T22:45:37.211Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-shrug",
      "slug": "dumbbell-shrug",
      "name": "Dumbbell shrug",
      "category": "Dumbbell accessories",
      "target": "traps",
      "bodyPart": "back",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall holding dumbbells at sides with straight arms.",
        "Raise shoulders gently toward ears, then lower to neutral.",
        "Do not bend elbows or roll shoulders.",
        "Head and torso stay upright, movement is small and controlled."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-shrug-b7fe76b057a8.gif?alt=media&token=0a3385bf-bbae-4e99-ad15-bca1ccb9e87e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-shrug-128f252306c3.png?alt=media&token=3ebacdf6-3258-4239-a8c4-74686bd9f02d",
      "aliases": [
        "dumbbell shrug"
      ],
      "legacyIds": [
        "0406"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-shrug/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c749a845604d895454bfff78bc5b4f54e7c53a16d30347882468c4a17204fc60",
          "bytes": 296609,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-shrug-c749a845604d8954.gif?alt=media&token=b44a94d8-73ee-4419-af55-602b0373ac7f",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-shrug-c749a845604d8954.gif",
          "verifiedAt": "2026-10-07T23:27:54.881Z"
        },
        "webp": {
          "sha256": "2c9e3cef49bc8e81909cdc6407e92a95aa6a20ff65c9dad687b980c51d63e722",
          "bytes": 471812,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-shrug-2c9e3cef49bc8e81.webp?alt=media&token=50b79d8d-212a-4912-8040-554f677ebf52",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-shrug-2c9e3cef49bc8e81.webp",
          "verifiedAt": "2026-10-07T22:45:38.335Z"
        },
        "poster": {
          "sha256": "120dc2dcece4d72c679b26dbc4ccc9426d47830dc29054e53787cad490e70b09",
          "bytes": 47097,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-shrug-120dc2dcece4d72c.png?alt=media&token=bdcc9ff4-22c1-4690-984f-4f3cf0917bae",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-shrug-120dc2dcece4d72c.png",
          "verifiedAt": "2026-10-07T22:45:38.062Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-single-leg-romanian-deadlift",
      "slug": "dumbbell-single-leg-romanian-deadlift",
      "name": "Dumbbell single-leg Romanian deadlift",
      "category": "Dumbbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold a dumbbell in each hand and balance on one foot with knee slightly bent.",
        "Hinge at supporting hip, reach the other leg straight backward as torso inclines forward and weights lower beneath shoulders.",
        "Return upright on same supporting leg.",
        "Keep hips square and back neutral, no twisting."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-single-leg-romanian-deadlift-dd8f99b51e80.gif?alt=media&token=04c081ff-881f-4ae5-a4ae-856f7c08cf34",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-single-leg-romanian-deadlift-05d0d06d67ba.png?alt=media&token=cd946b17-9379-42f8-97d6-1c2a33f4af10",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-single-leg-romanian-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4b3c855ce1386a09c405cc96434e753a8070a1592b2b78f08350b5d93b85e7e8",
          "bytes": 275044,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-single-leg-romanian-deadlift-4b3c855ce1386a09.gif?alt=media&token=acdfe0c4-3c8d-4066-b991-0bebb5a26081",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-single-leg-romanian-deadlift-4b3c855ce1386a09.gif",
          "verifiedAt": "2026-10-07T23:27:53.501Z"
        },
        "webp": {
          "sha256": "fc5280e6dfc83913053fcf8f1f114f04f365bde39f91d2655c0c44596e31c079",
          "bytes": 442844,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-single-leg-romanian-deadlift-fc5280e6dfc83913.webp?alt=media&token=04748704-2d51-48d6-ae6b-8445ecc3aee2",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-single-leg-romanian-deadlift-fc5280e6dfc83913.webp",
          "verifiedAt": "2026-10-07T22:45:39.104Z"
        },
        "poster": {
          "sha256": "2d0f3ca2c9e81bc792e9814f4b02e978443ddc5a24a2272aac7c45dfa9c5a2b6",
          "bytes": 43827,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-single-leg-romanian-deadlift-2d0f3ca2c9e81bc7.png?alt=media&token=ef2953bf-bfab-48e1-b600-94d8e1564794",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-single-leg-romanian-deadlift-2d0f3ca2c9e81bc7.png",
          "verifiedAt": "2026-10-07T22:45:38.942Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-split-squat",
      "slug": "dumbbell-split-squat",
      "name": "Dumbbell split squat",
      "category": "Dumbbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold two dumbbells at sides in a fixed staggered stance, front foot flat and rear heel raised.",
        "Bend both knees to lower rear knee toward floor, then rise vertically.",
        "Do not step or switch legs.",
        "Weights hang by the sides with straight arms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-split-squat-8b04404c3391.gif?alt=media&token=7dcd7e4a-a918-4398-ba32-a7d09e1530d6",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-split-squat-1a156e74d036.png?alt=media&token=7ba53a49-62f2-4fff-be85-e49fba887548",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-split-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "1efc56cdd6ded7002e25593fe44afdb9c9abf6b1226cb8c1a6bf9b6b3bd3fa6c",
          "bytes": 294053,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-split-squat-1efc56cdd6ded700.gif?alt=media&token=ae3bfb17-e67d-4eef-ae97-dd50c4a898c3",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-split-squat-1efc56cdd6ded700.gif",
          "verifiedAt": "2026-10-07T23:27:54.856Z"
        },
        "webp": {
          "sha256": "e21403b1b1ca250ee98cfed6588656ae052c792170c1fc0b65f67a476439e888",
          "bytes": 470122,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-split-squat-e21403b1b1ca250e.webp?alt=media&token=5768b52f-57ac-4810-b273-19db91a87d95",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-split-squat-e21403b1b1ca250e.webp",
          "verifiedAt": "2026-10-07T22:45:39.914Z"
        },
        "poster": {
          "sha256": "6d94b5a72a882bfdb95880401359e05d9d681be5b09852faad62ce8f5b80d1ad",
          "bytes": 47967,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-split-squat-6d94b5a72a882bfd.png?alt=media&token=641015de-c509-440b-b6a4-72557fea7675",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-split-squat-6d94b5a72a882bfd.png",
          "verifiedAt": "2026-10-07T22:45:40.731Z"
        }
      }
    },
    {
      "id": "trainai-dumbbell-triceps-kickback",
      "slug": "dumbbell-triceps-kickback",
      "name": "Dumbbell triceps kickback",
      "category": "Dumbbell accessories",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hip hinge with neutral back, knees soft, both upper arms held parallel to torso and horizontal, elbows beside ribs.",
        "Start elbows bent 90 degrees with dumbbells below elbows; straighten both elbows backward until arms align with torso.",
        "Shoulders and upper arms remain completely still.",
        "Only forearms rotate about elbows."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-triceps-kickback-131b6c28fd69.gif?alt=media&token=9e090be5-60ad-472b-bcff-4e8272224823",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-dumbbell-triceps-kickback-3c2169d58ee2.png?alt=media&token=cd838a35-1520-4c75-9e65-29edfe1c04be",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/dumbbell-triceps-kickback/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4e6ccb050deac6e1ce1f95dc88568d2c7edcf6cf7d9a48f220995c3e143ef8f2",
          "bytes": 488373,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-triceps-kickback-4e6ccb050deac6e1.gif?alt=media&token=493ad00d-c6a1-48b5-92e8-7a2f90eaeaf9",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-triceps-kickback-4e6ccb050deac6e1.gif",
          "verifiedAt": "2026-10-07T23:28:04.431Z"
        },
        "webp": {
          "sha256": "af85f8bd78c5e2dc4a3da35c9113e55080ec59e72270fac79904939f5f462343",
          "bytes": 774804,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-triceps-kickback-af85f8bd78c5e2dc.webp?alt=media&token=4569dec7-f75b-4728-969f-3c95e2b60c95",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-triceps-kickback-af85f8bd78c5e2dc.webp",
          "verifiedAt": "2026-10-07T23:28:08.643Z"
        },
        "poster": {
          "sha256": "02314d0f33782f3904d219c88cd6f02c29613fe7146aa65217ae2740c343819c",
          "bytes": 81907,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-dumbbell-triceps-kickback-02314d0f33782f39.png?alt=media&token=ec1abf7f-3209-4fc6-9dc3-4f5c62914f51",
          "name": "trainai/creator-media/2026-10-07/trainai-dumbbell-triceps-kickback-02314d0f33782f39.png",
          "verifiedAt": "2026-10-07T23:27:56.978Z"
        }
      }
    },
    {
      "id": "trainai-elliptical-trainer",
      "slug": "elliptical-trainer",
      "name": "Elliptical trainer",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "elliptical",
      "requiredEquipment": [
        "elliptical"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Step onto the elliptical with both feet securely on the pedals.",
        "Move the legs in a smooth alternating cycle while using the handles as intended.",
        "Keep your torso upright and avoid bouncing or lifting the feet off the pedals."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-elliptical-trainer-e92d6b5b306f.gif?alt=media&token=8ede37e9-f992-45b4-8cdc-8dd91773e175",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-elliptical-trainer-f607a93106b8.png?alt=media&token=329abcd2-2bfe-4978-85fa-70d3c8b305b5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/elliptical-trainer/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "1439239f905efa7050b7416ecbc6a4dfde39f97dee52c0f1c5807adc0b6e86fb",
          "bytes": 298802,
          "mimeType": "image/gif",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-elliptical-trainer-1439239f905efa70.gif?alt=media&token=8e855a2c-ad68-4bc8-92f0-fb0e4ad7af67",
          "name": "trainai/creator-media/2026-10-07/trainai-elliptical-trainer-1439239f905efa70.gif",
          "verifiedAt": "2026-10-07T23:27:59.024Z"
        },
        "webp": {
          "sha256": "c158950ec4838d8b5d98ef92ed174704c0ea01c761bc4127d14100f049253302",
          "bytes": 455898,
          "mimeType": "image/webp",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-elliptical-trainer-c158950ec4838d8b.webp?alt=media&token=1d4ea7dc-da3a-4529-81b8-f33252655c94",
          "name": "trainai/creator-media/2026-10-07/trainai-elliptical-trainer-c158950ec4838d8b.webp",
          "verifiedAt": "2026-10-07T23:28:04.514Z"
        },
        "poster": {
          "sha256": "fb32e0fce0770a677a43ec80ff6633b64be99a16e9149b853827c73eb569cd6c",
          "bytes": 96426,
          "mimeType": "image/png",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-elliptical-trainer-fb32e0fce0770a67.png?alt=media&token=7a654b4a-7cc4-422b-8b1b-9d3da70b38ad",
          "name": "trainai/creator-media/2026-10-07/trainai-elliptical-trainer-fb32e0fce0770a67.png",
          "verifiedAt": "2026-10-07T23:28:05.935Z"
        }
      }
    },
    {
      "id": "trainai-ez-bar-lying-triceps-extension",
      "slug": "ez-bar-lying-triceps-extension",
      "name": "EZ-bar lying triceps extension",
      "category": "Barbell accessories",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "ez barbell",
      "requiredEquipment": [
        "ez-bar",
        "plates",
        "bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on fixed flat bench, feet planted.",
        "Hold a light angled EZ curl bar above shoulders in both hands, arms nearly vertical.",
        "Bend only elbows to lower bar toward just above forehead, then straighten elbows.",
        "Upper arms remain nearly vertical, no shoulder press, no contact with head.",
        "Bench remains fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-ez-bar-lying-triceps-extension-bda1f39e653c.gif?alt=media&token=70f19cc6-4b43-47a2-9008-da339fc890a1",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-ez-bar-lying-triceps-extension-6477388723a3.png?alt=media&token=512d2a91-b9ec-413b-bb1e-1c0777b14d89",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/ez-bar-lying-triceps-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d0fbb276f23837698059a1b605637911aa35784cc9cc1f73f1664f988f898a35",
          "bytes": 373609,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-ez-bar-lying-triceps-extension-d0fbb276f2383769.gif?alt=media&token=6cf77e63-3cf9-422a-b854-41073cda5fcb",
          "name": "trainai/creator-media/2026-10-07/trainai-ez-bar-lying-triceps-extension-d0fbb276f2383769.gif",
          "verifiedAt": "2026-10-07T23:28:06.779Z"
        },
        "webp": {
          "sha256": "6c5c7723e2099936ffa0ac7b0be9cc2502085b6b2650955cf2ccac279ad6af59",
          "bytes": 588426,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-ez-bar-lying-triceps-extension-6c5c7723e2099936.webp?alt=media&token=885ae0b3-bc7c-423c-a0da-272202eba85c",
          "name": "trainai/creator-media/2026-10-07/trainai-ez-bar-lying-triceps-extension-6c5c7723e2099936.webp",
          "verifiedAt": "2026-10-07T23:28:10.677Z"
        },
        "poster": {
          "sha256": "533f1f30cc407e868ebd136ca5e091d8fd378539af5cdb980a629f555ef24119",
          "bytes": 72822,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-ez-bar-lying-triceps-extension-533f1f30cc407e86.png?alt=media&token=b997d268-5d76-4179-9f54-d16ba2b77a02",
          "name": "trainai/creator-media/2026-10-07/trainai-ez-bar-lying-triceps-extension-533f1f30cc407e86.png",
          "verifiedAt": "2026-10-07T23:28:08.087Z"
        }
      }
    },
    {
      "id": "trainai-farmer-carry",
      "slug": "farmer-carry",
      "name": "Farmer carry",
      "category": "Dumbbell accessories",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "walking-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Walk with one dumbbell hanging from EACH hand, elbows long, shoulders level, torso tall.",
        "Alternate normal walking steps, both weights stable close to sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-farmer-carry-f305c658f99a.gif?alt=media&token=3919f651-9de9-495b-9d89-dbbb301d166a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-farmer-carry-d5bfafd9a79a.png?alt=media&token=ca4b55d2-6e77-468d-8e50-68ef9d0e384b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/farmer-carry/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ffa5e99d2e557baa20f04d7e948b8d96ea308b69880cd719c03a6b2e16b6562d",
          "bytes": 222004,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-farmer-carry-ffa5e99d2e557baa.gif?alt=media&token=9b32f1d7-ab85-45cc-b75b-d6193ea3a2ed",
          "name": "trainai/creator-media/2026-10-07/trainai-farmer-carry-ffa5e99d2e557baa.gif",
          "verifiedAt": "2026-10-07T23:28:11.923Z"
        },
        "webp": {
          "sha256": "7bab32a42de9e6747b112884f2dc16bcc3e9ff58b47dd958ad73caa262925216",
          "bytes": 345534,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-farmer-carry-7bab32a42de9e674.webp?alt=media&token=840be89d-88a5-4ea2-a328-2a208f711531",
          "name": "trainai/creator-media/2026-10-07/trainai-farmer-carry-7bab32a42de9e674.webp",
          "verifiedAt": "2026-10-07T23:28:15.373Z"
        },
        "poster": {
          "sha256": "f2c40db70b082590683d6075cdb4e9a00263e9ecd84080d209809eb4633440e7",
          "bytes": 75768,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-farmer-carry-f2c40db70b082590.png?alt=media&token=d09946e7-3757-44c0-b0dc-13041658d313",
          "name": "trainai/creator-media/2026-10-07/trainai-farmer-carry-f2c40db70b082590.png",
          "verifiedAt": "2026-10-07T23:28:11.556Z"
        }
      }
    },
    {
      "id": "trainai-forearm-plank",
      "slug": "forearm-plank",
      "name": "Forearm plank",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Begin on forearms and knees, elbows beneath shoulders.",
        "Extend both legs to a forearm plank on toes, body in one straight line from head to heels.",
        "Hold still, then gently return knees to floor.",
        "Forearms remain down; this is not a push-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-forearm-plank-b31257f06d34.gif?alt=media&token=d79f227a-442e-4af3-8976-cee8e5bc0dc0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-forearm-plank-ae60c7784310.png?alt=media&token=d4f20242-0288-4e10-9e47-b3786ffa7875",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/forearm-plank/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ba1f71356fbbda2fda3808e88e6ac8c9dfe3af930297bb67a68dc90b7a6e8841",
          "bytes": 199334,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-forearm-plank-ba1f71356fbbda2f.gif?alt=media&token=abf9279c-c754-4d5f-828b-10ccc346d9e2",
          "name": "trainai/creator-media/2026-10-07/trainai-forearm-plank-ba1f71356fbbda2f.gif",
          "verifiedAt": "2026-10-07T23:28:17.034Z"
        },
        "webp": {
          "sha256": "5602fa69fc76d205a09064377637c91a30add2643ad6c930e99ac4ce0db0d1c9",
          "bytes": 314338,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-forearm-plank-5602fa69fc76d205.webp?alt=media&token=ef04decf-451a-4e11-8179-7063a639bd7e",
          "name": "trainai/creator-media/2026-10-07/trainai-forearm-plank-5602fa69fc76d205.webp",
          "verifiedAt": "2026-10-07T23:28:17.011Z"
        },
        "poster": {
          "sha256": "c1fc6a2e3ad66670298d664c347341c8ee930ee73dc6a979d5f262938dda0678",
          "bytes": 63911,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-forearm-plank-c1fc6a2e3ad66670.png?alt=media&token=ac196fa2-554a-4a8f-b828-241e5d7bda71",
          "name": "trainai/creator-media/2026-10-07/trainai-forearm-plank-c1fc6a2e3ad66670.png",
          "verifiedAt": "2026-10-07T23:28:17.329Z"
        }
      }
    },
    {
      "id": "trainai-forward-lunge",
      "slug": "forward-lunge",
      "name": "Forward lunge",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Forward lunge, hands on hips.",
        "Start standing feet hip-width.",
        "Step the right foot forward, bend both knees into a controlled lunge with left rear knee just above floor.",
        "Press through right foot to step back to upright feet-together start.",
        "Neutral torso, front knee follows toe direction, rear heel naturally raised during lunge.",
        "One side only, no jump.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-forward-lunge-f8aef10b6773.gif?alt=media&token=73e360ce-6650-4941-a845-90ea6a7db863",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-forward-lunge-ea91afac8a8d.png?alt=media&token=bb091779-d37e-40e1-ac18-6a0aa31b691f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/forward-lunge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3e2eaaf8d50a65176ffd2047ad71bd10452ad3d2193f6896b6da87f1f833166f",
          "bytes": 265071,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-forward-lunge-3e2eaaf8d50a6517.gif?alt=media&token=481f1c85-c0a2-421e-9b67-72ffea740c63",
          "name": "trainai/creator-media/2026-10-07/trainai-forward-lunge-3e2eaaf8d50a6517.gif",
          "verifiedAt": "2026-10-07T23:28:20.007Z"
        },
        "webp": {
          "sha256": "53e132b0c3b0dcecef28e122052b2d38851c6ecf8a099841544878c5da7ce92b",
          "bytes": 444218,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-forward-lunge-53e132b0c3b0dcec.webp?alt=media&token=0ed45217-c591-4d35-8fea-2c25d58a92cc",
          "name": "trainai/creator-media/2026-10-07/trainai-forward-lunge-53e132b0c3b0dcec.webp",
          "verifiedAt": "2026-10-07T23:28:20.709Z"
        },
        "poster": {
          "sha256": "661067ba3b5e21c4cdc5da9a7ff595f8d2851de0fc1a79920166ea32691cd364",
          "bytes": 44542,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-forward-lunge-661067ba3b5e21c4.png?alt=media&token=1e012d3c-8b69-40c9-9c45-1ee222068b63",
          "name": "trainai/creator-media/2026-10-07/trainai-forward-lunge-661067ba3b5e21c4.png",
          "verifiedAt": "2026-10-07T23:28:18.341Z"
        }
      }
    },
    {
      "id": "trainai-frog-pump",
      "slug": "frog-pump",
      "name": "Frog pump",
      "category": "Home foundations",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on back, knees bent and opened outward, soles of feet touching each other.",
        "Keeping the soles together, squeeze glutes to raise hips a modest distance, then lower them.",
        "Arms rest alongside body; head and shoulders remain down.",
        "Knees remain comfortably open throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-frog-pump-1c42e5bdfd74.gif?alt=media&token=40ab9bfa-7d69-4c07-8e21-f38ffb26dd55",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-frog-pump-829538aa280e.png?alt=media&token=416c30cf-5684-4161-9003-a63ba801d72d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/frog-pump/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4031da839f9da2a215eb6bb8e2718cd36b314f15a847e1ff1e2bcdf26bbca4c9",
          "bytes": 361409,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-frog-pump-4031da839f9da2a2.gif?alt=media&token=0db5f0f9-6c1c-43c5-aed3-32dfdf134e56",
          "name": "trainai/creator-media/2026-10-07/trainai-frog-pump-4031da839f9da2a2.gif",
          "verifiedAt": "2026-10-07T23:28:23.363Z"
        },
        "webp": {
          "sha256": "28f8936d52ad90e84194573cd06550ee9f2941f2bc1b90b45530826c422c96c4",
          "bytes": 588784,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-frog-pump-28f8936d52ad90e8.webp?alt=media&token=d0162a18-ffcf-4d66-8189-39d9b134a6fe",
          "name": "trainai/creator-media/2026-10-07/trainai-frog-pump-28f8936d52ad90e8.webp",
          "verifiedAt": "2026-10-07T22:45:47.427Z"
        },
        "poster": {
          "sha256": "5a34664217b5470f768c0d737ccc6739f191892154f4f1658a60c97daed1c1ca",
          "bytes": 60367,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-frog-pump-5a34664217b5470f.png?alt=media&token=ca31caea-b8f6-41f9-97e7-81b819a48b49",
          "name": "trainai/creator-media/2026-10-07/trainai-frog-pump-5a34664217b5470f.png",
          "verifiedAt": "2026-10-07T22:45:46.964Z"
        }
      }
    },
    {
      "id": "trainai-glute-bridge",
      "slug": "glute-bridge",
      "name": "Glute bridge",
      "category": "Home foundations",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Supine glute bridge.",
        "Lie on the back with knees bent, both soles planted hip-width apart near the hips, arms on floor beside the body.",
        "Smoothly raise the hips until shoulders, hips and knees form a straight diagonal; lower the pelvis to the start.",
        "Keep shoulders, head, arms and both feet fixed against the same invisible floor plane.",
        "No back overextension.",
        "Move through one lift and lower, not a sit-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-glute-bridge-2c0d3d4dd44a.gif?alt=media&token=728b8398-c872-4716-a7e5-84d6e8b9349b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-glute-bridge-227d5b53e06d.png?alt=media&token=656044b7-add5-4b65-a24e-d7393cb17391",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/glute-bridge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d2a60dad8b66fc3f1bb08199202187c8baf51d75b21ad6ee2314d5a69bab45e6",
          "bytes": 338379,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-bridge-d2a60dad8b66fc3f.gif?alt=media&token=0ec957db-5832-4e68-8eaa-8c2e35728c53",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-bridge-d2a60dad8b66fc3f.gif",
          "verifiedAt": "2026-10-07T23:28:23.782Z"
        },
        "webp": {
          "sha256": "1501bcd1e4c204bbab5f7d72536b31a36f4625b1bda34b33df63c3d03b6e3209",
          "bytes": 554968,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-bridge-1501bcd1e4c204bb.webp?alt=media&token=7473d45a-85b9-43be-a48d-57600aee3ad7",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-bridge-1501bcd1e4c204bb.webp",
          "verifiedAt": "2026-10-07T22:45:48.883Z"
        },
        "poster": {
          "sha256": "d0fff69856ff78e5b5d55592862e11cd6aae380fbd83ea9e5548376aa3f02fd4",
          "bytes": 53902,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-bridge-d0fff69856ff78e5.png?alt=media&token=1bf8a141-872e-47fb-b32b-e4f11440f171",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-bridge-d0fff69856ff78e5.png",
          "verifiedAt": "2026-10-07T22:45:48.423Z"
        }
      }
    },
    {
      "id": "trainai-glute-bridge-march",
      "slug": "glute-bridge-march",
      "name": "Glute bridge march",
      "category": "Core",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Begin in a glute bridge with shoulders resting down, hips raised and both feet planted, knees bent.",
        "Keeping hips raised and level, lift one foot slightly, replace it, then lift and replace the other foot.",
        "Arms rest beside body; no large hip drop."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-glute-bridge-march-2015800b56e9.gif?alt=media&token=962e3b4c-2b0f-4b1a-bc29-d4b0b340ecc0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-glute-bridge-march-012fda037e37.png?alt=media&token=7d6075ce-7e44-47d6-8210-1a5e9ad7002f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/glute-bridge-march/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "20c0e174ab19c1d61c079312c81316b3eabc4916f9338bdccd9a9cff59f3da7d",
          "bytes": 346595,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-bridge-march-20c0e174ab19c1d6.gif?alt=media&token=d2792eb4-1424-42bd-800d-efcbc761f62b",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-bridge-march-20c0e174ab19c1d6.gif",
          "verifiedAt": "2026-10-07T23:28:26.744Z"
        },
        "webp": {
          "sha256": "d1ba1b34cf0fc74d31cc7dd6e888ae03eaa1cdb511ec72d0ed63ec04fa34ae18",
          "bytes": 568530,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-bridge-march-d1ba1b34cf0fc74d.webp?alt=media&token=a4e7ab44-6b69-4a93-ba17-75c5ba5d110b",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-bridge-march-d1ba1b34cf0fc74d.webp",
          "verifiedAt": "2026-10-07T22:45:50.176Z"
        },
        "poster": {
          "sha256": "833e9ccc6a67e64aff9747c4a721eb6348adea316a418e9f70cb84e4f5ed3c6b",
          "bytes": 53338,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-bridge-march-833e9ccc6a67e64a.png?alt=media&token=ff72ba0e-b205-4db7-8a56-de9bb73dd5ff",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-bridge-march-833e9ccc6a67e64a.png",
          "verifiedAt": "2026-10-07T22:45:49.664Z"
        }
      }
    },
    {
      "id": "trainai-glute-foam-roll",
      "slug": "glute-foam-roll",
      "name": "Glute foam roll",
      "category": "Soft-tissue adjuncts",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "recovery",
      "measurement": "duration",
      "instructions": [
        "Sit with right buttock on orange foam roller, right ankle crossed over left knee, left foot planted and both hands on floor behind.",
        "Lean slightly onto right glute and roll a few centimeters forward/back slowly.",
        "Keep roller beneath buttock, no low-back rolling.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-glute-foam-roll-f8fe4bea6eb2.gif?alt=media&token=35eab63f-fb70-4aab-ae04-96f3129f019f",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-glute-foam-roll-9bb2fad63243.png?alt=media&token=01aaadef-0234-4020-8104-3588614c5ad8",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/glute-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ff1812b8e277f0a61829768e3bfe4290e206b5a0cfcf635ea289f29d64eb3a57",
          "bytes": 735274,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-foam-roll-ff1812b8e277f0a6.gif?alt=media&token=d9cf21e0-b860-43f5-8b07-f1e4387fcd14",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-foam-roll-ff1812b8e277f0a6.gif",
          "verifiedAt": "2026-10-07T23:28:37.086Z"
        },
        "webp": {
          "sha256": "c364bba4d6f3230b8a5a5814b14fd147a67d8127700b1dd86d054a9e834b413c",
          "bytes": 1190754,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-foam-roll-c364bba4d6f3230b.webp?alt=media&token=c95bfbb0-908f-4cc0-b909-9b828a3c475c",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-foam-roll-c364bba4d6f3230b.webp",
          "verifiedAt": "2026-10-07T22:45:52.204Z"
        },
        "poster": {
          "sha256": "91a4fbed0f115ac49067affc3a84b7bbf4daa33526d906b94dbc91d82bf7e1f3",
          "bytes": 60308,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-glute-foam-roll-91a4fbed0f115ac4.png?alt=media&token=80ac1aea-5469-4bb5-8ba3-f794e312fbc2",
          "name": "trainai/creator-media/2026-10-07/trainai-glute-foam-roll-91a4fbed0f115ac4.png",
          "verifiedAt": "2026-10-07T22:45:51.126Z"
        }
      }
    },
    {
      "id": "trainai-goblet-squat",
      "slug": "goblet-squat",
      "name": "Goblet squat",
      "category": "Dumbbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold one compact dumbbell vertically at chest with both hands cupping its upper end.",
        "Feet shoulder width, toes slightly out.",
        "Bend hips and knees into a comfortable squat with knees tracking toes, then stand.",
        "Keep heels down and dumbbell close to sternum throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-goblet-squat-6c582158b392.gif?alt=media&token=d4d229a7-f105-48b1-9101-3745cab95ae6",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-goblet-squat-4e65a800a1bd.png?alt=media&token=45d0a7d4-cd6f-44e9-865d-d5a45c7082b8",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/goblet-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fe3a109dba4f30ed663f130b81a7bdd86c688aeffa5dc7e5920abcc540635347",
          "bytes": 266731,
          "mimeType": "image/gif",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-goblet-squat-fe3a109dba4f30ed.gif?alt=media&token=3407b3bf-3f85-44eb-b432-d2c35d1528ba",
          "name": "trainai/creator-media/2026-10-07/trainai-goblet-squat-fe3a109dba4f30ed.gif",
          "verifiedAt": "2026-10-07T23:28:26.831Z"
        },
        "webp": {
          "sha256": "2e80cfae7acdecba455c2566e6c5929a228063ad031fee4f56fe8103697a88bc",
          "bytes": 433510,
          "mimeType": "image/webp",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-goblet-squat-2e80cfae7acdecba.webp?alt=media&token=da7052d5-4028-47b5-ab12-ab4c1e2c0ac3",
          "name": "trainai/creator-media/2026-10-07/trainai-goblet-squat-2e80cfae7acdecba.webp",
          "verifiedAt": "2026-10-07T23:28:30.657Z"
        },
        "poster": {
          "sha256": "c7e54aa024c23eec57cc28a8bb6fcf6bc4bd52ad4176cc5a9591ebabd7ab15d5",
          "bytes": 47178,
          "mimeType": "image/png",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-goblet-squat-c7e54aa024c23eec.png?alt=media&token=e715d34c-b8d9-4137-998e-99f24f2d63de",
          "name": "trainai/creator-media/2026-10-07/trainai-goblet-squat-c7e54aa024c23eec.png",
          "verifiedAt": "2026-10-07T23:28:27.532Z"
        }
      }
    },
    {
      "id": "trainai-hack-squat",
      "slug": "hack-squat",
      "name": "Hack squat",
      "category": "Gym machines",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "hack-squat-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set up in the hack-squat machine with shoulders and back against its pads.",
        "Release the safety catches according to the machine instructions, then bend the hips and knees with heels on the platform.",
        "Press up with control and re-engage the catches before stepping out."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-hack-squat-b478770237a9.gif?alt=media&token=b19230c2-8e36-4fde-8ac1-14e6a91ee9f2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-hack-squat-1d70dc867bcf.png?alt=media&token=b41af1c8-7079-42e5-9b58-860eab3e420b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/hack-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b05150234c8e7c182d8540004195c1b24dee566e94e9b6e64c8a87c2869f94f7",
          "bytes": 568348,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-hack-squat-b05150234c8e7c18.gif?alt=media&token=98321895-09db-44ac-af9d-0b614cfe8528",
          "name": "trainai/creator-media/2026-10-07/trainai-hack-squat-b05150234c8e7c18.gif",
          "verifiedAt": "2026-10-07T23:28:37.349Z"
        },
        "webp": {
          "sha256": "5d71427916719c102b2f40d75eb78729485711c847db3da2d72295d845ba9e0c",
          "bytes": 918444,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-hack-squat-5d71427916719c10.webp?alt=media&token=87f2db88-e950-4028-9480-b55b1e88327a",
          "name": "trainai/creator-media/2026-10-07/trainai-hack-squat-5d71427916719c10.webp",
          "verifiedAt": "2026-10-07T22:45:54.238Z"
        },
        "poster": {
          "sha256": "41bd0c6596924455389f121aba8b738ce3cd823ce40cf175c3777825696a8f9f",
          "bytes": 92742,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-hack-squat-41bd0c6596924455.png?alt=media&token=cee4a645-1c09-42b5-9b4c-be56c15b1a91",
          "name": "trainai/creator-media/2026-10-07/trainai-hack-squat-41bd0c6596924455.png",
          "verifiedAt": "2026-10-07T22:45:53.767Z"
        }
      }
    },
    {
      "id": "trainai-half-kneeling-hip-flexor-stretch",
      "slug": "half-kneeling-hip-flexor-stretch",
      "name": "Half-kneeling hip-flexor stretch",
      "category": "Static stretching",
      "target": "hip flexors",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Half-kneel with left knee on floor under hip and right foot forward, right knee90 degrees.",
        "Hands on right thigh.",
        "Gently tuck pelvis and shift forward a few centimeters to stretch front of left hip, keeping trunk tall.",
        "Hold quietly then ease back; no deep back arch.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-half-kneeling-hip-flexor-stretch-7286511f5277.gif?alt=media&token=08f3cc6a-522c-42be-9da7-5eae831e5c09",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-half-kneeling-hip-flexor-stretch-26079393ec16.png?alt=media&token=0a477cb1-1c4f-4753-87f5-58261cddaa9d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/half-kneeling-hip-flexor-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "cb2eb2f8dd27c7c1e42233b42d3b5051269cac8cd336e19080f05685100af457",
          "bytes": 157342,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-half-kneeling-hip-flexor-stretch-cb2eb2f8dd27c7c1.gif?alt=media&token=531b29aa-43bb-4d27-9451-d6f74793cec6",
          "name": "trainai/creator-media/2026-10-07/trainai-half-kneeling-hip-flexor-stretch-cb2eb2f8dd27c7c1.gif",
          "verifiedAt": "2026-10-07T23:28:32.074Z"
        },
        "webp": {
          "sha256": "63042fc3ac99927e56bb6ba7ce1de088493a41306c0760aa8d06ad13862a9ec4",
          "bytes": 229418,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-half-kneeling-hip-flexor-stretch-63042fc3ac99927e.webp?alt=media&token=12c0bb19-6b67-49c2-984f-f885f3c5b968",
          "name": "trainai/creator-media/2026-10-07/trainai-half-kneeling-hip-flexor-stretch-63042fc3ac99927e.webp",
          "verifiedAt": "2026-10-07T22:45:56.371Z"
        },
        "poster": {
          "sha256": "345517f0fac6d3fd93644b5125a4d2905a8993029bfb9cdd732a1a2a3ae28b93",
          "bytes": 55245,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-half-kneeling-hip-flexor-stretch-345517f0fac6d3fd.png?alt=media&token=1e807a3b-be10-48d9-9fad-0f82dffb163a",
          "name": "trainai/creator-media/2026-10-07/trainai-half-kneeling-hip-flexor-stretch-345517f0fac6d3fd.png",
          "verifiedAt": "2026-10-07T22:45:54.817Z"
        }
      }
    },
    {
      "id": "trainai-half-kneeling-landmine-press",
      "slug": "half-kneeling-landmine-press",
      "name": "Half-kneeling landmine press",
      "category": "Barbell accessories",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "barbell",
      "requiredEquipment": [
        "landmine",
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Half kneel: right knee on floor, left foot forward and planted.",
        "A barbell is fixed in a landmine pivot ahead, free weighted end held at right shoulder in right hand.",
        "Press free end forward and upward along its arc, then lower to shoulder.",
        "Pivot remains fixed, bar rigid, torso upright.",
        "Left hand rests at hip.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-half-kneeling-landmine-press-73459bd7d146.gif?alt=media&token=d7040d78-fa49-4a69-90e9-a9657eaf1453",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-half-kneeling-landmine-press-644ce46e4525.png?alt=media&token=977c13d6-2d39-4564-bd6d-a5b4d738e5bc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/half-kneeling-landmine-press/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "088bcbab3a520b968ca5ad19bdf38dd18c29ab720cd9f46884f02c71b641da9f",
          "bytes": 451109,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-half-kneeling-landmine-press-088bcbab3a520b96.gif?alt=media&token=eb03c575-cfe8-416c-abd9-afb0e8228b46",
          "name": "trainai/creator-media/2026-10-07/trainai-half-kneeling-landmine-press-088bcbab3a520b96.gif",
          "verifiedAt": "2026-10-07T23:28:42.915Z"
        },
        "webp": {
          "sha256": "aa5a9dab38eaba80ff70623eb5ba169c6bccb809e9725badf2539a9b41b7c389",
          "bytes": 762062,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-half-kneeling-landmine-press-aa5a9dab38eaba80.webp?alt=media&token=7857add5-c369-41ec-85e6-d1c06c6540e5",
          "name": "trainai/creator-media/2026-10-07/trainai-half-kneeling-landmine-press-aa5a9dab38eaba80.webp",
          "verifiedAt": "2026-10-07T22:45:56.432Z"
        },
        "poster": {
          "sha256": "cb4a495a60861142d4bf15f5b709320957d9729b46038ceab537fb67c875ad3a",
          "bytes": 37494,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-half-kneeling-landmine-press-cb4a495a60861142.png?alt=media&token=d676212a-4146-4bb9-a7b8-352cdeb52055",
          "name": "trainai/creator-media/2026-10-07/trainai-half-kneeling-landmine-press-cb4a495a60861142.png",
          "verifiedAt": "2026-10-07T22:45:56.285Z"
        }
      }
    },
    {
      "id": "trainai-heel-slide",
      "slug": "heel-slide",
      "name": "Heel slide",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie flat on back with head resting down and both knees bent.",
        "Slide one heel away on floor until that leg is straight, other foot stays planted.",
        "Hands stay down beside hips."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-heel-slide-0ac8b8502eb4.gif?alt=media&token=2af8c473-2a3e-41a2-9ff9-dcdd70714a30",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-heel-slide-aeaa22481071.png?alt=media&token=bbb4ac1b-062c-4192-851c-29b6c8966251",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/heel-slide/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1320,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5ec64042a590bb6b79bbda9d76a8a0cc0802d1b5d1152baf3dde29acea0264f2",
          "bytes": 270052,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-heel-slide-5ec64042a590bb6b.gif?alt=media&token=ac2426da-4901-4681-a879-bdef8ecb0184",
          "name": "trainai/creator-media/2026-10-07/trainai-heel-slide-5ec64042a590bb6b.gif",
          "verifiedAt": "2026-10-07T23:28:41.668Z"
        },
        "webp": {
          "sha256": "7da0ea309abc9485f1739853712f3c7a29ffc267298fdb2c6b71292ec195f22c",
          "bytes": 412630,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-heel-slide-7da0ea309abc9485.webp?alt=media&token=8bed1ecd-5977-4747-8d36-73550e09774a",
          "name": "trainai/creator-media/2026-10-07/trainai-heel-slide-7da0ea309abc9485.webp",
          "verifiedAt": "2026-10-07T23:28:43.526Z"
        },
        "poster": {
          "sha256": "f32abca0fe3ad98331e5595298a8e894a81015e9bd97ae6cc5a816f5848faaab",
          "bytes": 130014,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-heel-slide-f32abca0fe3ad983.png?alt=media&token=ec8a3562-590f-4278-a12a-b7fa77d4dd5b",
          "name": "trainai/creator-media/2026-10-07/trainai-heel-slide-f32abca0fe3ad983.png",
          "verifiedAt": "2026-10-07T23:28:46.214Z"
        }
      }
    },
    {
      "id": "trainai-high-knees",
      "slug": "high-knees",
      "name": "High knees",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall and jog in place, lifting one knee at a time toward a comfortable height.",
        "Swing the opposite arm naturally and land softly beneath your body.",
        "Keep your torso upright and reduce speed if your balance changes."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-high-knees-6b859e0aed50.gif?alt=media&token=e1b4b6c8-6d8a-4d9d-b485-95a6e04424ba",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-high-knees-b2c10aa75b1e.png?alt=media&token=ae995591-a835-48d2-8036-83b58c4542e8",
      "aliases": [
        "half knee bends"
      ],
      "legacyIds": [
        "3221"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/high-knees/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 960,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ff0a7da56d894965523610ee711c2c121ca13fcc3df456b77c3f0d3b91f64afd",
          "bytes": 196568,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-high-knees-ff0a7da56d894965.gif?alt=media&token=5a317df1-8d1a-44ef-8f63-afba459c85b4",
          "name": "trainai/creator-media/2026-10-07/trainai-high-knees-ff0a7da56d894965.gif",
          "verifiedAt": "2026-10-07T23:28:48.242Z"
        },
        "webp": {
          "sha256": "6a517329a851e1457d768b8656eb61feb619750fbb80117e10240e805467e11a",
          "bytes": 296200,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-high-knees-6a517329a851e145.webp?alt=media&token=510b63c9-150c-4613-a1d5-44924ec7b696",
          "name": "trainai/creator-media/2026-10-07/trainai-high-knees-6a517329a851e145.webp",
          "verifiedAt": "2026-10-07T23:28:49.802Z"
        },
        "poster": {
          "sha256": "c7225b4201d5bad6920a8927fc4f7fcf00fe7e3c6a8e5eb3ac838e42c80e8070",
          "bytes": 69682,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-high-knees-c7225b4201d5bad6.png?alt=media&token=0f07cd0e-9e69-4f6f-a35e-29fa2b333f60",
          "name": "trainai/creator-media/2026-10-07/trainai-high-knees-c7225b4201d5bad6.png",
          "verifiedAt": "2026-10-07T23:28:48.915Z"
        }
      }
    },
    {
      "id": "trainai-high-plank",
      "slug": "high-plank",
      "name": "High plank",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Begin hands and knees on floor.",
        "Extend legs behind to a high plank with hands beneath shoulders, elbows straight, body aligned from heels through hips to head.",
        "Hold quietly, then return knees to floor.",
        "No push-up or hip sag."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-high-plank-0e743bc260e1.gif?alt=media&token=a0741755-b308-4545-be61-a73c381de0a8",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-high-plank-bfc37b402c44.png?alt=media&token=65833e97-0e10-4cef-959b-095fa07efc56",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/high-plank/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0bc327be3ea42ef4db05a711468c9ce9e820318c7bb389682bdac451d5347c6a",
          "bytes": 213914,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-high-plank-0bc327be3ea42ef4.gif?alt=media&token=0bc81c6c-2e6d-499d-8f2b-efd0d3b1dd27",
          "name": "trainai/creator-media/2026-10-07/trainai-high-plank-0bc327be3ea42ef4.gif",
          "verifiedAt": "2026-10-07T23:28:54.182Z"
        },
        "webp": {
          "sha256": "8e9765aefda05a8ced28547acc6990ba5146f3c5a57316e06ef36c157f4256bc",
          "bytes": 343958,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-high-plank-8e9765aefda05a8c.webp?alt=media&token=960b7faf-4b2d-4793-bd25-574f4d7483d0",
          "name": "trainai/creator-media/2026-10-07/trainai-high-plank-8e9765aefda05a8c.webp",
          "verifiedAt": "2026-10-07T22:45:58.520Z"
        },
        "poster": {
          "sha256": "7f5f7ac5efafc8d51ce1ec0446e8c2e88a263b0c6e0a75812d8098a05ba9e733",
          "bytes": 68302,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-high-plank-7f5f7ac5efafc8d5.png?alt=media&token=7e01fdb2-ce90-4c12-8442-47041231e369",
          "name": "trainai/creator-media/2026-10-07/trainai-high-plank-7f5f7ac5efafc8d5.png",
          "verifiedAt": "2026-10-07T22:45:58.505Z"
        }
      }
    },
    {
      "id": "trainai-hollow-body-hold",
      "slug": "hollow-body-hold",
      "name": "Hollow-body hold",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Lie on back, draw ribs down and keep lower back supported.",
        "Lift shoulders and extend arms overhead; lift straight legs to a manageable diagonal angle, making a shallow hollow-body shape.",
        "Hold without rocking, then lower limbs.",
        "No arching lower back or repeated leg raises."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-hollow-body-hold-c7f346a7dd72.gif?alt=media&token=567f0008-9916-46f1-a365-3d6875cb14fb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-hollow-body-hold-d56b0590638c.png?alt=media&token=5d8f2211-a95e-445f-b2d5-97ff5eff0f2c",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/hollow-body-hold/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bc6df847c2805d98f780b6f42084a4a8f4d2771593aeabf4cac6f6130113a2c2",
          "bytes": 90351,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-hollow-body-hold-bc6df847c2805d98.gif?alt=media&token=dab04125-801a-4921-b4d6-cd23c268ee02",
          "name": "trainai/creator-media/2026-10-07/trainai-hollow-body-hold-bc6df847c2805d98.gif",
          "verifiedAt": "2026-10-07T23:28:51.523Z"
        },
        "webp": {
          "sha256": "3e71cb9ada2c2e294a9d3ac4a2ee8feb4cd168d59ff1e5c1f18e7f272640b378",
          "bytes": 138842,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-hollow-body-hold-3e71cb9ada2c2e29.webp?alt=media&token=b70b1587-b80f-408e-aa15-b78d1d0474b6",
          "name": "trainai/creator-media/2026-10-07/trainai-hollow-body-hold-3e71cb9ada2c2e29.webp",
          "verifiedAt": "2026-10-07T23:28:52.640Z"
        },
        "poster": {
          "sha256": "a44954a42bed110cd29ed6a6b0dc4f906da550909c13c02c553221a58a083d32",
          "bytes": 31389,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-hollow-body-hold-a44954a42bed110c.png?alt=media&token=d37985d1-c65f-4cac-bc33-ddcfd373ca67",
          "name": "trainai/creator-media/2026-10-07/trainai-hollow-body-hold-a44954a42bed110c.png",
          "verifiedAt": "2026-10-07T23:28:53.455Z"
        }
      }
    },
    {
      "id": "trainai-inchworm",
      "slug": "inchworm",
      "name": "Inchworm",
      "category": "Dynamic warm-up",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall and hinge forward to place the hands on the floor, bending the knees as needed.",
        "Walk the hands forward into a controlled high plank while keeping the feet in place.",
        "Walk the hands back and return to standing."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-inchworm-28015c8f176d.gif?alt=media&token=4052fb4b-969c-4c4c-b926-6276473f4b81",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-inchworm-d2097a6cbd8b.png?alt=media&token=a9acd4ec-11a5-4c6d-9a92-1fd9eeebb8d2",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/inchworm/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b5e0f56b3463870b4b6480f86f536ab587f0ceed69f1b9f9f6d7289ce664a6db",
          "bytes": 363881,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-inchworm-b5e0f56b3463870b.gif?alt=media&token=eec7cecc-dee3-4b15-897f-35c5d9cbaa39",
          "name": "trainai/creator-media/2026-10-07/trainai-inchworm-b5e0f56b3463870b.gif",
          "verifiedAt": "2026-10-07T23:28:58.886Z"
        },
        "webp": {
          "sha256": "16b6c98e8d8637729c3af3561d6271de72db5c0a00b1305674e56f4933144871",
          "bytes": 551870,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-inchworm-16b6c98e8d863772.webp?alt=media&token=5f6bbf08-63f8-4910-9dc7-ffdcaf03817e",
          "name": "trainai/creator-media/2026-10-07/trainai-inchworm-16b6c98e8d863772.webp",
          "verifiedAt": "2026-10-07T23:28:58.323Z"
        },
        "poster": {
          "sha256": "a10549062e0df04f823b2e728393a208c4461eba09290e6cc5f84945da25e43a",
          "bytes": 61567,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-inchworm-a10549062e0df04f.png?alt=media&token=9a29cf28-7372-4630-9524-76686a432359",
          "name": "trainai/creator-media/2026-10-07/trainai-inchworm-a10549062e0df04f.png",
          "verifiedAt": "2026-10-07T23:28:56.874Z"
        }
      }
    },
    {
      "id": "trainai-incline-dumbbell-curl",
      "slug": "incline-dumbbell-curl",
      "name": "Incline dumbbell curl",
      "category": "Dumbbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "adjustable-bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit with back supported on a fixed 45-degree incline bench, feet planted, arms hanging vertically down each side with dumbbells, palms forward.",
        "Curl both weights by bending elbows without lifting upper arms, then lower.",
        "Bench, torso and shoes stay identical throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-incline-dumbbell-curl-d811796a216f.gif?alt=media&token=93c98676-1aee-4a55-8c34-dc98b1c1c243",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-incline-dumbbell-curl-1b00302c7d34.png?alt=media&token=a916611d-8884-4b73-aa7a-163e49f9f53f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-dumbbell-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6954134fae1e478c0f24687d5a5a604b29da863c12a0fb6a963a010a14f49806",
          "bytes": 496992,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-dumbbell-curl-6954134fae1e478c.gif?alt=media&token=90f75c40-1a9f-4c44-8b32-e5972a06f53c",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-dumbbell-curl-6954134fae1e478c.gif",
          "verifiedAt": "2026-10-07T23:29:09.923Z"
        },
        "webp": {
          "sha256": "d757e3087e3e65914e5be7ba1c7af0eeedc29d105728d6fb32c6d2d3bf3027f9",
          "bytes": 766682,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-dumbbell-curl-d757e3087e3e6591.webp?alt=media&token=5947a936-d3ab-44f9-81eb-7201139cc0a3",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-dumbbell-curl-d757e3087e3e6591.webp",
          "verifiedAt": "2026-10-07T22:46:02.017Z"
        },
        "poster": {
          "sha256": "5892a3996900adb002c8d5aa5f074b493b20a099b8a6ab1c3b501406db0ec655",
          "bytes": 77731,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-dumbbell-curl-5892a3996900adb0.png?alt=media&token=f90761b5-9c3e-494d-813b-78fac859da50",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-dumbbell-curl-5892a3996900adb0.png",
          "verifiedAt": "2026-10-07T22:46:00.857Z"
        }
      }
    },
    {
      "id": "trainai-incline-push-up",
      "slug": "incline-push-up",
      "name": "Incline push-up",
      "category": "Home pushing",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-elevated-surface"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hands shoulder width on the edge of a stable elevated surface, body straight from heels to head, toes planted on floor.",
        "Bend elbows back diagonally to lower chest toward the edge, then press until arms are straight.",
        "Hips move with torso as one straight body line."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-incline-push-up-4fbd29536c95.gif?alt=media&token=465cab6a-b94d-432c-8395-9fc7c21b5bcc",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-incline-push-up-dbd468461d6a.png?alt=media&token=9360b29d-2ecf-4f18-b3b5-5ebc27047c31",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a03ba47f092cb4ed09f554696ead3bd3f2c5b698ea2a4608e001a2c5ad644078",
          "bytes": 368994,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-push-up-a03ba47f092cb4ed.gif?alt=media&token=e8cfeef9-4496-4f35-84c8-3aa7bfc7644c",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-push-up-a03ba47f092cb4ed.gif",
          "verifiedAt": "2026-10-07T23:29:05.320Z"
        },
        "webp": {
          "sha256": "bf537aaf000a4b0cb8a33affce22c93213fbf2542cd4e94337cc024a786b45cd",
          "bytes": 597096,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-push-up-bf537aaf000a4b0c.webp?alt=media&token=be1b5056-2976-4bcb-9e97-b0cded284137",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-push-up-bf537aaf000a4b0c.webp",
          "verifiedAt": "2026-10-07T22:46:02.542Z"
        },
        "poster": {
          "sha256": "be1ad2c34a0740a543adb5316c6ea2a94a0543b431cd4f8667d119b53b826439",
          "bytes": 62540,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-push-up-be1ad2c34a0740a5.png?alt=media&token=85fffaa4-6436-4cfd-8ce7-55318f424767",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-push-up-be1ad2c34a0740a5.png",
          "verifiedAt": "2026-10-07T22:46:02.703Z"
        }
      }
    },
    {
      "id": "trainai-incline-scapular-push-up",
      "slug": "incline-scapular-push-up",
      "name": "Incline scapular push-up",
      "category": "Home pushing",
      "target": "serratus anterior",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-elevated-surface"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "From an incline plank with hands on elevated surface, keep elbows straight throughout.",
        "Let chest sink slightly between straight arms as shoulder blades draw together, then push the surface away so shoulder blades spread.",
        "Only small shoulder-blade motion; no elbow bend or ordinary push-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-incline-scapular-push-up-1c9a8521eb64.gif?alt=media&token=ce9f3997-f238-4374-90e4-8c3c59ec2bd6",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-incline-scapular-push-up-269466e60eed.png?alt=media&token=4f3caa99-f0a5-4d9f-8810-5c1dfb5705d4",
      "aliases": [
        "incline scapula push up"
      ],
      "legacyIds": [
        "3011"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-scapular-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4b2f876af854f5c8f8a3b2b5918bd0dad4c6d02d95ceadf1ed1779c5f5e0082c",
          "bytes": 689834,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-scapular-push-up-4b2f876af854f5c8.gif?alt=media&token=60a0dac9-bf55-4c93-b462-b6b9d84cf238",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-scapular-push-up-4b2f876af854f5c8.gif",
          "verifiedAt": "2026-10-07T23:29:04.148Z"
        },
        "webp": {
          "sha256": "1cd538b98e22b02d838175bada77b5fca5af8248b3b3155c72c7cdf951d19ce8",
          "bytes": 1097338,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-scapular-push-up-1cd538b98e22b02d.webp?alt=media&token=27b9cebe-84c2-4fb6-895d-9ecb857306a9",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-scapular-push-up-1cd538b98e22b02d.webp",
          "verifiedAt": "2026-10-07T23:29:23.622Z"
        },
        "poster": {
          "sha256": "5cdad01cf202998672de89ebd1098a4d84627e74da015ea52bbbd02cdebe6509",
          "bytes": 113140,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-incline-scapular-push-up-5cdad01cf2029986.png?alt=media&token=ace09331-250b-4bb1-95e6-b5405a7cb152",
          "name": "trainai/creator-media/2026-10-07/trainai-incline-scapular-push-up-5cdad01cf2029986.png",
          "verifiedAt": "2026-10-07T23:29:08.364Z"
        }
      }
    },
    {
      "id": "trainai-inverted-row",
      "slug": "inverted-row",
      "name": "Inverted row",
      "category": "Pull-up and suspension",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [
        "rated-low-bar"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Grip a securely fixed low bar with an overhand grip and plant your heels in front of you.",
        "Keep your body straight as you bend the elbows and pull toward the bar, stopping before contact.",
        "Lower under control; keep your hands and heels in place."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-inverted-row-9d190c7e6970.gif?alt=media&token=5bbe0a2d-10ec-48ce-8a87-da46c95bc638",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-inverted-row-4d9af7429aa4.png?alt=media&token=7efe7bc4-f3f1-454c-ba4e-82751e34bc15",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/inverted-row/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "08b8632a159a33e60eca0018577d3cfad4b91fc9882bfe239813149a277603f9",
          "bytes": 284424,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-inverted-row-08b8632a159a33e6.gif?alt=media&token=f839e216-bcf5-4f16-9195-1ec2985f0775",
          "name": "trainai/creator-media/2026-10-07/trainai-inverted-row-08b8632a159a33e6.gif",
          "verifiedAt": "2026-10-07T23:29:09.715Z"
        },
        "webp": {
          "sha256": "b38d77e495564105bb2e53b990675e388e393923aa72264760083a1d1918e12d",
          "bytes": 467710,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-inverted-row-b38d77e495564105.webp?alt=media&token=454a6379-0d79-4856-aa40-8498b46dfa9e",
          "name": "trainai/creator-media/2026-10-07/trainai-inverted-row-b38d77e495564105.webp",
          "verifiedAt": "2026-10-07T23:29:15.807Z"
        },
        "poster": {
          "sha256": "b8df6cecf2a93be0cbd77dee96cb67e5642b2778962954cfb9954f543a6a929b",
          "bytes": 87337,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-inverted-row-b8df6cecf2a93be0.png?alt=media&token=7c69bce9-b0cc-4e9b-9e6d-93338a446490",
          "name": "trainai/creator-media/2026-10-07/trainai-inverted-row-b8df6cecf2a93be0.png",
          "verifiedAt": "2026-10-07T23:29:13.160Z"
        }
      }
    },
    {
      "id": "trainai-jump-rope",
      "slug": "jump-rope",
      "name": "Jump rope",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [
        "jump-rope",
        "clearance"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Jump a single continuous rope with two handles, one per hand beside hips.",
        "Rope runs in ONE continuous U/oval between the handles and rotates under both feet then overhead.",
        "Small two-foot hops, knees soft, elbows beside torso.",
        "No disconnected rope fragments, no rope through body."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-jump-rope-328348eb61b9.gif?alt=media&token=a935e4b7-d058-4fae-9fa8-25b0ea99289f",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-jump-rope-fe78620a50a4.png?alt=media&token=a0114228-f4f2-4213-a638-eee4314d7988",
      "aliases": [
        "jump rope"
      ],
      "legacyIds": [
        "2612"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/jump-rope/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 900,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e9bc8ad2382f249ff2fa90852019a47dfed4d7aee4ae64d16d47fb52f3dd9123",
          "bytes": 141697,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-jump-rope-e9bc8ad2382f249f.gif?alt=media&token=68e7b43e-b828-47c6-9228-af7a0ca6460c",
          "name": "trainai/creator-media/2026-10-07/trainai-jump-rope-e9bc8ad2382f249f.gif",
          "verifiedAt": "2026-10-07T23:29:16.313Z"
        },
        "webp": {
          "sha256": "89b5efdeca0b68049a5a65b6f471bdef01be719d6f235edd6fc76aa320c1e527",
          "bytes": 224232,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-jump-rope-89b5efdeca0b6804.webp?alt=media&token=7e6e262c-794a-4cb4-906f-1dda9cab51ea",
          "name": "trainai/creator-media/2026-10-07/trainai-jump-rope-89b5efdeca0b6804.webp",
          "verifiedAt": "2026-10-07T23:29:19.339Z"
        },
        "poster": {
          "sha256": "d65bf6cb208ec87ce6616541d86bdce3bf0a322bf7c0d48f59242a375631ef74",
          "bytes": 63894,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-jump-rope-d65bf6cb208ec87c.png?alt=media&token=22ed4d0f-255e-4f0b-b3fd-959f689473a2",
          "name": "trainai/creator-media/2026-10-07/trainai-jump-rope-d65bf6cb208ec87c.png",
          "verifiedAt": "2026-10-07T23:29:17.852Z"
        }
      }
    },
    {
      "id": "trainai-jumping-jack",
      "slug": "jumping-jack",
      "name": "Jumping jack",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start upright feet together arms beside body.",
        "Small jump opens feet wide as arms sweep sideways overhead, land softly knees slightly bent.",
        "Small jump returns feet together as arms lower.",
        "Whole body stays centered, feet have a visible airborne phase."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-jumping-jack-9ff005dbc271.gif?alt=media&token=3b594c51-0cb9-4af6-be32-f8f1733c25b2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-jumping-jack-44072f087214.png?alt=media&token=4996748c-8490-4f86-8f52-f73b1b7acb98",
      "aliases": [
        "jumping jack"
      ],
      "legacyIds": [
        "3224"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/jumping-jack/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2262cf5848d2143e6989f68051128da8539578a064eb021fea675ca729e246c8",
          "bytes": 139596,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-jumping-jack-2262cf5848d2143e.gif?alt=media&token=ddf63555-6d65-404b-b0f2-615cf2907f67",
          "name": "trainai/creator-media/2026-10-07/trainai-jumping-jack-2262cf5848d2143e.gif",
          "verifiedAt": "2026-10-07T23:29:19.641Z"
        },
        "webp": {
          "sha256": "49ec7abb84c352cc2484fbe57849b3b02f6b252700bfd71788f64c822483abc8",
          "bytes": 231606,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-jumping-jack-49ec7abb84c352cc.webp?alt=media&token=7a468776-c35a-4993-8792-5eb859832aaa",
          "name": "trainai/creator-media/2026-10-07/trainai-jumping-jack-49ec7abb84c352cc.webp",
          "verifiedAt": "2026-10-07T22:46:06.297Z"
        },
        "poster": {
          "sha256": "f666765b7179ed272a96f8d703f800ba077c1f91c707bf18557d8e021650fa37",
          "bytes": 42293,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-jumping-jack-f666765b7179ed27.png?alt=media&token=ecf87131-965c-4c20-9563-01da1f43481b",
          "name": "trainai/creator-media/2026-10-07/trainai-jumping-jack-f666765b7179ed27.png",
          "verifiedAt": "2026-10-07T22:46:06.362Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-bent-over-row",
      "slug": "kettlebell-bent-over-row",
      "name": "Kettlebell bent-over row",
      "category": "Kettlebells",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with feet planted, knees soft, hinge torso forward with neutral spine.",
        "Hold ONE kettlebell in right hand hanging beneath shoulder, left hand braced on left thigh.",
        "Pull right elbow toward hip, bell approaches right lower ribs, then lower.",
        "Torso and feet remain unchanged.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-bent-over-row-c40112647864.gif?alt=media&token=d239bf36-2334-4745-b0e9-9a0eb013f01a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-bent-over-row-cbab37065d8f.png?alt=media&token=2555c070-4497-47d2-a513-aa02aa487bcc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-bent-over-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "93c6ba5d7d4e7ca74e77f882c018ebe9f69a83a21c979f337b90fac5f30eca12",
          "bytes": 393965,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-bent-over-row-93c6ba5d7d4e7ca7.gif?alt=media&token=9d4b25e4-75c5-4d3e-aebd-54f9130b0909",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-bent-over-row-93c6ba5d7d4e7ca7.gif",
          "verifiedAt": "2026-10-07T23:29:27.897Z"
        },
        "webp": {
          "sha256": "9e24ca21131e7e84b16b4baa10d2cbf92967af3c0a34f7f8e4e09381bd9ee109",
          "bytes": 655890,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-bent-over-row-9e24ca21131e7e84.webp?alt=media&token=156cade9-efd7-4bf5-bf27-9929ddab4138",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-bent-over-row-9e24ca21131e7e84.webp",
          "verifiedAt": "2026-10-07T22:46:08.066Z"
        },
        "poster": {
          "sha256": "ce671c12e51613aa6f7e8f61915ed0360626106590d76698103399a6c62c3b7a",
          "bytes": 66555,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-bent-over-row-ce671c12e51613aa.png?alt=media&token=c166614b-6de7-4445-806b-2603528a8dea",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-bent-over-row-ce671c12e51613aa.png",
          "verifiedAt": "2026-10-07T22:46:07.767Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-clean",
      "slug": "kettlebell-clean",
      "name": "Kettlebell clean",
      "category": "Kettlebells",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "One-arm kettlebell clean to right rack.",
        "Begin hip-hinged with bell in right hand between legs, neutral spine.",
        "Extend hips and guide bell upward close to body with elbow near ribs, rotate hand through handle so bell settles smoothly against outer forearm at right shoulder.",
        "Reverse close to body into hinge.",
        "Bell never flips far away or passes through arm; left hand free.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-clean-60d3ee2fe3d6.gif?alt=media&token=f6af511f-dd5b-4cf3-8040-758b3c23e2bc",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-clean-fb5dca12414e.png?alt=media&token=1e9c9f65-bd79-4aa6-9cf2-1aa695863897",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-clean/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "23d613fa2b9f262c2ad043c03664ff68cf72dfd8b5a09e6acb730208c7267820",
          "bytes": 305513,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-clean-23d613fa2b9f262c.gif?alt=media&token=82ef0018-8870-4c5a-816d-25982bedc341",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-clean-23d613fa2b9f262c.gif",
          "verifiedAt": "2026-10-07T23:29:24.766Z"
        },
        "webp": {
          "sha256": "322839109d048a7e4c25307a207e7b15eb1aef86745d77d60eb1e63c0d16e16e",
          "bytes": 519232,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-clean-322839109d048a7e.webp?alt=media&token=7072462c-42b5-4c47-83b1-635bc009116d",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-clean-322839109d048a7e.webp",
          "verifiedAt": "2026-10-07T22:46:09.338Z"
        },
        "poster": {
          "sha256": "e385b562d6f5170d23eeadeddf3a27ada121ebe5dc2a616a15c004fe7bf17bf0",
          "bytes": 51222,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-clean-e385b562d6f5170d.png?alt=media&token=c0575480-ce8f-4c5e-bd2a-70efbd69393a",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-clean-e385b562d6f5170d.png",
          "verifiedAt": "2026-10-07T22:46:08.812Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-deadlift",
      "slug": "kettlebell-deadlift",
      "name": "Kettlebell deadlift",
      "category": "Kettlebells",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "One kettlebell on floor between feet.",
        "Begin already gripping handle in both hands, hips back, knees bent, neutral back.",
        "Stand by extending hips and knees with arms long, bell rises to between thighs.",
        "Lower under control to same floor position while hands retain grip.",
        "Never release or teleport bell."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-deadlift-7696523236cb.gif?alt=media&token=5e69fb98-6ceb-4e95-aa4e-0ce05c88ad91",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-deadlift-e1930c93512d.png?alt=media&token=ecdd1805-0f2c-4973-afb6-33cfe3576007",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7e2b1c0bb476874eb7c7cb71cdd7c467ea0d7ca69a9e9253257fa2fe5c6f0d75",
          "bytes": 338955,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-deadlift-7e2b1c0bb476874e.gif?alt=media&token=4f67ed59-2aac-4f33-a5b5-5af9f4c8262f",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-deadlift-7e2b1c0bb476874e.gif",
          "verifiedAt": "2026-10-07T23:29:28.562Z"
        },
        "webp": {
          "sha256": "ab346e8c7538c35c81c8371e6a892bcfbd03a80b9cc6b2e881d681b40cef77b5",
          "bytes": 550950,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-deadlift-ab346e8c7538c35c.webp?alt=media&token=fa35595d-c504-4dfc-a2a0-17e2e56fa31f",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-deadlift-ab346e8c7538c35c.webp",
          "verifiedAt": "2026-10-07T23:29:33.484Z"
        },
        "poster": {
          "sha256": "825db94c06ee5bc1a618f1e1f339ab61cb85b050ea87f1462db00ff6b8fc678d",
          "bytes": 59380,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-deadlift-825db94c06ee5bc1.png?alt=media&token=a8260a3c-ac86-4d0a-9744-d1ca83695fc0",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-deadlift-825db94c06ee5bc1.png",
          "verifiedAt": "2026-10-07T23:29:29.857Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-floor-press",
      "slug": "kettlebell-floor-press",
      "name": "Kettlebell floor press",
      "category": "Kettlebells",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Kettlebell floor press: lie flat on back, head and shoulder blades grounded, knees bent and feet planted.",
        "One kettlebell held in each hand by its handle, bell resting on back of forearm.",
        "Start upper arms touching floor and elbows about 90 degrees.",
        "Press both bells vertically above chest until arms almost straight.",
        "No sitting up.",
        "Two identical small kettlebells stay attached to hands."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-floor-press-8b511da2f4c1.gif?alt=media&token=eb8d2924-0aa3-4cc5-a72f-3a3de6080d43",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-floor-press-d4dda5531d47.png?alt=media&token=8f6d89ad-14d2-424f-85e2-c125fe53a913",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-floor-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 1760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4ed0ca355f403f114fb65a163fc6dbeeeb2504ca8e25d655a7a6a35c72449fc8",
          "bytes": 598484,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-floor-press-4ed0ca355f403f11.gif?alt=media&token=79847cb0-a804-453d-995b-35ef1d41404d",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-floor-press-4ed0ca355f403f11.gif",
          "verifiedAt": "2026-10-07T23:29:34.494Z"
        },
        "webp": {
          "sha256": "1bbfa274f7da706a7df44677b52aecf976fbce7c288ecd9e348eecb29e19d994",
          "bytes": 941680,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-floor-press-1bbfa274f7da706a.webp?alt=media&token=44d83435-d7ca-493c-a29a-df212a774157",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-floor-press-1bbfa274f7da706a.webp",
          "verifiedAt": "2026-10-07T23:29:43.854Z"
        },
        "poster": {
          "sha256": "0c93631f754d7e53a38cf237bcc97c06946ebe6b0c359cda0203f0e12ddba120",
          "bytes": 92427,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-floor-press-0c93631f754d7e53.png?alt=media&token=2f87d0da-16fc-46aa-b90a-01d2f86b8903",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-floor-press-0c93631f754d7e53.png",
          "verifiedAt": "2026-10-07T23:29:34.707Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-goblet-squat",
      "slug": "kettlebell-goblet-squat",
      "name": "Kettlebell goblet squat",
      "category": "Kettlebells",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold ONE kettlebell by both sides of its handle at chest height, bell hanging below hands.",
        "Feet shoulder width and planted.",
        "Bend hips and knees together into comfortable squat, knees track toes; stand back up.",
        "Bell remains at chest, torso controlled, no body recentering."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-goblet-squat-89f616f53796.gif?alt=media&token=8877f71b-4725-4b7b-9c3c-d3537fe03149",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-goblet-squat-baa523dfee6e.png?alt=media&token=4aa6e139-3fdb-43ff-bdbb-863378283d86",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-goblet-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a1da1ea1729d5c07882713be463eefa0a0608046e8bd2af5ee88ce619901836d",
          "bytes": 268799,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-goblet-squat-a1da1ea1729d5c07.gif?alt=media&token=b2ec686a-e463-4b4a-a79c-6c600349dabd",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-goblet-squat-a1da1ea1729d5c07.gif",
          "verifiedAt": "2026-10-07T23:29:37.070Z"
        },
        "webp": {
          "sha256": "7ed16c3fb9068d45c5bd0c853b4ff3f8a25f2ca817088709ceb5461bf20d24cf",
          "bytes": 441702,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-goblet-squat-7ed16c3fb9068d45.webp?alt=media&token=7bee5f03-4b21-4e95-a68e-581e600e1b94",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-goblet-squat-7ed16c3fb9068d45.webp",
          "verifiedAt": "2026-10-07T23:29:40.560Z"
        },
        "poster": {
          "sha256": "79a9e02cea5519444f6dbaeaedf52e89a3b6209f4da7aaca50edae922b3cce49",
          "bytes": 47132,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-goblet-squat-79a9e02cea551944.png?alt=media&token=5b655be7-67b2-40de-8dd1-69d35a478089",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-goblet-squat-79a9e02cea551944.png",
          "verifiedAt": "2026-10-07T23:29:37.761Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-push-press",
      "slug": "kettlebell-push-press",
      "name": "Kettlebell push press",
      "category": "Kettlebells",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand holding ONE kettlebell in right front rack.",
        "Dip knees and hips slightly with upright torso, then extend legs and press right hand overhead.",
        "Finish tall with straight right elbow, lower bell to rack.",
        "Clear shallow leg drive distinguishes push press from strict press; feet stay planted throughout.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-push-press-fb18bc1e8067.gif?alt=media&token=13c37eef-06c2-4356-a221-09d626f9ebf3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-push-press-65731b80a7b8.png?alt=media&token=f780138f-be42-4f05-8f16-2bc061ab9f4d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-push-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7accc1d2dc5fd1b2a13e261a7d4c2a3a89d9d431f0c0b24a2e4f79f1649b2d3a",
          "bytes": 243524,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-push-press-7accc1d2dc5fd1b2.gif?alt=media&token=a41c7561-8d4c-4177-ae61-7bb9d0a94ca1",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-push-press-7accc1d2dc5fd1b2.gif",
          "verifiedAt": "2026-10-07T23:29:39.488Z"
        },
        "webp": {
          "sha256": "fa3c20cd86c44fda869feb414faa61eb10288643029e20eaea4c71e76d08dc39",
          "bytes": 385290,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-push-press-fa3c20cd86c44fda.webp?alt=media&token=eabd4cf6-5aba-484e-8c57-71b07f5f75e9",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-push-press-fa3c20cd86c44fda.webp",
          "verifiedAt": "2026-10-07T23:29:43.046Z"
        },
        "poster": {
          "sha256": "a2a444c96bff631a85e16e5e5249949d737037c44ebfb19470814f2e5f71a8a7",
          "bytes": 39828,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-push-press-a2a444c96bff631a.png?alt=media&token=e1ef59dc-d140-4e91-85e4-3dc7313b6322",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-push-press-a2a444c96bff631a.png",
          "verifiedAt": "2026-10-07T23:29:42.909Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-rack-carry",
      "slug": "kettlebell-rack-carry",
      "name": "Kettlebell rack carry",
      "category": "Kettlebells",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell",
        "walking-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Walk holding one kettlebell in anatomical right front-rack position, bell resting against forearm near shoulder, wrist straight elbow tucked.",
        "Left arm naturally swings, both legs alternate."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-rack-carry-e707c4881ad9.gif?alt=media&token=1d6fa939-6d49-4804-8c9b-476c0877c075",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-rack-carry-c557a91ebea4.png?alt=media&token=64a01912-5e1f-425b-90f3-9e5b6cbc5420",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-rack-carry/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4b5a6927609297f0ff8bd91bb7338c2363fa89a6a9b43c245f1dc51b3bf7b1c0",
          "bytes": 215456,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-rack-carry-4b5a6927609297f0.gif?alt=media&token=53931532-d8a4-439e-81b4-04155b62a2b8",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-rack-carry-4b5a6927609297f0.gif",
          "verifiedAt": "2026-10-07T23:29:45.246Z"
        },
        "webp": {
          "sha256": "c0539f7dff54dcae2963917d487ee230c68e81c7f900152cc76abeeea3bae8e7",
          "bytes": 326690,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-rack-carry-c0539f7dff54dcae.webp?alt=media&token=02775951-5f84-487b-8468-a30aac0dd936",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-rack-carry-c0539f7dff54dcae.webp",
          "verifiedAt": "2026-10-07T23:29:46.830Z"
        },
        "poster": {
          "sha256": "cf6b4b1801d08b4ba802d09feceaf66417d3c127108f78351920ec32d35ec488",
          "bytes": 72703,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-rack-carry-cf6b4b1801d08b4b.png?alt=media&token=fd16db03-ce6c-4334-8c1b-9b5edf64a833",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-rack-carry-cf6b4b1801d08b4b.png",
          "verifiedAt": "2026-10-07T23:29:45.752Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-reverse-lunge",
      "slug": "kettlebell-reverse-lunge",
      "name": "Kettlebell reverse lunge",
      "category": "Kettlebells",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold ONE kettlebell at chest with both hands.",
        "Step right foot back, lower right knee toward ground as left knee bends, push through left foot and return to stand.",
        "Demonstrate same side for one cycle.",
        "Front foot fixed, body upright, no forward lunge.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-reverse-lunge-3ede71d716d9.gif?alt=media&token=f3fb1348-404f-4297-bf8d-3a99dea2e83e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-reverse-lunge-94b6572417f9.png?alt=media&token=ca17f7d3-14b5-4a26-96be-7c720f7a4d02",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-reverse-lunge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a8c77228b61ed628442a490de67cb37d87e340c1a0057c9916cf9d4784532397",
          "bytes": 261886,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-reverse-lunge-a8c77228b61ed628.gif?alt=media&token=2f10aa95-5130-4ee9-af7f-9c2d42108c7f",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-reverse-lunge-a8c77228b61ed628.gif",
          "verifiedAt": "2026-10-07T23:29:48.799Z"
        },
        "webp": {
          "sha256": "7fb16f162a3c6906801e2f2125c4077607f7ab0c21cba102f8a1dfa8bd27f0ad",
          "bytes": 426918,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-reverse-lunge-7fb16f162a3c6906.webp?alt=media&token=ed227f0e-b235-43f2-902c-8ad05a07cd87",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-reverse-lunge-7fb16f162a3c6906.webp",
          "verifiedAt": "2026-10-07T22:46:15.193Z"
        },
        "poster": {
          "sha256": "c44a1dec287549a1822417e131f74a8bb8b36376d9dcb14e737d8c1d92dd2215",
          "bytes": 41529,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-reverse-lunge-c44a1dec287549a1.png?alt=media&token=0ab3155c-cd1a-4c44-8701-d5d74f557bb1",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-reverse-lunge-c44a1dec287549a1.png",
          "verifiedAt": "2026-10-07T22:46:14.592Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-romanian-deadlift",
      "slug": "kettlebell-romanian-deadlift",
      "name": "Kettlebell Romanian deadlift",
      "category": "Kettlebells",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand holding ONE kettlebell in both hands in front of thighs, arms long.",
        "Hinge at hips with soft knees and neutral back, lower bell to mid-shin, then stand tall.",
        "Shoes fixed, elbows stay straight and bell stays held throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-romanian-deadlift-49611cacb1dd.gif?alt=media&token=b1870f51-f5bb-4e52-a1a9-c9aec9ef79d0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-romanian-deadlift-b3112fb048ff.png?alt=media&token=0595dfcb-4064-46b1-bbae-9f15fd5c364f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-romanian-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3f5cd5f0a0d17931dcf0d6e6c98a62c150bfd948078c493a7a82def4b7983b27",
          "bytes": 268730,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-romanian-deadlift-3f5cd5f0a0d17931.gif?alt=media&token=6d1eaee5-f7e2-4cf2-8db7-f0b2fc790de0",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-romanian-deadlift-3f5cd5f0a0d17931.gif",
          "verifiedAt": "2026-10-07T23:29:49.008Z"
        },
        "webp": {
          "sha256": "e3231447e11a0a69c2332dc7deedd032d44dd623a0d5fa4fb8f86cecef16a1f0",
          "bytes": 433648,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-romanian-deadlift-e3231447e11a0a69.webp?alt=media&token=4a854247-9ef4-468c-b0a1-e700ce38b6ee",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-romanian-deadlift-e3231447e11a0a69.webp",
          "verifiedAt": "2026-10-07T22:46:15.918Z"
        },
        "poster": {
          "sha256": "93bfbc52804cfd6962398a2d1a59a329a782a6cf4745162064657ba3fbaca61d",
          "bytes": 43352,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-romanian-deadlift-93bfbc52804cfd69.png?alt=media&token=cf43bb34-b2b5-4c69-8a4d-33e836414699",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-romanian-deadlift-93bfbc52804cfd69.png",
          "verifiedAt": "2026-10-07T22:46:15.782Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-strict-press",
      "slug": "kettlebell-strict-press",
      "name": "Kettlebell strict press",
      "category": "Kettlebells",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall with ONE kettlebell in right front-rack position, handle in hand, bell against outer forearm.",
        "Press right hand overhead until elbow straight, then lower to rack.",
        "No knee dip, leaning, or bell switching sides.",
        "Left arm relaxed.",
        "Shoes fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-strict-press-6f530f89ffe2.gif?alt=media&token=89b2df79-feed-4b4a-8572-deb4f837c2c4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-strict-press-895a598120a8.png?alt=media&token=2a2fa9e2-df31-4f0b-8c80-89eda487b556",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-strict-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "22bbda09e5c03dde45918f95bf8c537a2ae6ff32ef200c5b5c4eb4b582926dff",
          "bytes": 246709,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-strict-press-22bbda09e5c03dde.gif?alt=media&token=cfd794c1-143b-4ee0-85fd-c87bd73a3533",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-strict-press-22bbda09e5c03dde.gif",
          "verifiedAt": "2026-10-07T23:29:48.812Z"
        },
        "webp": {
          "sha256": "cbfd3fd22c0403adf9e0c9aa282c6dbf28d4c0db544b8b66afd702f61e3456ac",
          "bytes": 387110,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-strict-press-cbfd3fd22c0403ad.webp?alt=media&token=628b26d1-cadd-4987-9ca0-d7ba71a27f9f",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-strict-press-cbfd3fd22c0403ad.webp",
          "verifiedAt": "2026-10-07T23:29:51.450Z"
        },
        "poster": {
          "sha256": "33d1cee61d148892d1204004b86f0d633b2d10a4e4d86a642cc0d98077b03991",
          "bytes": 38975,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-strict-press-33d1cee61d148892.png?alt=media&token=92e60f26-2967-4401-93b6-970722a7557e",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-strict-press-33d1cee61d148892.png",
          "verifiedAt": "2026-10-07T23:29:49.906Z"
        }
      }
    },
    {
      "id": "trainai-kettlebell-suitcase-carry",
      "slug": "kettlebell-suitcase-carry",
      "name": "Kettlebell suitcase carry",
      "category": "Kettlebells",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell",
        "walking-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Walk holding ONE kettlebell in anatomical right hand, arm long.",
        "Torso tall and shoulders level.",
        "Alternate natural steps, bell remains in SAME hand."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-suitcase-carry-e28a3d7bdf81.gif?alt=media&token=17913ea8-02f9-4a0e-aff7-cfb86c91860a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-kettlebell-suitcase-carry-b952944c6556.png?alt=media&token=2c532bb7-ae15-4675-9686-7b821e457699",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-suitcase-carry/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0da7897d16e1ab26c12a0bb13346c94286c603d1f3a9a54d2cef7089ff7da591",
          "bytes": 205222,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-suitcase-carry-0da7897d16e1ab26.gif?alt=media&token=76324e9d-1d3d-4b45-b89f-90e3fe3bf548",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-suitcase-carry-0da7897d16e1ab26.gif",
          "verifiedAt": "2026-10-07T23:29:54.623Z"
        },
        "webp": {
          "sha256": "aa28111bb2504623ed53868d09eb026366ef7ddd8ac57332a11cf5ef46233731",
          "bytes": 316328,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-suitcase-carry-aa28111bb2504623.webp?alt=media&token=846a8bac-430a-4a04-a07c-2025e1d8f5c6",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-suitcase-carry-aa28111bb2504623.webp",
          "verifiedAt": "2026-10-07T23:29:53.891Z"
        },
        "poster": {
          "sha256": "b109af346c692ceac8a98e91bf8178a03fdf4ff76be5e8c51b37752ed8d87ae2",
          "bytes": 70247,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kettlebell-suitcase-carry-b109af346c692cea.png?alt=media&token=92d06361-d7cc-4e84-8742-f50191f4cf3a",
          "name": "trainai/creator-media/2026-10-07/trainai-kettlebell-suitcase-carry-b109af346c692cea.png",
          "verifiedAt": "2026-10-07T23:29:53.434Z"
        }
      }
    },
    {
      "id": "trainai-knee-plank",
      "slug": "knee-plank",
      "name": "Knee plank",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Set forearms on floor, elbows under shoulders and knees behind hips.",
        "Gently lengthen into a straight line from knees through hips to head, lower legs relaxed.",
        "Hold this modified forearm plank with knees resting on floor, then relax back slightly.",
        "No lifting knees or bending elbows dynamically."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-plank-c39a9c047d74.gif?alt=media&token=6db203cc-c377-411f-b426-c612ca709549",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-plank-399216ed1693.png?alt=media&token=c7a84131-51ee-44d1-a4a9-c0440f99f8fc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/knee-plank/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d9bdc92010613c52ab380d5e4ffb1d734d64889f51077e74e7ac8bb8c4774741",
          "bytes": 203521,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-plank-d9bdc92010613c52.gif?alt=media&token=0c3f087b-f7bd-4a76-871d-a1c905fda15a",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-plank-d9bdc92010613c52.gif",
          "verifiedAt": "2026-10-07T23:29:57.227Z"
        },
        "webp": {
          "sha256": "41d54d4c8f647e12dac19c278cefb7b14a09e7a50af316f62dcefee3853944f6",
          "bytes": 332846,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-plank-41d54d4c8f647e12.webp?alt=media&token=0d017154-bb3e-40ef-8f9c-cc7a3ef2428d",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-plank-41d54d4c8f647e12.webp",
          "verifiedAt": "2026-10-07T22:46:18.493Z"
        },
        "poster": {
          "sha256": "67461a2da4a613884c05b3b04345f95e199ffa7a3eb0be02e7558c70046c2f43",
          "bytes": 61318,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-plank-67461a2da4a61388.png?alt=media&token=db73a180-968b-4e0d-b866-c27a8609ac0f",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-plank-67461a2da4a61388.png",
          "verifiedAt": "2026-10-07T22:46:18.519Z"
        }
      }
    },
    {
      "id": "trainai-knee-push-up",
      "slug": "knee-push-up",
      "name": "Knee push-up",
      "category": "Home pushing",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start supported on palms and knees with a straight line from knees through hips to head; lower legs relaxed behind.",
        "Bend elbows diagonally backward to lower chest toward floor, then press back up.",
        "Knees and palms remain planted; hips do not fold separately."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-push-up-0efd822c8c2b.gif?alt=media&token=99c6bbdd-d14f-4995-a644-005990c70d37",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-push-up-96ac490df400.png?alt=media&token=01933568-a721-476c-86f6-88c1c288bbf7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/knee-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f8e1b84622335034fc9310c34625ab44759bbd57a9f874210f5662d6279d3828",
          "bytes": 370974,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-push-up-f8e1b84622335034.gif?alt=media&token=b84b62bb-b26d-4ec7-bc9e-ea54a6fe9516",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-push-up-f8e1b84622335034.gif",
          "verifiedAt": "2026-10-07T23:30:01.057Z"
        },
        "webp": {
          "sha256": "5e19a8b1114f0b887271f3527ade62cccf2c267bc03410737041dc3e366adba2",
          "bytes": 617116,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-push-up-5e19a8b1114f0b88.webp?alt=media&token=897165f8-31e3-45a8-90e7-100bf0ec4c75",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-push-up-5e19a8b1114f0b88.webp",
          "verifiedAt": "2026-10-07T22:46:20.659Z"
        },
        "poster": {
          "sha256": "f0323cf70d10eb4de476e13ef23072d47d9bed7be369a248e8f090cd13e2a676",
          "bytes": 70624,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-push-up-f0323cf70d10eb4d.png?alt=media&token=0f368ccc-b777-4e67-a9b4-6ddec871daf2",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-push-up-f0323cf70d10eb4d.png",
          "verifiedAt": "2026-10-07T22:46:19.521Z"
        }
      }
    },
    {
      "id": "trainai-knee-side-plank",
      "slug": "knee-side-plank",
      "name": "Knee side plank",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Lie on side, lower forearm on floor with elbow under shoulder, knees bent and stacked.",
        "Raise hips into a straight line from knees through hips to head, supporting weight on lower forearm and lower knee.",
        "Top hand on hip.",
        "Hold, then lower hips.",
        "Both knees stay bent and down."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-side-plank-feef74bd9b2b.gif?alt=media&token=ceef9d0b-41b1-45d0-964a-5f77228e9c07",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-side-plank-4e1f7542ad59.png?alt=media&token=35ee3f39-1460-48b4-bfc1-bbbb3e88f79b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/knee-side-plank/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e4e486ba83be887d407ac98f6286353bdd5542a6b8bffb8739da613aa3bd1540",
          "bytes": 222930,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-side-plank-e4e486ba83be887d.gif?alt=media&token=5d8f9624-0eee-4b64-b33f-c6a9131082d1",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-side-plank-e4e486ba83be887d.gif",
          "verifiedAt": "2026-10-07T23:29:58.232Z"
        },
        "webp": {
          "sha256": "d542306107e0e3e7505d99acb4f458804c3c37a13085353151e28be91fa11d98",
          "bytes": 348458,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-side-plank-d542306107e0e3e7.webp?alt=media&token=e4a60a5b-03a9-4690-8702-7c53c5d691cd",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-side-plank-d542306107e0e3e7.webp",
          "verifiedAt": "2026-10-07T23:30:00.757Z"
        },
        "poster": {
          "sha256": "6dcd2eda351a9bb579545190fe2ed4ee2cdfc89f64e82f47199e02c0c71bf613",
          "bytes": 61517,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-side-plank-6dcd2eda351a9bb5.png?alt=media&token=5d97b55f-4cfa-4ddb-a991-afb200363150",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-side-plank-6dcd2eda351a9bb5.png",
          "verifiedAt": "2026-10-07T23:29:59.765Z"
        }
      }
    },
    {
      "id": "trainai-knee-to-wall-ankle-mobility",
      "slug": "knee-to-wall-ankle-mobility",
      "name": "Knee-to-wall ankle mobility",
      "category": "Mobility",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Right heel stays completely planted.",
        "Gently bend right knee forward toward wall over middle toes, then move back.",
        "Hands lightly on wall, no heel lift.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-to-wall-ankle-mobility-a127e2657965.gif?alt=media&token=26f30241-f6dd-4899-a3a4-ee516354f035",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-knee-to-wall-ankle-mobility-882d04ee2501.png?alt=media&token=b167b7f3-d207-4921-aced-a4c96bb6847d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/knee-to-wall-ankle-mobility/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "04d837ecefad0d71db0c10646fdce87afc3a44392dab986a2a313d364f72e14d",
          "bytes": 280748,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-to-wall-ankle-mobility-04d837ecefad0d71.gif?alt=media&token=f17bb9b8-a7d8-476c-9fdf-d4280bc8e127",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-to-wall-ankle-mobility-04d837ecefad0d71.gif",
          "verifiedAt": "2026-10-07T23:30:03.202Z"
        },
        "webp": {
          "sha256": "e5bf297a8cd6e61dd9ccdd9f259989a587f27feb0e3aedaa41d5407a13a7dad6",
          "bytes": 446116,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-to-wall-ankle-mobility-e5bf297a8cd6e61d.webp?alt=media&token=f64d1b2d-7ecf-4b1a-b057-b69a58b46972",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-to-wall-ankle-mobility-e5bf297a8cd6e61d.webp",
          "verifiedAt": "2026-10-07T22:46:22.853Z"
        },
        "poster": {
          "sha256": "9fea4699eef4d1d370a4b611818b59720e314ea66711635c928ec801ded5e117",
          "bytes": 52903,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-knee-to-wall-ankle-mobility-9fea4699eef4d1d3.png?alt=media&token=b1dd31e6-061a-4dec-b36d-6f62e9a12afd",
          "name": "trainai/creator-media/2026-10-07/trainai-knee-to-wall-ankle-mobility-9fea4699eef4d1d3.png",
          "verifiedAt": "2026-10-07T22:46:22.700Z"
        }
      }
    },
    {
      "id": "trainai-landmine-row",
      "slug": "landmine-row",
      "name": "Landmine row",
      "category": "Barbell accessories",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "barbell",
      "requiredEquipment": [
        "landmine",
        "barbell",
        "plates",
        "row-handle"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Straddle a barbell attached to a fixed floor landmine pivot ahead.",
        "Knees soft, hips hinged, back neutral.",
        "Hold close-grip row handle under free weighted end, arms extended.",
        "Pull weighted end toward lower chest, then lower along rigid bar arc.",
        "Torso and feet remain unchanged; pivot and plate geometry constant."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-landmine-row-22b6f25bd556.gif?alt=media&token=bea9665c-b312-475b-b91b-e154ff3114cc",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-landmine-row-0932c3413435.png?alt=media&token=5b03b83b-5444-46e8-939b-3fe9d78b9ea3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/landmine-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2540,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3fa5750508d876f0753c1554b99b8d2eda8ab05b109e9a60b33c3ebb75ded628",
          "bytes": 671575,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-landmine-row-3fa5750508d876f0.gif?alt=media&token=a036bc39-d69d-4812-9485-66893c1d2d27",
          "name": "trainai/creator-media/2026-10-07/trainai-landmine-row-3fa5750508d876f0.gif",
          "verifiedAt": "2026-10-07T23:30:10.117Z"
        },
        "webp": {
          "sha256": "233d967d8a5913080604f2971361c74f29188e185334385fe2de3fb4bbb5a9a5",
          "bytes": 1077524,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-landmine-row-233d967d8a591308.webp?alt=media&token=c2dd5cfb-f153-40ba-926f-517d0280318c",
          "name": "trainai/creator-media/2026-10-07/trainai-landmine-row-233d967d8a591308.webp",
          "verifiedAt": "2026-10-07T23:30:22.626Z"
        },
        "poster": {
          "sha256": "6561ba00f91477a546350930950d4b8d29b2f2ae67cdf66b4465fc2a99b22e3f",
          "bytes": 121825,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-landmine-row-6561ba00f91477a5.png?alt=media&token=82709558-0b95-46dd-acf9-c42eb8cc7163",
          "name": "trainai/creator-media/2026-10-07/trainai-landmine-row-6561ba00f91477a5.png",
          "verifiedAt": "2026-10-07T23:30:04.187Z"
        }
      }
    },
    {
      "id": "trainai-lat-pulldown",
      "slug": "lat-pulldown",
      "name": "Lat pulldown",
      "category": "Gym machines",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "lat-pulldown-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit at a fixed lat pulldown station, thighs under restraint, feet flat.",
        "Hold wide bar with overhand grip.",
        "Pull bar from overhead down toward upper chest, elbows down and outward, then extend arms overhead.",
        "Torso nearly upright, no behind-neck pulling.",
        "Cable stays attached to center of bar and high pulley."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lat-pulldown-237c69a4bef5.gif?alt=media&token=8da928fb-31bb-45ce-889c-fb11dbd79fc2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lat-pulldown-20f4c1867962.png?alt=media&token=7d98bc25-5668-4d3c-a761-a82fa3731cb2",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lat-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "eb10e617e45d054e9b2482b71d186e6b4eb1b2e30e2de8f52867d8cee3d8f628",
          "bytes": 453246,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lat-pulldown-eb10e617e45d054e.gif?alt=media&token=1902e1dc-b30f-43db-b250-0876f2b1b913",
          "name": "trainai/creator-media/2026-10-07/trainai-lat-pulldown-eb10e617e45d054e.gif",
          "verifiedAt": "2026-10-07T23:30:08.698Z"
        },
        "webp": {
          "sha256": "4d61f9c05fcf110c578b6670ea9a4bf64cc6c1598a38a2e73f977b63e2d7a04d",
          "bytes": 700006,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lat-pulldown-4d61f9c05fcf110c.webp?alt=media&token=3e413679-b778-4316-8943-9036743bafd9",
          "name": "trainai/creator-media/2026-10-07/trainai-lat-pulldown-4d61f9c05fcf110c.webp",
          "verifiedAt": "2026-10-07T23:30:17.725Z"
        },
        "poster": {
          "sha256": "16e021310bbe968202acd6861e46a91d7e54f3ea4ce4742a3459d8060c355266",
          "bytes": 75170,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lat-pulldown-16e021310bbe9682.png?alt=media&token=610c41b8-5e5b-404e-a9e4-3dfbfda51e95",
          "name": "trainai/creator-media/2026-10-07/trainai-lat-pulldown-16e021310bbe9682.png",
          "verifiedAt": "2026-10-07T23:30:13.216Z"
        }
      }
    },
    {
      "id": "trainai-lateral-band-walk",
      "slug": "lateral-band-walk",
      "name": "Lateral band walk",
      "category": "Bands",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "mini-band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Place a mini-band around the legs as shown and adopt a shallow squat.",
        "Take a small step sideways, then bring the trailing foot closer without letting the band go slack.",
        "Keep knees tracking the toes and repeat in both directions."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-band-walk-f8c73182945e.gif?alt=media&token=2420e0d5-7b5f-4a91-89d1-776685d9f392",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-band-walk-b53e891f9546.png?alt=media&token=25d99220-5409-4d75-b94c-06508f3c0a90",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lateral-band-walk/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6a710b34eaf51b623b145a849fcb07dac13cfba367b4fbc3063807adfac15bf3",
          "bytes": 319171,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-band-walk-6a710b34eaf51b62.gif?alt=media&token=b8bd368d-b696-4fa2-85b8-3fda28828aa8",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-band-walk-6a710b34eaf51b62.gif",
          "verifiedAt": "2026-10-07T23:30:18.172Z"
        },
        "webp": {
          "sha256": "d11596b1cbc190252aa166343295e77ab3047b26f36fd29f7527e7c4475c45d1",
          "bytes": 555954,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-band-walk-d11596b1cbc19025.webp?alt=media&token=8fa14968-3a32-409b-81ea-ede63b665e8e",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-band-walk-d11596b1cbc19025.webp",
          "verifiedAt": "2026-10-07T22:46:26.108Z"
        },
        "poster": {
          "sha256": "6e3301bf5ccbb4dad2048fcaf22ae095849f212d4833bd700ec7d5bed9a702e8",
          "bytes": 54242,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-band-walk-6e3301bf5ccbb4da.png?alt=media&token=2108b9b0-6612-4aff-99ca-8ba2ac755e49",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-band-walk-6e3301bf5ccbb4da.png",
          "verifiedAt": "2026-10-07T22:46:25.584Z"
        }
      }
    },
    {
      "id": "trainai-lateral-leg-swing",
      "slug": "lateral-leg-swing",
      "name": "Lateral leg swing",
      "category": "Dynamic warm-up",
      "target": "abductors",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Face a sturdy waist-high rail, both hands rest on it.",
        "left foot planted.",
        "Swing right leg gently out to right then across in front of left leg.",
        "Pelvis level and torso upright, no rotation of rail or stance.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-leg-swing-2680a36bca70.gif?alt=media&token=bdd32dcd-2dd9-4eb3-a5c1-ed35d26be1a3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-leg-swing-1acd73327fbf.png?alt=media&token=9144238a-4074-4114-bba7-bfe49134a826",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lateral-leg-swing/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 1900,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "574a4528cd821ae4644c0ba72fe04cb42d4c7e9479dbd116ac77b73d0440a5f8",
          "bytes": 199505,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-leg-swing-574a4528cd821ae4.gif?alt=media&token=6c325e11-1e68-40e7-b900-5b69f538f6d9",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-leg-swing-574a4528cd821ae4.gif",
          "verifiedAt": "2026-10-07T23:30:23.379Z"
        },
        "webp": {
          "sha256": "ef45160c284f43255ffa883c5e670c11397d653c6ca9f337fac5b74b2efa15ac",
          "bytes": 302582,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-leg-swing-ef45160c284f4325.webp?alt=media&token=fcceb857-1d51-48eb-b8c6-7808a55a0f60",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-leg-swing-ef45160c284f4325.webp",
          "verifiedAt": "2026-10-07T22:46:27.432Z"
        },
        "poster": {
          "sha256": "2ff9507bbdbb9f525d2196804c20cb1aa3de06736ac0486b98118e311f9c41b4",
          "bytes": 49507,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-leg-swing-2ff9507bbdbb9f52.png?alt=media&token=564bc2e7-f5b8-4f73-b460-9334326e3009",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-leg-swing-2ff9507bbdbb9f52.png",
          "verifiedAt": "2026-10-07T22:46:27.107Z"
        }
      }
    },
    {
      "id": "trainai-lateral-line-hop",
      "slug": "lateral-line-hop",
      "name": "Lateral line hop",
      "category": "Power and agility",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand beside a line with feet close together and knees softly bent.",
        "Make a small two-foot hop across the line and land quietly.",
        "Regain balance and hop back without twisting the knees."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-line-hop-cdd33ec66f7a.gif?alt=media&token=814a8da7-e49b-49cc-89e1-077da7c6e8a5",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-line-hop-57d67fca4021.png?alt=media&token=42b735e5-6a15-42f8-88c0-0464f93d9b21",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lateral-line-hop/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b6e12eeba3cecef962de88f3e21bd606226032fe73e851d45d06d81027c5ff96",
          "bytes": 227450,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-line-hop-b6e12eeba3cecef9.gif?alt=media&token=e32c420f-8519-4a8a-b8ae-62e5112c93ab",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-line-hop-b6e12eeba3cecef9.gif",
          "verifiedAt": "2026-10-07T23:30:22.589Z"
        },
        "webp": {
          "sha256": "eb8a8db88e6ec8a884dc26d2e6ee09dc373af3803d14dfead823b559da7d0cf5",
          "bytes": 366442,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-line-hop-eb8a8db88e6ec8a8.webp?alt=media&token=4c7c8c20-5d1a-4fe7-89ef-d650a46a12dd",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-line-hop-eb8a8db88e6ec8a8.webp",
          "verifiedAt": "2026-10-07T22:46:28.046Z"
        },
        "poster": {
          "sha256": "cd460f7ebb01ce1dce4381c1d607159caa6c3a0a86d3ba46b67ec2ff523efa2e",
          "bytes": 39326,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-line-hop-cd460f7ebb01ce1d.png?alt=media&token=2afd0de1-3c98-4e58-b0dd-2c066207c7b1",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-line-hop-cd460f7ebb01ce1d.png",
          "verifiedAt": "2026-10-07T22:46:27.894Z"
        }
      }
    },
    {
      "id": "trainai-lateral-lunge",
      "slug": "lateral-lunge",
      "name": "Lateral lunge",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start standing with feet together.",
        "Step the right foot far to the viewer left and sit the hips toward that right heel by bending only the right knee.",
        "The left leg stretches straight to the viewer right, with its knee extended.",
        "Bottom pose must be clearly ASYMMETRIC: one bent knee under hips on one side and one long straight leg to the other side.",
        "Push through the bent-leg foot and return feet together.",
        "Do not make a centered wide squat and do not bend both knees at bottom."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-lunge-d1712d667997.gif?alt=media&token=87637da1-8b28-4393-868b-03b6148e37d4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-lunge-8ec4cbb3fcd4.png?alt=media&token=ddebc58f-bf22-464e-95e4-7bfcfae49f41",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lateral-lunge/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2100,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "38c11dd705191c25415cf3cb2b2746163f45f3d8e7ba874a2add07ea9fd8f285",
          "bytes": 238581,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-lunge-38c11dd705191c25.gif?alt=media&token=94333235-7419-42ca-94f3-d5472a13216a",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-lunge-38c11dd705191c25.gif",
          "verifiedAt": "2026-10-07T23:30:27.983Z"
        },
        "webp": {
          "sha256": "9e9a9da528c8693507ee49f2afbf3b1c2b1ceed79ddca67b435d24d6bfd84529",
          "bytes": 389874,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-lunge-9e9a9da528c86935.webp?alt=media&token=f7c93871-b222-4a15-9c9e-e7a6f0aecc0f",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-lunge-9e9a9da528c86935.webp",
          "verifiedAt": "2026-10-07T22:46:28.928Z"
        },
        "poster": {
          "sha256": "98853d032d30a0304fa159a2d4d7aaf34d70320bf0e8c4096f42b7de3ff27280",
          "bytes": 41050,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-lunge-98853d032d30a030.png?alt=media&token=f7f8cd30-c0df-4822-8c3f-8635cf112a4e",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-lunge-98853d032d30a030.png",
          "verifiedAt": "2026-10-07T22:46:28.752Z"
        }
      }
    },
    {
      "id": "trainai-lateral-step-up",
      "slug": "lateral-step-up",
      "name": "Lateral step-up",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand alongside a low exercise step, step sideways onto it with the nearer foot, straighten that leg to rise and bring the trailing foot alongside on top.",
        "Reverse the same sideways path to return to floor.",
        "Torso faces the same direction throughout; no forward step-up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-step-up-d80f398ea0a1.gif?alt=media&token=101128b0-46fb-42d1-a129-46414a11ba1a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lateral-step-up-c7c7a96d363f.png?alt=media&token=c3125047-7e78-4c4b-8e77-398e64078126",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lateral-step-up/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5e0e14fbe602b416ab875fc2d2392e8a175ec916733bb42ca4e89bfd1fd80782",
          "bytes": 231863,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-step-up-5e0e14fbe602b416.gif?alt=media&token=a2da74c3-ef8f-4a47-829b-1857c13c3bc5",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-step-up-5e0e14fbe602b416.gif",
          "verifiedAt": "2026-10-07T23:30:29.204Z"
        },
        "webp": {
          "sha256": "7841775daa745a502232e8b633691214f0f49405789e06cb4a2906fea2952d7d",
          "bytes": 364530,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-step-up-7841775daa745a50.webp?alt=media&token=5151e8a6-fdfe-4e5e-8829-36cb46c23184",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-step-up-7841775daa745a50.webp",
          "verifiedAt": "2026-10-07T23:30:38.382Z"
        },
        "poster": {
          "sha256": "d3287688328b9a0fc41cb8967bd2038122e86176ce376502f8e2d249146015bc",
          "bytes": 63732,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lateral-step-up-d3287688328b9a0f.png?alt=media&token=5239441b-1d06-4b45-8df1-7acc70c99488",
          "name": "trainai/creator-media/2026-10-07/trainai-lateral-step-up-d3287688328b9a0f.png",
          "verifiedAt": "2026-10-07T23:30:29.618Z"
        }
      }
    },
    {
      "id": "trainai-leg-extension",
      "slug": "leg-extension",
      "name": "Leg extension",
      "category": "Gym machines",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "leg-extension-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright in a fixed leg extension machine, back against pad and hands on handles.",
        "Knees aligned with machine pivot; padded roller across front of lower shins above ankles.",
        "Begin knees bent, straighten knees to lift roller forward/up until legs nearly straight, then lower.",
        "Thighs, hips and torso stationary."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-leg-extension-8de77391d7b2.gif?alt=media&token=d0406c28-893c-4d13-b2fb-a58abf42902d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-leg-extension-930a64adfb45.png?alt=media&token=b7885388-8fa2-45b6-af5c-7be988c93ddb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/leg-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2d41829228b450d66dbb6a128e968dd94e9f576b5d8c372789c7f093f403a813",
          "bytes": 661168,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-extension-2d41829228b450d6.gif?alt=media&token=72deeba1-2283-44a1-bcb7-841fc1fbc57b",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-extension-2d41829228b450d6.gif",
          "verifiedAt": "2026-10-07T23:30:34.632Z"
        },
        "webp": {
          "sha256": "80a941ec6a870ba3f2a2a92def34bd626ded30200b8d707352fac06e6bfa6c69",
          "bytes": 1002248,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-extension-80a941ec6a870ba3.webp?alt=media&token=06c2ef0d-4a37-4db4-94ce-5574379c813c",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-extension-80a941ec6a870ba3.webp",
          "verifiedAt": "2026-10-07T22:46:32.560Z"
        },
        "poster": {
          "sha256": "cd0e05e154b25a4655e0258c041d959bffeb6db185c6d25e35dc4f1f60e8c969",
          "bytes": 110613,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-extension-cd0e05e154b25a46.png?alt=media&token=1dab22e3-17cc-4efd-843d-394fb009c2ed",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-extension-cd0e05e154b25a46.png",
          "verifiedAt": "2026-10-07T22:46:31.591Z"
        }
      }
    },
    {
      "id": "trainai-leg-press",
      "slug": "leg-press",
      "name": "Leg press",
      "category": "Gym machines",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "leg-press-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the leg-press seat so your back and pelvis stay supported.",
        "Place both feet on the platform and lower the weight only as far as you can keep your pelvis against the pad.",
        "Press away without snapping the knees straight."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-leg-press-f052791f1dc1.gif?alt=media&token=bd90a63c-ee0f-4255-8485-35d17fc00235",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-leg-press-fa5a8ec35845.png?alt=media&token=d0f912bf-f5b1-42ce-9f0c-f7cb8013bc04",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/leg-press/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f0c8755f961a00e212a017a4c54416965d7ca194bb917d683b7edb98bf0a321d",
          "bytes": 657235,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-press-f0c8755f961a00e2.gif?alt=media&token=3272927a-a5b7-455a-ae37-154ade86f6c6",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-press-f0c8755f961a00e2.gif",
          "verifiedAt": "2026-10-07T23:30:35.239Z"
        },
        "webp": {
          "sha256": "ad877fcb5d71ce8db1ab7031368fe509d7f16883d0806e920825a8e19bba8c02",
          "bytes": 1101078,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-press-ad877fcb5d71ce8d.webp?alt=media&token=a6ec67c8-31cd-4478-81da-4a016be95997",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-press-ad877fcb5d71ce8d.webp",
          "verifiedAt": "2026-10-07T22:46:34.091Z"
        },
        "poster": {
          "sha256": "8a4311fe3a08688ddded34f23a7f43319c8e7556ba93289a20e5e535e7203965",
          "bytes": 59159,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-press-8a4311fe3a08688d.png?alt=media&token=c34d462d-9329-49cc-b8bb-788efb32bfc8",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-press-8a4311fe3a08688d.png",
          "verifiedAt": "2026-10-07T22:46:33.217Z"
        }
      }
    },
    {
      "id": "trainai-leg-swing-forward-and-back",
      "slug": "leg-swing-forward-and-back",
      "name": "Leg swing forward and back",
      "category": "Dynamic warm-up",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Stand sideways beside sturdy waist-high rail, left hand holds rail and left foot planted.",
        "Swing right leg gently forward from hip, then backward, knee softly extended.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-leg-swing-forward-and-back-956413f3e511.gif?alt=media&token=8a1dcae9-86b7-4d5d-9898-264ea3da26e4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-leg-swing-forward-and-back-305ac8902da9.png?alt=media&token=52a0a33b-11e7-438d-9664-4a6cc1b07c8d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/leg-swing-forward-and-back/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4c6785edc1f3a185422be5c5e5bff9ce17972f5f78fd3670980f385f153fcbdd",
          "bytes": 480851,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-swing-forward-and-back-4c6785edc1f3a185.gif?alt=media&token=b6e536d0-fba8-45d1-8fd0-66578f39028a",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-swing-forward-and-back-4c6785edc1f3a185.gif",
          "verifiedAt": "2026-10-07T23:30:38.427Z"
        },
        "webp": {
          "sha256": "1a2da270e12c2a56800c28a490c5c7dea149d32a391b303edebd82449d72a207",
          "bytes": 763548,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-swing-forward-and-back-1a2da270e12c2a56.webp?alt=media&token=817531d6-949c-4e2c-a443-1d40e9171112",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-swing-forward-and-back-1a2da270e12c2a56.webp",
          "verifiedAt": "2026-10-07T23:30:41.329Z"
        },
        "poster": {
          "sha256": "1a5cfeeca7fde90b460569bded67c127e0bf89bdc246f5551ba3a4966e125486",
          "bytes": 84726,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-leg-swing-forward-and-back-1a5cfeeca7fde90b.png?alt=media&token=69dc9177-0037-486a-ac25-301ae97f031f",
          "name": "trainai/creator-media/2026-10-07/trainai-leg-swing-forward-and-back-1a5cfeeca7fde90b.png",
          "verifiedAt": "2026-10-07T23:30:39.834Z"
        }
      }
    },
    {
      "id": "trainai-low-impact-skater-step",
      "slug": "low-impact-skater-step",
      "name": "Low-impact skater step",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Low-impact skater side step, not a jump.",
        "Step onto right foot, bend right knee slightly, let left foot cross lightly behind right as opposite arm reaches across.",
        "Return through center then mirror onto left foot with right foot behind.",
        "One foot stays grounded.",
        "Shallow hip hinge, smooth lateral transfer.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-low-impact-skater-step-1013facba4f5.gif?alt=media&token=dc78cf95-ac59-4a75-89e7-0d653b1cb51a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-low-impact-skater-step-4c4ecedea220.png?alt=media&token=a805a0e1-80c8-41c4-bfa4-a4128afc2002",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/low-impact-skater-step/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2f39dab9980d5a628b5a0785f84e462a66c21282abd1fbfadb16a3ca9a85f283",
          "bytes": 307115,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-low-impact-skater-step-2f39dab9980d5a62.gif?alt=media&token=1f5be8d3-0777-40ea-9f7b-6ad278438f93",
          "name": "trainai/creator-media/2026-10-07/trainai-low-impact-skater-step-2f39dab9980d5a62.gif",
          "verifiedAt": "2026-10-07T23:30:42.294Z"
        },
        "webp": {
          "sha256": "1fefda140634e3307b9f98ecb3027b24beeb5809f437f49ee9ab44cc6f484dda",
          "bytes": 508556,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-low-impact-skater-step-1fefda140634e330.webp?alt=media&token=df5e00d2-ae1d-438d-a9b4-670cc88e56f9",
          "name": "trainai/creator-media/2026-10-07/trainai-low-impact-skater-step-1fefda140634e330.webp",
          "verifiedAt": "2026-10-07T22:46:35.101Z"
        },
        "poster": {
          "sha256": "7d9b530e50455b0df58d14891ba3691a24663357031b00506e28fd620024ac8b",
          "bytes": 49798,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-low-impact-skater-step-7d9b530e50455b0d.png?alt=media&token=ed7bed9d-9fdf-4378-8d67-82fc16f77d46",
          "name": "trainai/creator-media/2026-10-07/trainai-low-impact-skater-step-7d9b530e50455b0d.png",
          "verifiedAt": "2026-10-07T22:46:35.184Z"
        }
      }
    },
    {
      "id": "trainai-low-step-up",
      "slug": "low-step-up",
      "name": "Low step-up",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start standing in front of a low exercise step.",
        "Place the nearer foot on the center of the step, press through it to lift the body and bring the other foot up beside it.",
        "Step back down under control, returning to the original floor stance.",
        "One smooth repetition, no jumping."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-low-step-up-f4922a1cf4a2.gif?alt=media&token=1aea0584-4ba0-4f41-bcca-e774b8cb0867",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-low-step-up-2c992e982c34.png?alt=media&token=31e7ea4d-e125-467b-807c-a97f786cc4a7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/low-step-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bbddc908b1ab52283d75faffcfc30cd6ea659a524a3e252bdcbe9795c1a56938",
          "bytes": 458591,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-low-step-up-bbddc908b1ab5228.gif?alt=media&token=fd34896b-becb-4ccd-b3b2-e6b83ebecae2",
          "name": "trainai/creator-media/2026-10-07/trainai-low-step-up-bbddc908b1ab5228.gif",
          "verifiedAt": "2026-10-07T23:30:42.594Z"
        },
        "webp": {
          "sha256": "e401bb6ba50db9634d0863d014d39a401ced1d344573345e07d5059df4f00976",
          "bytes": 742702,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-low-step-up-e401bb6ba50db963.webp?alt=media&token=cd3ac098-a48f-4056-91e4-529b771509ea",
          "name": "trainai/creator-media/2026-10-07/trainai-low-step-up-e401bb6ba50db963.webp",
          "verifiedAt": "2026-10-07T23:30:48.609Z"
        },
        "poster": {
          "sha256": "fabd0edbf321b53a18155c3ba501f1a16245528bfe66535348ab2a0f4f625b94",
          "bytes": 86905,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-low-step-up-fabd0edbf321b53a.png?alt=media&token=77785451-d3e4-49eb-8b60-69f5a56cd49c",
          "name": "trainai/creator-media/2026-10-07/trainai-low-step-up-fabd0edbf321b53a.png",
          "verifiedAt": "2026-10-07T23:30:43.645Z"
        }
      }
    },
    {
      "id": "trainai-lying-leg-curl",
      "slug": "lying-leg-curl",
      "name": "Lying leg curl",
      "category": "Gym machines",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "lying-leg-curl-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie face down on fixed lying leg curl bench, hips supported, hands on front handles.",
        "Moving roller behind ankles.",
        "Start knees nearly straight, flex both knees to lift heels toward buttocks, then lower.",
        "Thighs remain on pad and pelvis does not lift.",
        "Only lower legs and attached roller move."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lying-leg-curl-eaf0e65dabc4.gif?alt=media&token=04d83ff1-8ae4-449a-934c-80f4e367c7cd",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-lying-leg-curl-f0a648f35311.png?alt=media&token=4fe9e944-87d0-4b6c-9e5e-1f7b9cc197d1",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/lying-leg-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8059715c4b6466753167210e2850b5a045b29b1d0a17a2338f773dcbe2426685",
          "bytes": 514565,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lying-leg-curl-8059715c4b646675.gif?alt=media&token=e55bfae4-2afc-4e51-93a5-84c931bfe4ea",
          "name": "trainai/creator-media/2026-10-07/trainai-lying-leg-curl-8059715c4b646675.gif",
          "verifiedAt": "2026-10-07T23:30:48.395Z"
        },
        "webp": {
          "sha256": "e85645ba6a2c8806bb9f8c5df4474b2d126666ae6200307e4ab0769d8862042f",
          "bytes": 838570,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lying-leg-curl-e85645ba6a2c8806.webp?alt=media&token=aa50024a-cf34-466e-a4e6-d41e28851b0c",
          "name": "trainai/creator-media/2026-10-07/trainai-lying-leg-curl-e85645ba6a2c8806.webp",
          "verifiedAt": "2026-10-07T23:30:51.002Z"
        },
        "poster": {
          "sha256": "83f89940bea2c5db8c1a0e65b04d6030fbe474ac6e07133266b07821d9206158",
          "bytes": 88381,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-lying-leg-curl-83f89940bea2c5db.png?alt=media&token=3690c40d-3e8c-4285-ab6b-8198a4c25920",
          "name": "trainai/creator-media/2026-10-07/trainai-lying-leg-curl-83f89940bea2c5db.png",
          "verifiedAt": "2026-10-07T23:30:51.567Z"
        }
      }
    },
    {
      "id": "trainai-machine-chest-press",
      "slug": "machine-chest-press",
      "name": "Machine chest press",
      "category": "Gym machines",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "chest-press-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the chest-press seat so the handles are near mid-chest.",
        "Keep your back supported and wrists aligned as you press the handles forward.",
        "Return slowly without letting the shoulders roll forward."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-chest-press-ce3907307d16.gif?alt=media&token=6dd6aeb4-38cd-4318-b3df-4e6084267cbf",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-chest-press-c7203724cd54.png?alt=media&token=37fe1ed8-063f-4820-b8d7-1ee6baafbb16",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-chest-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "174b0904edb541b477191ca3e7b555aeddad2a72937088aa127f864b1f14f687",
          "bytes": 901939,
          "mimeType": "image/gif",
          "width": 400,
          "height": 400,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-chest-press-174b0904edb541b4.gif?alt=media&token=c33adee0-114c-474b-a73d-b7dce1013b3c",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-chest-press-174b0904edb541b4.gif",
          "verifiedAt": "2026-10-07T23:31:06.404Z"
        },
        "webp": {
          "sha256": "3f3b9b0165602d1328e4f4023ea0dc49cf44a07f76c1f44914f478dccef438a5",
          "bytes": 1355748,
          "mimeType": "image/webp",
          "width": 400,
          "height": 400,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-chest-press-3f3b9b0165602d13.webp?alt=media&token=452108d7-aaeb-4d29-aa23-2772bc0a069d",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-chest-press-3f3b9b0165602d13.webp",
          "verifiedAt": "2026-10-07T23:30:59.755Z"
        },
        "poster": {
          "sha256": "4a9ac0d4348a86131946d1fd4f42dce39add975fa35305ef34dff19151ae84a1",
          "bytes": 142851,
          "mimeType": "image/png",
          "width": 400,
          "height": 400,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-chest-press-4a9ac0d4348a8613.png?alt=media&token=010b58a9-a783-42a3-9faf-af08c1608a4b",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-chest-press-4a9ac0d4348a8613.png",
          "verifiedAt": "2026-10-07T23:30:53.832Z"
        }
      }
    },
    {
      "id": "trainai-machine-chest-supported-row",
      "slug": "machine-chest-supported-row",
      "name": "Machine chest-supported row",
      "category": "Gym machines",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "chest-supported-row-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the row machine so the chest pad supports your trunk and the handles are within reach.",
        "Pull the elbows back while keeping your chest on the pad.",
        "Return slowly without rounding the shoulders forward."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-chest-supported-row-571df0d63c53.gif?alt=media&token=e03accfa-252c-4a11-bd3a-9febc5e332f7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-chest-supported-row-67c4cf591443.png?alt=media&token=a6b1ebfa-d2f3-498d-8268-d91eb706b35e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-chest-supported-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "07c7304441ff1ebff53aef56f248a9047bbc518c35f23b91ea5c7a2a290bdbbe",
          "bytes": 578341,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-chest-supported-row-07c7304441ff1ebf.gif?alt=media&token=4326d26a-b280-4eb3-a919-50c8e4f57970",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-chest-supported-row-07c7304441ff1ebf.gif",
          "verifiedAt": "2026-10-07T23:30:57.059Z"
        },
        "webp": {
          "sha256": "099b2a79697798967a791d118315890e5b3c5613ab204615d1c892eda548b842",
          "bytes": 937980,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-chest-supported-row-099b2a7969779896.webp?alt=media&token=e089468a-2b95-4515-a677-4c88c7dd1e16",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-chest-supported-row-099b2a7969779896.webp",
          "verifiedAt": "2026-10-07T22:46:40.499Z"
        },
        "poster": {
          "sha256": "3721a550a0e64bf20539c3bf6c39d74ac8654dee97a8de522b9f903ab0996bd4",
          "bytes": 91538,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-chest-supported-row-3721a550a0e64bf2.png?alt=media&token=d86c5202-8c4f-4920-b56e-4235d7001734",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-chest-supported-row-3721a550a0e64bf2.png",
          "verifiedAt": "2026-10-07T22:46:41.044Z"
        }
      }
    },
    {
      "id": "trainai-machine-hip-abduction",
      "slug": "machine-hip-abduction",
      "name": "Machine hip abduction",
      "category": "Gym machines",
      "target": "abductors",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "hip-abduction-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright in fixed hip abduction machine, knees bent, padded contacts on OUTSIDE of knees, feet on supports.",
        "Start knees near hip width, move both knees outward against pads, then return.",
        "Pelvis and torso stationary, only legs and connected machine arms move."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-hip-abduction-629253b6b835.gif?alt=media&token=0669749d-c421-45fd-8709-6b0d2174bbf6",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-hip-abduction-9d3879d5701f.png?alt=media&token=32e2c01a-6334-4ad9-b6d1-160b3bb2eff3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-hip-abduction/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "1b8b25c0d614e6d205208da2dfc575b0fc675aa7fb3e68ab864743429c763999",
          "bytes": 618481,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-abduction-1b8b25c0d614e6d2.gif?alt=media&token=fb466e14-fd71-44ae-97ff-071ec151ca4a",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-abduction-1b8b25c0d614e6d2.gif",
          "verifiedAt": "2026-10-07T23:31:02.375Z"
        },
        "webp": {
          "sha256": "4a855da65eeaaa929d2ecc195a9096494a6e1c7b68bccd8ba77f6aaefaf3eae4",
          "bytes": 914978,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-abduction-4a855da65eeaaa92.webp?alt=media&token=f9d8c9eb-bfd0-495b-8fb3-92aaf5bb4c36",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-abduction-4a855da65eeaaa92.webp",
          "verifiedAt": "2026-10-07T22:46:44.746Z"
        },
        "poster": {
          "sha256": "667c16a7b139b1cf861de4d259f695aeb8d5d1db0907b9917e4b31f74583b00a",
          "bytes": 94505,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-abduction-667c16a7b139b1cf.png?alt=media&token=b4b32402-4b9f-4665-812d-3210d7ce6951",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-abduction-667c16a7b139b1cf.png",
          "verifiedAt": "2026-10-07T22:46:42.453Z"
        }
      }
    },
    {
      "id": "trainai-machine-hip-adduction",
      "slug": "machine-hip-adduction",
      "name": "Machine hip adduction",
      "category": "Gym machines",
      "target": "adductors",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "hip-adduction-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright in fixed hip adduction machine, padded contacts on INSIDE of knees, feet on supports.",
        "Start legs comfortably apart, squeeze knees inward until nearly together, then reopen.",
        "Pelvis stays on seat and torso still.",
        "Connected machine arms follow knees."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-hip-adduction-78f2d4f4aeac.gif?alt=media&token=f77b8ded-545c-4a2a-afa7-cd7054b5d471",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-hip-adduction-b52232c9d614.png?alt=media&token=9b82d499-f327-406e-a1ec-14995202068d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-hip-adduction/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "92284cadc05156b94994ebe79c0918d31ac8d9b1c1ab0b0805278f978dece9bf",
          "bytes": 580785,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-adduction-92284cadc05156b9.gif?alt=media&token=0750318f-f03a-4375-aace-31bf426bc791",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-adduction-92284cadc05156b9.gif",
          "verifiedAt": "2026-10-07T23:31:02.506Z"
        },
        "webp": {
          "sha256": "4ee1813b2071fad4522e0305c679fbd845e7226a443c49dc906969ff292005aa",
          "bytes": 894058,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-adduction-4ee1813b2071fad4.webp?alt=media&token=3ee6cd18-17d2-4b68-a257-e2f439729216",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-adduction-4ee1813b2071fad4.webp",
          "verifiedAt": "2026-10-07T22:46:43.978Z"
        },
        "poster": {
          "sha256": "5e4d70740332bf1a17353f48b1be8446a6a18efbfb9255d70dff698244c5c532",
          "bytes": 104883,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-adduction-5e4d70740332bf1a.png?alt=media&token=42ea1299-1a1d-43c6-b939-0acac321a8df",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-adduction-5e4d70740332bf1a.png",
          "verifiedAt": "2026-10-07T22:46:44.191Z"
        }
      }
    },
    {
      "id": "trainai-machine-hip-thrust",
      "slug": "machine-hip-thrust",
      "name": "Machine hip thrust",
      "category": "Gym machines",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "hip-thrust-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Use a fixed hip thrust machine, upper back supported on pad and padded belt across hips.",
        "Feet flat on platform.",
        "Extend hips from lowered position until torso and thighs form straight line, then lower.",
        "Head follows torso with chin gently tucked.",
        "Machine base and footplate fixed, belt and lever move with hips."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-hip-thrust-e3427d01bb84.gif?alt=media&token=519dd121-2e0d-4442-a8d7-4b04a2ed2471",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-hip-thrust-1adbb00b645c.png?alt=media&token=3d50d138-4a8e-4349-b906-e5b2a1d3c3f1",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-hip-thrust/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7ea961ec1f0515884ab8d995b491894e03b1c5ed9c928e41709d07ad7cb0735d",
          "bytes": 676654,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-thrust-7ea961ec1f051588.gif?alt=media&token=16f38532-e5b9-4be6-8e2a-b15b003593e2",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-thrust-7ea961ec1f051588.gif",
          "verifiedAt": "2026-10-07T23:31:07.086Z"
        },
        "webp": {
          "sha256": "f8164572c4985ae72bcecd0b6ed9dc3198e13eb3b0972542aac15456c7b3e411",
          "bytes": 1075424,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-thrust-f8164572c4985ae7.webp?alt=media&token=ed586659-6126-44db-96b8-d69335630eea",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-thrust-f8164572c4985ae7.webp",
          "verifiedAt": "2026-10-07T22:46:48.151Z"
        },
        "poster": {
          "sha256": "943ae75f82284e14eaebfacf2b0ccebfe707b55e9bd081dd6b4f9d197d08e5f0",
          "bytes": 57043,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-hip-thrust-943ae75f82284e14.png?alt=media&token=f1a143e1-a84b-431c-ae87-e78eedc23a0d",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-hip-thrust-943ae75f82284e14.png",
          "verifiedAt": "2026-10-07T22:46:45.346Z"
        }
      }
    },
    {
      "id": "trainai-machine-seated-row",
      "slug": "machine-seated-row",
      "name": "Machine seated row",
      "category": "Gym machines",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "row-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright in fixed seated row machine, feet planted on foot supports.",
        "Hold handles with arms extended ahead, pull elbows backward close to sides until handles approach lower ribs, then return.",
        "No torso rocking, lever attachment points stay connected and machine base stays still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-seated-row-b41150fa3647.gif?alt=media&token=fe2cf855-46b4-485b-99c4-5a459f69ac5b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-seated-row-87d7c39331cc.png?alt=media&token=9fc12eab-b623-4d21-9c6c-9b636ad3f3dd",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-seated-row/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a28d52a01b238c36767450cf84c2ad15efd19a39700f58d616585ad4a920b180",
          "bytes": 914330,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-seated-row-a28d52a01b238c36.gif?alt=media&token=2be4e3d5-2ca7-42a2-82a6-f29753dc6904",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-seated-row-a28d52a01b238c36.gif",
          "verifiedAt": "2026-10-07T23:31:07.025Z"
        },
        "webp": {
          "sha256": "2ed01922cd8fdac400435c92b494e5c91aa5797214b6a202abf506a7992d92a9",
          "bytes": 1382558,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-seated-row-2ed01922cd8fdac4.webp?alt=media&token=2cd677b3-9127-49ba-bc25-c9e7902e99d4",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-seated-row-2ed01922cd8fdac4.webp",
          "verifiedAt": "2026-10-07T22:46:48.108Z"
        },
        "poster": {
          "sha256": "4b5032c81e10af7ab658f5fcc88031ce7e46f524bed04d93c45487f24d0bc0b8",
          "bytes": 80179,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-seated-row-4b5032c81e10af7a.png?alt=media&token=e32a655b-40d4-4e81-9853-a4e2ad124284",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-seated-row-4b5032c81e10af7a.png",
          "verifiedAt": "2026-10-07T22:46:48.785Z"
        }
      }
    },
    {
      "id": "trainai-machine-shoulder-press",
      "slug": "machine-shoulder-press",
      "name": "Machine shoulder press",
      "category": "Gym machines",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "shoulder-press-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the shoulder-press seat so the handles start near shoulder height.",
        "Keep your back supported while pressing upward through a comfortable range.",
        "Lower the handles with control without arching your lower back."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-shoulder-press-1320cf69c8c5.gif?alt=media&token=a4b5a32a-9c6b-4360-87da-2424d528ef82",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-shoulder-press-721b1d11a1c6.png?alt=media&token=b1c1e5e0-490b-4107-b399-b1e4f5371d13",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-shoulder-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "cb4677932b218c367adc38d31d2e784e74d3aa357bee5d9f52d185fc026c3026",
          "bytes": 785759,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-shoulder-press-cb4677932b218c36.gif?alt=media&token=6bc43d28-eaf7-4847-898b-a5128d810b5e",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-shoulder-press-cb4677932b218c36.gif",
          "verifiedAt": "2026-10-07T23:31:12.106Z"
        },
        "webp": {
          "sha256": "496cf5402af3f95ff968fb441d01a3c5ee5eb56aa051b7a7eeaa19789aecb50f",
          "bytes": 1176992,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-shoulder-press-496cf5402af3f95f.webp?alt=media&token=306ef1f5-cfcf-42fa-8792-191e31250fa8",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-shoulder-press-496cf5402af3f95f.webp",
          "verifiedAt": "2026-10-07T23:31:14.912Z"
        },
        "poster": {
          "sha256": "b12d096138deda15727375d615ae835e5fbd5aa5d138b2c7d34b6bf677fcc58b",
          "bytes": 127271,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-shoulder-press-b12d096138deda15.png?alt=media&token=f42527bb-688a-4dc2-80d1-2e36885921f5",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-shoulder-press-b12d096138deda15.png",
          "verifiedAt": "2026-10-07T23:31:10.239Z"
        }
      }
    },
    {
      "id": "trainai-machine-standing-calf-raise",
      "slug": "machine-standing-calf-raise",
      "name": "Machine standing calf raise",
      "category": "Gym machines",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "standing-calf-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand under shoulder pads of fixed calf raise machine with balls of feet on platform and heels free.",
        "Keep knees nearly straight and torso tall.",
        "Lift heels to rise onto toes, then lower heels.",
        "Shoulder carriage moves slightly vertically with body; base and rails stay fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-standing-calf-raise-1a0f9f7a809b.gif?alt=media&token=f45d0f51-5451-44af-96bf-b5a78f4f54de",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-machine-standing-calf-raise-e7f1f46a7dab.png?alt=media&token=3cc69604-9995-428d-aca3-2bb03db25fe7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-standing-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a79fcc8acc18808c137d66ee1949edbff75c6c87b051cd32fe62bbc70a175366",
          "bytes": 407718,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-standing-calf-raise-a79fcc8acc18808c.gif?alt=media&token=1afb8f54-434a-47d1-b6c0-5bf70227956e",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-standing-calf-raise-a79fcc8acc18808c.gif",
          "verifiedAt": "2026-10-07T23:31:14.890Z"
        },
        "webp": {
          "sha256": "ca038c976dad7ab5e91d4c8966ce29d6aff28d11055ade3894796e0a71ea78cc",
          "bytes": 637312,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-standing-calf-raise-ca038c976dad7ab5.webp?alt=media&token=453faf44-aa03-4b14-8713-4cb8503b6dfc",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-standing-calf-raise-ca038c976dad7ab5.webp",
          "verifiedAt": "2026-10-07T23:31:16.674Z"
        },
        "poster": {
          "sha256": "fcf50d808d6ff643de70519c9813b9ca199bb78b50c84c5e09772ef15d40b6c2",
          "bytes": 65803,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-machine-standing-calf-raise-fcf50d808d6ff643.png?alt=media&token=81603c06-ee49-40dc-89d5-c51d8457c28a",
          "name": "trainai/creator-media/2026-10-07/trainai-machine-standing-calf-raise-fcf50d808d6ff643.png",
          "verifiedAt": "2026-10-07T23:31:16.016Z"
        }
      }
    },
    {
      "id": "trainai-march-in-place",
      "slug": "march-in-place",
      "name": "March in place",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Gentle march in place, one knee lifts then lowers followed by opposite knee; low comfortable knee height and opposite arm swing.",
        "No jumping."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-march-in-place-3b8f10bb4d8a.gif?alt=media&token=d7aaa938-7dc5-4218-adb7-4c04a2164cb5",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-march-in-place-ebe515b006ad.png?alt=media&token=c7af216e-b49c-46ab-9ee6-a71dda020304",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/march-in-place/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 1600,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d2a1ea8773bfaa57f6078f46740667cad7b7a4f9305f2911143ef5a2668da45e",
          "bytes": 238260,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-march-in-place-d2a1ea8773bfaa57.gif?alt=media&token=6711863b-f97b-4ad0-995a-0bcce74b756f",
          "name": "trainai/creator-media/2026-10-07/trainai-march-in-place-d2a1ea8773bfaa57.gif",
          "verifiedAt": "2026-10-07T23:31:17.805Z"
        },
        "webp": {
          "sha256": "7b77088186f825a07b30b3ab757bab94c99cd7d8c2e345704f7ac199d67238f2",
          "bytes": 365846,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-march-in-place-7b77088186f825a0.webp?alt=media&token=9d3c1a8c-3fc0-40cb-a337-0358153b1055",
          "name": "trainai/creator-media/2026-10-07/trainai-march-in-place-7b77088186f825a0.webp",
          "verifiedAt": "2026-10-07T23:31:18.850Z"
        },
        "poster": {
          "sha256": "864f25f34a93980b38628613135f27228cb10be9d01e6b1a9e9216aa905487fc",
          "bytes": 68123,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-march-in-place-864f25f34a93980b.png?alt=media&token=5f8c6d1a-7da5-444b-aa3e-cd963057ab71",
          "name": "trainai/creator-media/2026-10-07/trainai-march-in-place-864f25f34a93980b.png",
          "verifiedAt": "2026-10-07T23:31:17.779Z"
        }
      }
    },
    {
      "id": "trainai-medicine-ball-slam",
      "slug": "medicine-ball-slam",
      "name": "Medicine-ball slam",
      "category": "Power and agility",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "medicine ball",
      "requiredEquipment": [
        "medicine-ball",
        "impact-safe-floor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold non-bouncing slam ball with both hands.",
        "Lift ball overhead while standing tall, then bend hips and knees and throw ball straight down to floor in front of feet.",
        "Ball stops on floor, squat/hinge to pick it up, return standing holding ball.",
        "No bounce toward face, ball remains spherical."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-medicine-ball-slam-e6ee30e3e8fa.gif?alt=media&token=32add4a7-103d-46cf-832e-f6ee140f5c0a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-medicine-ball-slam-a1158cb8e0e7.png?alt=media&token=008b77e9-ab9c-4b34-8fa1-9e150dd96798",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/medicine-ball-slam/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3e75c5915a3a54007e3ae7c6be430f18ed68513ce5dadc55da33f18f23d12cd0",
          "bytes": 250739,
          "mimeType": "image/gif",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-medicine-ball-slam-3e75c5915a3a5400.gif?alt=media&token=42fb4e72-0fbf-4332-96ec-e714a97d4073",
          "name": "trainai/creator-media/2026-10-07/trainai-medicine-ball-slam-3e75c5915a3a5400.gif",
          "verifiedAt": "2026-10-07T23:31:19.828Z"
        },
        "webp": {
          "sha256": "87cb86c67f2e97260d35aaedc910adad8d013e794b651f5ab852269ec1508625",
          "bytes": 401104,
          "mimeType": "image/webp",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-medicine-ball-slam-87cb86c67f2e9726.webp?alt=media&token=a1973ccb-62c0-4b42-a268-00103a618904",
          "name": "trainai/creator-media/2026-10-07/trainai-medicine-ball-slam-87cb86c67f2e9726.webp",
          "verifiedAt": "2026-10-07T23:31:22.162Z"
        },
        "poster": {
          "sha256": "e3c5cd692bd1af6341d109a12278a2cbff8478975f04776619942c4a4c7e3067",
          "bytes": 41574,
          "mimeType": "image/png",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-medicine-ball-slam-e3c5cd692bd1af63.png?alt=media&token=b0e46866-367a-4065-885e-6d4dc7c8c2f8",
          "name": "trainai/creator-media/2026-10-07/trainai-medicine-ball-slam-e3c5cd692bd1af63.png",
          "verifiedAt": "2026-10-07T23:31:19.474Z"
        }
      }
    },
    {
      "id": "trainai-monster-walk",
      "slug": "monster-walk",
      "name": "Monster walk",
      "category": "Bands",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "mini-band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Mini-band loop just ABOVE both KNEES, shallow squat maintained.",
        "Take right diagonal forward-and-out step, then left diagonal forward-and-out step.",
        "Maintain outward knee pressure and band tension.",
        "No jumping.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-monster-walk-7f56f1776658.gif?alt=media&token=022f2d0e-0bc9-4a8b-addf-c977abc780db",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-monster-walk-544fba3be032.png?alt=media&token=fdc46411-59ab-4256-ac42-e35745d0f366",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/monster-walk/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "44a54759d3523a44e2e07654d569e55cd4e59190ba842838e2f915853dbb798f",
          "bytes": 241356,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-monster-walk-44a54759d3523a44.gif?alt=media&token=c3e340ad-81aa-4d50-8a47-ee6d4278e742",
          "name": "trainai/creator-media/2026-10-07/trainai-monster-walk-44a54759d3523a44.gif",
          "verifiedAt": "2026-10-07T23:31:22.685Z"
        },
        "webp": {
          "sha256": "56b12d07b5f1849f4e062073783b2dc84ee07e5823443218d8d8829fec349dfd",
          "bytes": 406342,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-monster-walk-56b12d07b5f1849f.webp?alt=media&token=f1c9b0bf-efd2-40a2-9191-09b688cc127b",
          "name": "trainai/creator-media/2026-10-07/trainai-monster-walk-56b12d07b5f1849f.webp",
          "verifiedAt": "2026-10-07T23:31:23.429Z"
        },
        "poster": {
          "sha256": "444e9452c5f494d4505375ce384c3f47000ec5905f04306b021844c2ff232118",
          "bytes": 87621,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-monster-walk-444e9452c5f494d4.png?alt=media&token=df070e8d-6ef6-4abe-808f-74625538a038",
          "name": "trainai/creator-media/2026-10-07/trainai-monster-walk-444e9452c5f494d4.png",
          "verifiedAt": "2026-10-07T23:31:23.988Z"
        }
      }
    },
    {
      "id": "trainai-mountain-climber",
      "slug": "mountain-climber",
      "name": "Mountain climber",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Begin in a high plank with hands under shoulders.",
        "Bring one knee toward the chest while the other leg remains extended.",
        "Alternate legs while keeping the shoulders steady and hips controlled."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-mountain-climber-5e3f8a1750f0.gif?alt=media&token=9f1b82ed-e19f-4c16-a703-f1cdea5619fe",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-mountain-climber-bb5fb15dd52e.png?alt=media&token=c38f5cf0-0356-4380-b295-a922706b24b6",
      "aliases": [
        "mountain climber"
      ],
      "legacyIds": [
        "0630"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/mountain-climber/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b10d44ddadbf951908f5e3598716283180cdaa8ab1c92291a379e44b88cd3076",
          "bytes": 263235,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-mountain-climber-b10d44ddadbf9519.gif?alt=media&token=d325dc35-30c3-48ee-ab54-7bb7f22d17be",
          "name": "trainai/creator-media/2026-10-07/trainai-mountain-climber-b10d44ddadbf9519.gif",
          "verifiedAt": "2026-10-07T23:31:25.055Z"
        },
        "webp": {
          "sha256": "d12a94b477659aed66abdd32d641b4f1cb9322b373737fa73159364c22ebc4d3",
          "bytes": 434898,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-mountain-climber-d12a94b477659aed.webp?alt=media&token=f2412a38-207e-438c-be41-91816cd1dca9",
          "name": "trainai/creator-media/2026-10-07/trainai-mountain-climber-d12a94b477659aed.webp",
          "verifiedAt": "2026-10-07T23:31:27.832Z"
        },
        "poster": {
          "sha256": "465983a4006b8edf7a6bfcc6380354b76ed887b9ab5526bbef1c879df4983b76",
          "bytes": 197661,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-mountain-climber-465983a4006b8edf.png?alt=media&token=d10ae3e5-44c4-4ad4-9dd7-78b7173e2c75",
          "name": "trainai/creator-media/2026-10-07/trainai-mountain-climber-465983a4006b8edf.png",
          "verifiedAt": "2026-10-07T23:31:26.048Z"
        }
      }
    },
    {
      "id": "trainai-neutral-grip-lat-pulldown",
      "slug": "neutral-grip-lat-pulldown",
      "name": "Neutral-grip lat pulldown",
      "category": "Gym machines",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "lat-pulldown-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit at fixed lat pulldown machine, thighs restrained, feet flat.",
        "Hold a parallel-grip attachment with palms facing each other.",
        "Pull attachment from overhead toward upper chest, elbows close to ribs, then return overhead.",
        "Cable remains attached to central connector; no torso rocking."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-neutral-grip-lat-pulldown-29e5e5160887.gif?alt=media&token=744e207b-8969-4764-a6dd-acf1c1918cfa",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-neutral-grip-lat-pulldown-6a888ea983db.png?alt=media&token=3a55a37b-b8c4-4132-a737-769884773eb3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/neutral-grip-lat-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "13b256a48cbab4a7526420c9ec77dcd4b0a61a110be37c69349fc69b0a4edefa",
          "bytes": 432823,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-neutral-grip-lat-pulldown-13b256a48cbab4a7.gif?alt=media&token=98f1352f-5f6f-49cf-b6dd-292bcae49260",
          "name": "trainai/creator-media/2026-10-07/trainai-neutral-grip-lat-pulldown-13b256a48cbab4a7.gif",
          "verifiedAt": "2026-10-07T23:31:29.968Z"
        },
        "webp": {
          "sha256": "978c24b86123051aa0cf7dd67359eaf1de2d9dc34a47aa9c09032d562d83f630",
          "bytes": 643640,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-neutral-grip-lat-pulldown-978c24b86123051a.webp?alt=media&token=6583073c-c19a-466a-ab99-e24ea63266bf",
          "name": "trainai/creator-media/2026-10-07/trainai-neutral-grip-lat-pulldown-978c24b86123051a.webp",
          "verifiedAt": "2026-10-07T23:31:31.407Z"
        },
        "poster": {
          "sha256": "59dcffa56ca24508b9c30c0eac0504f362b9fe3cddc4c5e5e9d7cf9ca3de98ed",
          "bytes": 72799,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-neutral-grip-lat-pulldown-59dcffa56ca24508.png?alt=media&token=06a32b0e-2365-4023-81cb-1e152a661d12",
          "name": "trainai/creator-media/2026-10-07/trainai-neutral-grip-lat-pulldown-59dcffa56ca24508.png",
          "verifiedAt": "2026-10-07T23:31:29.025Z"
        }
      }
    },
    {
      "id": "trainai-one-arm-band-row",
      "slug": "one-arm-band-row",
      "name": "One-arm band row",
      "category": "Bands",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand in a stable split stance facing a small fixed chest-height anchor ahead.",
        "Hold orange band handle in right hand, arm extended.",
        "Pull right elbow backward alongside ribs, hand to lower ribs, then extend.",
        "Left hand rests on left hip.",
        "No torso rotation.",
        "Shoes and anchor remain fixed.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-one-arm-band-row-8d60ef32cc04.gif?alt=media&token=895158cf-2fa7-484b-b740-fe3a8e09d280",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-one-arm-band-row-45a0e3046fe5.png?alt=media&token=6bad2cd2-fe3d-4afa-9bb3-f86274414693",
      "aliases": [
        "band one arm standing low row"
      ],
      "legacyIds": [
        "0988"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/one-arm-band-row/",
      "mediaKind": "animated-demonstration",
      "frames": 28,
      "durationMs": 3000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6caf17372d9bcdd34582013ed54fe541563602382600487322d88f429f6f5953",
          "bytes": 546932,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-one-arm-band-row-6caf17372d9bcdd3.gif?alt=media&token=77511c21-ecab-4527-873a-d463c0ab5089",
          "name": "trainai/creator-media/2026-10-07/trainai-one-arm-band-row-6caf17372d9bcdd3.gif",
          "verifiedAt": "2026-10-07T23:31:33.869Z"
        },
        "webp": {
          "sha256": "1585b734e107ea94a11d8b0071aef16f3289d71914821f3d28609ca6b055165f",
          "bytes": 908300,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-one-arm-band-row-1585b734e107ea94.webp?alt=media&token=2d391589-5055-4912-8e67-49a68380eaec",
          "name": "trainai/creator-media/2026-10-07/trainai-one-arm-band-row-1585b734e107ea94.webp",
          "verifiedAt": "2026-10-07T22:46:58.733Z"
        },
        "poster": {
          "sha256": "2e521d85a0239eb84e0d43372d850978eaf5dce6a4aa4a71b99fa87d9f7e7cf0",
          "bytes": 52715,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-one-arm-band-row-2e521d85a0239eb8.png?alt=media&token=d21750bf-0e58-4b54-85b6-323a10cf84ca",
          "name": "trainai/creator-media/2026-10-07/trainai-one-arm-band-row-2e521d85a0239eb8.png",
          "verifiedAt": "2026-10-07T22:47:00.179Z"
        }
      }
    },
    {
      "id": "trainai-overhead-triceps-stretch",
      "slug": "overhead-triceps-stretch",
      "name": "Overhead triceps stretch",
      "category": "Static stretching",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Stand tall feet planted.",
        "Raise right arm overhead, bend elbow so hand reaches upper back.",
        "left hand gently supports right elbow.",
        "Hold comfortable stretch without pulling hard or arching back, then ease hands down.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-overhead-triceps-stretch-6d9b0480a37f.gif?alt=media&token=142929a9-486e-4e13-af8d-c97facbc8cce",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-overhead-triceps-stretch-1342799fff45.png?alt=media&token=fb3e872f-69a3-4dbf-a8aa-db553ff9528f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/overhead-triceps-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8983b445592e0674c8f4193e66c7e67e65f4d0fc663a9de2fc94a439d05db6e9",
          "bytes": 122488,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-overhead-triceps-stretch-8983b445592e0674.gif?alt=media&token=7d301204-230d-424e-a687-223c944ac304",
          "name": "trainai/creator-media/2026-10-07/trainai-overhead-triceps-stretch-8983b445592e0674.gif",
          "verifiedAt": "2026-10-07T23:31:31.394Z"
        },
        "webp": {
          "sha256": "a14983a0727ad8de6202124048da93e92b593e4901b00cced00ea93967b3d99b",
          "bytes": 176104,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-overhead-triceps-stretch-a14983a0727ad8de.webp?alt=media&token=5b009735-a381-4bfd-9405-3ab89a516753",
          "name": "trainai/creator-media/2026-10-07/trainai-overhead-triceps-stretch-a14983a0727ad8de.webp",
          "verifiedAt": "2026-10-07T23:31:33.587Z"
        },
        "poster": {
          "sha256": "0f1743c1acd0f0eddde90b3d7ecfcd3ef61b9f0974f6a254eb24d8654bfd1630",
          "bytes": 45335,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-overhead-triceps-stretch-0f1743c1acd0f0ed.png?alt=media&token=0c32fefc-66b5-42e2-8916-17142ce91111",
          "name": "trainai/creator-media/2026-10-07/trainai-overhead-triceps-stretch-0f1743c1acd0f0ed.png",
          "verifiedAt": "2026-10-07T23:31:32.484Z"
        }
      }
    },
    {
      "id": "trainai-parallel-bar-dip",
      "slug": "parallel-bar-dip",
      "name": "Parallel-bar dip",
      "category": "Pull-up and suspension",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [
        "parallel-bars"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Support body between two fixed parallel bars, hands fixed at hips, arms initially straight, knees bent behind.",
        "Bend elbows to lower body until upper arms approximately horizontal, then press back up.",
        "Shoulder motion controlled, no deep dip, no leg kicking."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-parallel-bar-dip-1a68f97de3ec.gif?alt=media&token=40c3f15d-f72f-4665-b5bc-c518dfe0b092",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-parallel-bar-dip-9017746ca9cc.png?alt=media&token=62140ae1-d011-4d27-8c20-fd74d6bcb07d",
      "aliases": [
        "chest dip",
        "triceps dip"
      ],
      "legacyIds": [
        "0251",
        "0814"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/parallel-bar-dip/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2380,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "45c22987363500ffa8213a4786e4dfb9bd6be0688f9be90a486297461a6c7428",
          "bytes": 307342,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-parallel-bar-dip-45c22987363500ff.gif?alt=media&token=f2110d06-b2ba-4441-8f5b-c7754241f654",
          "name": "trainai/creator-media/2026-10-07/trainai-parallel-bar-dip-45c22987363500ff.gif",
          "verifiedAt": "2026-10-07T23:31:35.466Z"
        },
        "webp": {
          "sha256": "675e6e32809d26a2f27ae40554ab4e1b4d7248ff3cdd0448d9d386690cb17fa1",
          "bytes": 475032,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-parallel-bar-dip-675e6e32809d26a2.webp?alt=media&token=095fb23f-7a79-44de-af8e-e218368152be",
          "name": "trainai/creator-media/2026-10-07/trainai-parallel-bar-dip-675e6e32809d26a2.webp",
          "verifiedAt": "2026-10-07T22:47:02.318Z"
        },
        "poster": {
          "sha256": "ce42bdf8136a63701e41cb05763386c8bbc8a28f34079c722d2a031f9a9bcac2",
          "bytes": 58174,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-parallel-bar-dip-ce42bdf8136a6370.png?alt=media&token=2427d882-af4d-4af5-a325-0a8a5fb195a0",
          "name": "trainai/creator-media/2026-10-07/trainai-parallel-bar-dip-ce42bdf8136a6370.png",
          "verifiedAt": "2026-10-07T22:47:01.249Z"
        }
      }
    },
    {
      "id": "trainai-paused-bodyweight-squat",
      "slug": "paused-bodyweight-squat",
      "name": "Paused bodyweight squat",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Bodyweight squat with arms forward for balance.",
        "Lower hips backward and down to around thighs parallel while knees follow toes and heels stay grounded.",
        "Hold this squat without bouncing, then stand upright.",
        "Neutral controlled trunk, no foot movement or jump."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-paused-bodyweight-squat-a0daad22fd5e.gif?alt=media&token=a042414a-c2b3-4bbf-850e-90367ffd43a8",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-paused-bodyweight-squat-b0671454e66f.png?alt=media&token=215b1280-bb87-4b7d-a37b-a75c6a80547a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/paused-bodyweight-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3480,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "332410f3969cdf5a10db936766022dcb6d8d767f6a608e29d366a03abead2b1d",
          "bytes": 269115,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-paused-bodyweight-squat-332410f3969cdf5a.gif?alt=media&token=9153787e-4a04-4c9c-9edb-ead702f66cb6",
          "name": "trainai/creator-media/2026-10-07/trainai-paused-bodyweight-squat-332410f3969cdf5a.gif",
          "verifiedAt": "2026-10-07T23:31:37.517Z"
        },
        "webp": {
          "sha256": "18858a0078fec7b24d8989706f6a92fb77faed8f551086f9cfc33aeec556a3d4",
          "bytes": 445222,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-paused-bodyweight-squat-18858a0078fec7b2.webp?alt=media&token=7c02097a-0952-4621-a6d8-bbeb90ae238b",
          "name": "trainai/creator-media/2026-10-07/trainai-paused-bodyweight-squat-18858a0078fec7b2.webp",
          "verifiedAt": "2026-10-07T22:47:02.103Z"
        },
        "poster": {
          "sha256": "5d94e18515f2c6bb23df5fd86064e3fa51ccbcf021c2ef50af57d443631358bb",
          "bytes": 46806,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-paused-bodyweight-squat-5d94e18515f2c6bb.png?alt=media&token=a9876e2f-6ba0-4bfe-b519-694b48135fb5",
          "name": "trainai/creator-media/2026-10-07/trainai-paused-bodyweight-squat-5d94e18515f2c6bb.png",
          "verifiedAt": "2026-10-07T22:47:03.753Z"
        }
      }
    },
    {
      "id": "trainai-pec-deck-fly",
      "slug": "pec-deck-fly",
      "name": "Pec deck fly",
      "category": "Gym machines",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "pec-deck-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit against backrest of fixed pec deck, feet planted.",
        "Hands hold vertical handles, arms open to sides with elbows gently bent.",
        "Bring handles together in front of chest by sweeping upper arms inward, then reopen.",
        "Elbow angle stays constant; this is a fly, not a press.",
        "Machine levers stay attached to fixed pivots."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-pec-deck-fly-067955c79a7d.gif?alt=media&token=fdbd9a36-5765-4012-b931-02cfd96145c4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-pec-deck-fly-b577138c2f9b.png?alt=media&token=36a8df5a-5c7d-4ffa-80ff-7480f62d31f3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/pec-deck-fly/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "883f3400bec0fcaf08c61e25e06b03857fb8f9c15f19ec255f72d456c916b173",
          "bytes": 672253,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pec-deck-fly-883f3400bec0fcaf.gif?alt=media&token=16db004c-323f-4f19-ab59-b74248a5fbb8",
          "name": "trainai/creator-media/2026-10-07/trainai-pec-deck-fly-883f3400bec0fcaf.gif",
          "verifiedAt": "2026-10-07T23:31:42.596Z"
        },
        "webp": {
          "sha256": "07283618897a2cbb505506f8971d92865ddf32c5872213840c2e8675f04d2794",
          "bytes": 1021396,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pec-deck-fly-07283618897a2cbb.webp?alt=media&token=ab3e633f-8553-4b14-a899-6dc6299358ca",
          "name": "trainai/creator-media/2026-10-07/trainai-pec-deck-fly-07283618897a2cbb.webp",
          "verifiedAt": "2026-10-07T23:31:48.830Z"
        },
        "poster": {
          "sha256": "499272803e74e223c923533fbba1b9746a2e8cbcab6fd644acd270229ec47cf4",
          "bytes": 125460,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pec-deck-fly-499272803e74e223.png?alt=media&token=911479be-749d-4ccd-9c7a-db74822e33c8",
          "name": "trainai/creator-media/2026-10-07/trainai-pec-deck-fly-499272803e74e223.png",
          "verifiedAt": "2026-10-07T23:31:40.760Z"
        }
      }
    },
    {
      "id": "trainai-pike-push-up",
      "slug": "pike-push-up",
      "name": "Pike push-up",
      "category": "Home pushing",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start hands and feet on floor with hips high in an inverted V, legs nearly straight and heels allowed lifted.",
        "Bend elbows to lower crown of head toward a spot just in front of the hands, then straighten elbows to return.",
        "Maintain high hips, do not straighten into a normal plank."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-pike-push-up-31c797a3eecc.gif?alt=media&token=3e3f1751-f3c5-441c-aa14-6d623ee748ef",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-pike-push-up-89e4a6b5df3a.png?alt=media&token=bc9f3fa7-6e6d-4765-b938-dd7f6e2036b4",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/pike-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "801cccba10c9cc0ec7a19d65f3a9ccc53e7ad39e3f93a8de18045f7286362665",
          "bytes": 340848,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pike-push-up-801cccba10c9cc0e.gif?alt=media&token=7691f470-b0b3-4d6a-8372-2fba91121a5d",
          "name": "trainai/creator-media/2026-10-07/trainai-pike-push-up-801cccba10c9cc0e.gif",
          "verifiedAt": "2026-10-07T23:31:45.160Z"
        },
        "webp": {
          "sha256": "21725cc0ed73669147e55587e45a155f52f3bc803db5ebdbb6125c69496218dc",
          "bytes": 561242,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pike-push-up-21725cc0ed736691.webp?alt=media&token=3b019246-c9ca-4a91-90dd-30b350084fab",
          "name": "trainai/creator-media/2026-10-07/trainai-pike-push-up-21725cc0ed736691.webp",
          "verifiedAt": "2026-10-07T22:47:05.737Z"
        },
        "poster": {
          "sha256": "858b5f4bffb7944a29747dcb0717b8b8bce7f67339669be8f5955c801d6b0f65",
          "bytes": 59055,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pike-push-up-858b5f4bffb7944a.png?alt=media&token=93fc6cd5-d61e-4741-9658-c8132f505fb6",
          "name": "trainai/creator-media/2026-10-07/trainai-pike-push-up-858b5f4bffb7944a.png",
          "verifiedAt": "2026-10-07T22:47:05.121Z"
        }
      }
    },
    {
      "id": "trainai-plank-shoulder-tap",
      "slug": "plank-shoulder-tap",
      "name": "Plank shoulder tap",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start in a high plank with feet set wide enough for balance.",
        "Lift one hand to tap the opposite shoulder while keeping the hips quiet.",
        "Replace the hand and repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-plank-shoulder-tap-d0f34d6b6414.gif?alt=media&token=2d44859a-bd7a-4bde-a394-863da944b39a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-plank-shoulder-tap-9f22c6951c74.png?alt=media&token=5681ac7c-cc9e-4eb6-981b-1ff475cd6ed1",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/plank-shoulder-tap/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "514b7de5a56900c5ca0931fe7e12f1dd2eadbc117690ae87717cd19b0086e441",
          "bytes": 298722,
          "mimeType": "image/gif",
          "width": 576,
          "height": 576,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-plank-shoulder-tap-514b7de5a56900c5.gif?alt=media&token=e5f3c4ca-13ee-45ff-9945-516c20b007d6",
          "name": "trainai/creator-media/2026-10-07/trainai-plank-shoulder-tap-514b7de5a56900c5.gif",
          "verifiedAt": "2026-10-07T23:31:45.231Z"
        },
        "webp": {
          "sha256": "0fe084f0cfed20d3c8c8133c897245fcc6c05f98f12b4f716676806d677310d7",
          "bytes": 478920,
          "mimeType": "image/webp",
          "width": 576,
          "height": 576,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-plank-shoulder-tap-0fe084f0cfed20d3.webp?alt=media&token=15164e37-daa5-46df-a0b9-2e785cdeeb94",
          "name": "trainai/creator-media/2026-10-07/trainai-plank-shoulder-tap-0fe084f0cfed20d3.webp",
          "verifiedAt": "2026-10-07T23:31:48.740Z"
        },
        "poster": {
          "sha256": "c761ad3ea957897a904fb5641361e9e7fc70719020469ad1176b8a2f815498b5",
          "bytes": 233395,
          "mimeType": "image/png",
          "width": 576,
          "height": 576,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-plank-shoulder-tap-c761ad3ea957897a.png?alt=media&token=bdd8cc30-9226-45be-8d93-851d0c242fd1",
          "name": "trainai/creator-media/2026-10-07/trainai-plank-shoulder-tap-c761ad3ea957897a.png",
          "verifiedAt": "2026-10-07T23:31:46.893Z"
        }
      }
    },
    {
      "id": "trainai-prone-cobra-hold",
      "slug": "prone-cobra-hold",
      "name": "Prone cobra hold",
      "category": "Home posterior shoulder",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Lie face down with arms alongside torso, palms toward floor.",
        "Gently lift upper chest a small amount, draw shoulders down and back and rotate palms outward with thumbs up.",
        "Hold this modest prone cobra, neck neutral, then lower.",
        "Pelvis and legs remain down; no pushing on hands and no deep backbend."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-cobra-hold-b749d12e4e16.gif?alt=media&token=b9e7b57c-7ed3-4cbf-8a26-828cdabf8b6d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-cobra-hold-1bcc70b71393.png?alt=media&token=03eacd4a-6730-4fce-8159-7b154778a339",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/prone-cobra-hold/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f5255275b98cac3846a47b0ff7e75fc94d1566cba0fbeaceca81e7da2f041168",
          "bytes": 153352,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-cobra-hold-f5255275b98cac38.gif?alt=media&token=e852e211-e4b0-4726-914b-42d169be10e5",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-cobra-hold-f5255275b98cac38.gif",
          "verifiedAt": "2026-10-07T23:31:48.569Z"
        },
        "webp": {
          "sha256": "6ff8e4515543b6829ee9decdeb8c1dda94fb6bbeb930eae0982cf7bdb44a6ee4",
          "bytes": 257100,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-cobra-hold-6ff8e4515543b682.webp?alt=media&token=39f8f9e1-ca9b-4d09-9dd7-9389d8109ceb",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-cobra-hold-6ff8e4515543b682.webp",
          "verifiedAt": "2026-10-07T22:47:06.726Z"
        },
        "poster": {
          "sha256": "5a7a1c606f73ea023b6abc5338275788b148ed99a09a8539f1b0ae85bcc4798c",
          "bytes": 39598,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-cobra-hold-5a7a1c606f73ea02.png?alt=media&token=2fdbd04a-0946-4b8d-8285-d7125188546f",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-cobra-hold-5a7a1c606f73ea02.png",
          "verifiedAt": "2026-10-07T22:47:06.822Z"
        }
      }
    },
    {
      "id": "trainai-prone-t-raise",
      "slug": "prone-t-raise",
      "name": "Prone T raise",
      "category": "Home posterior shoulder",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie face down with legs extended and arms straight outward at shoulder height forming a T, thumbs up.",
        "Lift both straight arms a small distance away from floor by squeezing shoulder blades together, then lower.",
        "Torso and legs remain supported, neck neutral."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-t-raise-f63dc4dac116.gif?alt=media&token=d158bf0b-5513-4981-9f51-c3099c2398f2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-t-raise-aacf2a9688d9.png?alt=media&token=b2e41b9e-aebb-4786-8952-cc05f911f5fb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/prone-t-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "43c1558f9ea23925a05d66ebb433b40c4ea64c200a5f97b7aca429faf90e5cf3",
          "bytes": 294264,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-t-raise-43c1558f9ea23925.gif?alt=media&token=4e54fe6b-d809-4c88-a519-d518d682062d",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-t-raise-43c1558f9ea23925.gif",
          "verifiedAt": "2026-10-07T23:31:51.392Z"
        },
        "webp": {
          "sha256": "33ce3794e25cf898aadc80e861a88a30fb0f3cf556dd7979133a3faa8afacf9c",
          "bytes": 518934,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-t-raise-33ce3794e25cf898.webp?alt=media&token=d1c8f6e3-9779-484c-8a90-0951b14df80d",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-t-raise-33ce3794e25cf898.webp",
          "verifiedAt": "2026-10-07T22:47:08.463Z"
        },
        "poster": {
          "sha256": "a50477268e0e9bb0264e4f992f06ff89e60c7515a54f64cbd2ebc9451aef4b73",
          "bytes": 51903,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-t-raise-a50477268e0e9bb0.png?alt=media&token=6dd41afa-518a-4131-b476-8df506e2d3d5",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-t-raise-a50477268e0e9bb0.png",
          "verifiedAt": "2026-10-07T22:47:07.431Z"
        }
      }
    },
    {
      "id": "trainai-prone-w-raise",
      "slug": "prone-w-raise",
      "name": "Prone W raise",
      "category": "Home posterior shoulder",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie face down with legs extended, head aligned with spine.",
        "Bend elbows so arms form a W, upper arms angled out and forearms forward.",
        "Gently lift bent arms a short distance off floor by drawing shoulder blades down and together, then lower them.",
        "Chest and pelvis remain supported."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-w-raise-1928513acee3.gif?alt=media&token=7a89115f-1507-4c72-97e9-4922935fc73b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-w-raise-96bc3273ed9e.png?alt=media&token=35e5a381-d1d0-4daf-9c8c-8c5142a3ef2e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/prone-w-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "13d20f61f12599dfd325eb07d68e082406054ec8be773a6554a182193ad3bc21",
          "bytes": 332697,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-w-raise-13d20f61f12599df.gif?alt=media&token=632f9d77-a516-4863-8462-496d93d574b8",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-w-raise-13d20f61f12599df.gif",
          "verifiedAt": "2026-10-07T23:31:52.513Z"
        },
        "webp": {
          "sha256": "1c06d8cbaed3d21ce1c00e608e81f5810d631950851a2bb906185880f12304bf",
          "bytes": 597506,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-w-raise-1c06d8cbaed3d21c.webp?alt=media&token=3cfe442e-630b-47cb-a56a-83dc94f9cb12",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-w-raise-1c06d8cbaed3d21c.webp",
          "verifiedAt": "2026-10-07T22:47:10.089Z"
        },
        "poster": {
          "sha256": "7a21090a1ccb4ceb01f69caf8e40be4689c8074234a61f49b50e2a2a1a1008c4",
          "bytes": 59749,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-w-raise-7a21090a1ccb4ceb.png?alt=media&token=08d353df-c7ad-4620-8d3c-0df108164afa",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-w-raise-7a21090a1ccb4ceb.png",
          "verifiedAt": "2026-10-07T22:47:09.154Z"
        }
      }
    },
    {
      "id": "trainai-prone-y-raise",
      "slug": "prone-y-raise",
      "name": "Prone Y raise",
      "category": "Home posterior shoulder",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Prone Y raise.",
        "Lie flat face down, straight legs grounded.",
        "Both arms extend overhead diagonally in a fixed Y, thumbs upward.",
        "Lift the straight arms only a small distance off the floor, then hold the endpoint.",
        "Arms stay in the same overhead Y direction, never sweep backward into a T.",
        "Chest and pelvis stay grounded, neck neutral."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-y-raise-1d0689923a5f.gif?alt=media&token=0d16466e-3de4-4941-915c-5aa57e349acb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-prone-y-raise-4211a7c8d535.png?alt=media&token=3d5812c9-3602-4cd5-b83f-c80f15b4efcb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/prone-y-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 1760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2def3d89f680eb9c7522052dfc42e8286a55a9a802cc50526294e1e41d1132ee",
          "bytes": 337271,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-y-raise-2def3d89f680eb9c.gif?alt=media&token=32b3e2a4-6d72-4e3e-8dfa-00c9b304c977",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-y-raise-2def3d89f680eb9c.gif",
          "verifiedAt": "2026-10-07T23:31:51.193Z"
        },
        "webp": {
          "sha256": "5f2d799c2b24384b0ea57121322242572600636562e377d8b892c5aba25e82b1",
          "bytes": 560840,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-y-raise-5f2d799c2b24384b.webp?alt=media&token=281e84e8-1ee0-4125-832c-ba27baef7a29",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-y-raise-5f2d799c2b24384b.webp",
          "verifiedAt": "2026-10-07T23:31:56.929Z"
        },
        "poster": {
          "sha256": "0d005129417ab9500c1dac6e362649a6ad6cf6407641c54cd181ef1b7574b2a6",
          "bytes": 60868,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-prone-y-raise-0d005129417ab950.png?alt=media&token=bdb969e3-41fe-4243-9a40-1cca545730ac",
          "name": "trainai/creator-media/2026-10-07/trainai-prone-y-raise-0d005129417ab950.png",
          "verifiedAt": "2026-10-07T23:31:52.501Z"
        }
      }
    },
    {
      "id": "trainai-pull-up",
      "slug": "pull-up",
      "name": "Pull-up",
      "category": "Pull-up and suspension",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [
        "rated-pull-up-bar"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hold a rated pull-up bar with an overhand grip and brace the trunk.",
        "Pull by driving the elbows down until your chin approaches bar height without craning the neck.",
        "Lower under control without swinging."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-pull-up-78b0f0d24186.gif?alt=media&token=edebcde4-ae23-4c3b-b55f-9ada4aca2987",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-pull-up-f2d578857810.png?alt=media&token=fb591edf-ff89-4475-a349-2db54a02be63",
      "aliases": [
        "pull-up"
      ],
      "legacyIds": [
        "0652"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/pull-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "21b15080d98f14a269b898f06e15706e5732228ec995c0f2a4696e34330f1f20",
          "bytes": 374873,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pull-up-21b15080d98f14a2.gif?alt=media&token=a65b1fac-5951-45e8-9c4a-4e984eb75d53",
          "name": "trainai/creator-media/2026-10-07/trainai-pull-up-21b15080d98f14a2.gif",
          "verifiedAt": "2026-10-07T23:31:59.216Z"
        },
        "webp": {
          "sha256": "3c18e64f58bb5c405b5ca941b28db5c65a4dbb92f6bd1690446f4d54dd11b362",
          "bytes": 565608,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pull-up-3c18e64f58bb5c40.webp?alt=media&token=19becc60-d2f0-4700-9986-5a7e78eb2adb",
          "name": "trainai/creator-media/2026-10-07/trainai-pull-up-3c18e64f58bb5c40.webp",
          "verifiedAt": "2026-10-07T22:47:11.856Z"
        },
        "poster": {
          "sha256": "98adfea21c600a10d18f37615493fe848b76b0accaaa08516f2129ab94c43b01",
          "bytes": 56688,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-pull-up-98adfea21c600a10.png?alt=media&token=bab1647a-bcd0-4c32-82e9-4346aa08bea2",
          "name": "trainai/creator-media/2026-10-07/trainai-pull-up-98adfea21c600a10.png",
          "verifiedAt": "2026-10-07T22:47:11.086Z"
        }
      }
    },
    {
      "id": "trainai-push-up",
      "slug": "push-up",
      "name": "Push-up",
      "category": "Home pushing",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start in a high plank, hands a little wider than shoulders, toes planted, body straight from head to heels.",
        "Bend elbows about 45 degrees from torso to lower chest near floor, then press back to straight arms.",
        "Hips and chest rise together, no sagging or kneeling."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-push-up-940921bdbee7.gif?alt=media&token=d06a3709-a7e9-4e80-b645-4c25575918ce",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-push-up-0df2c396866e.png?alt=media&token=b80492ec-dcd1-49f5-9ead-0b7bbf29a558",
      "aliases": [
        "push-up"
      ],
      "legacyIds": [
        "3021"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5d1917138ec8dbbebf572508c80d8b33c234e285c1199e3f85e2960e538661c2",
          "bytes": 332825,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-push-up-5d1917138ec8dbbe.gif?alt=media&token=5ffaa42b-b340-4299-b808-b9994c93f8d4",
          "name": "trainai/creator-media/2026-10-07/trainai-push-up-5d1917138ec8dbbe.gif",
          "verifiedAt": "2026-10-07T23:31:54.544Z"
        },
        "webp": {
          "sha256": "5a6db5a8a8f471f49997fa02b7f0570573b4e6bb28fbb65cadba91eb45ad6d34",
          "bytes": 577896,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-push-up-5a6db5a8a8f471f4.webp?alt=media&token=74ce41f9-ff35-4267-85ce-3dfc27be63c0",
          "name": "trainai/creator-media/2026-10-07/trainai-push-up-5a6db5a8a8f471f4.webp",
          "verifiedAt": "2026-10-07T23:32:00.638Z"
        },
        "poster": {
          "sha256": "b8f7cb6081c4e489afd15c52eb11cf375996e5d2dbf17a3852e209ae1b636de2",
          "bytes": 64786,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-push-up-b8f7cb6081c4e489.png?alt=media&token=d8980cfc-14f5-4cc5-9a37-4b10c6d93e43",
          "name": "trainai/creator-media/2026-10-07/trainai-push-up-b8f7cb6081c4e489.png",
          "verifiedAt": "2026-10-07T23:31:58.692Z"
        }
      }
    },
    {
      "id": "trainai-quadriceps-foam-roll",
      "slug": "quadriceps-foam-roll",
      "name": "Quadriceps foam roll",
      "category": "Soft-tissue adjuncts",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "recovery",
      "measurement": "duration",
      "instructions": [
        "Lie face down supported on forearms, orange foam roller across fronts of both thighs.",
        "Brace abdomen, legs long and relaxed.",
        "Shift body slowly forward/back a short distance to roll mid-thigh, keeping off kneecaps and hip bones.",
        "Roller rotates, not stretched or deformed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadriceps-foam-roll-9edda5b905ae.gif?alt=media&token=6c125844-7da7-4d7c-b804-be3eedf4364e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadriceps-foam-roll-ecb84a4c948a.png?alt=media&token=c459c267-ac9e-44c9-9bb6-63821e0080ef",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/quadriceps-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 30,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "82d3497a6ca859bd85c48ce3a09c09f0349bc97d47348117f331b888f066f3e2",
          "bytes": 456057,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadriceps-foam-roll-82d3497a6ca859bd.gif?alt=media&token=2fd34d5c-932c-42f4-ac6f-bf802a7dfef0",
          "name": "trainai/creator-media/2026-10-07/trainai-quadriceps-foam-roll-82d3497a6ca859bd.gif",
          "verifiedAt": "2026-10-07T23:32:03.840Z"
        },
        "webp": {
          "sha256": "a0ca699641f03655263eb34a7ff852ae0bf1f493041608d45aafd53a231829cd",
          "bytes": 777996,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadriceps-foam-roll-a0ca699641f03655.webp?alt=media&token=fdf7ed11-40b2-4d65-a060-13d26ecc4c2d",
          "name": "trainai/creator-media/2026-10-07/trainai-quadriceps-foam-roll-a0ca699641f03655.webp",
          "verifiedAt": "2026-10-07T22:47:14.971Z"
        },
        "poster": {
          "sha256": "30bca059f2709e0bdb573cc135059fa45a490254143adf8c836c2d58c0698855",
          "bytes": 40201,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadriceps-foam-roll-30bca059f2709e0b.png?alt=media&token=a88ce65e-d9a3-40bb-862c-cfb8ac182f51",
          "name": "trainai/creator-media/2026-10-07/trainai-quadriceps-foam-roll-30bca059f2709e0b.png",
          "verifiedAt": "2026-10-07T22:47:14.015Z"
        }
      }
    },
    {
      "id": "trainai-quadruped-hip-extension",
      "slug": "quadruped-hip-extension",
      "name": "Quadruped hip extension",
      "category": "Home foundations",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start on all fours, hands beneath shoulders and knees beneath hips.",
        "Keep one knee bent about 90 degrees and lift that thigh backward until aligned with the torso, sole facing upward; lower the same knee under the hip.",
        "Back stays neutral, pelvis level, no exaggerated back arch.",
        "The opposite knee and both hands remain planted."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadruped-hip-extension-4c95d2b2ade6.gif?alt=media&token=ff45da5b-b115-4509-b1b7-6405402cd954",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadruped-hip-extension-9e727323a9f2.png?alt=media&token=1e4ca6ec-24c2-44ef-9be9-bfe40015a788",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/quadruped-hip-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c8adb2e2b3b476df5b6227119e7026691f643bfbe94705d872cfbdda6f95df43",
          "bytes": 428820,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-hip-extension-c8adb2e2b3b476df.gif?alt=media&token=e2686c0a-f162-4cbd-88e1-3506f385fd8f",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-hip-extension-c8adb2e2b3b476df.gif",
          "verifiedAt": "2026-10-07T23:32:03.659Z"
        },
        "webp": {
          "sha256": "65dce9231ae8369696273e5c338e53f8712c270925b05c9bb1c0027eafd9c3f9",
          "bytes": 680800,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-hip-extension-65dce9231ae83696.webp?alt=media&token=818f28c3-e829-40bd-a974-97668dfbadfe",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-hip-extension-65dce9231ae83696.webp",
          "verifiedAt": "2026-10-07T22:47:16.663Z"
        },
        "poster": {
          "sha256": "f08c5fff5b07673d8cfa543cb14fe3311e38fd616eca1aab8aaf9bb2ce9d7ad6",
          "bytes": 72479,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-hip-extension-f08c5fff5b07673d.png?alt=media&token=1bdbe6e4-c503-4275-9276-c1ff7e6979b5",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-hip-extension-f08c5fff5b07673d.png",
          "verifiedAt": "2026-10-07T22:47:15.136Z"
        }
      }
    },
    {
      "id": "trainai-quadruped-rock-back",
      "slug": "quadruped-rock-back",
      "name": "Quadruped rock-back",
      "category": "Dynamic warm-up",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "On hands and knees with neutral spine, palms fixed under shoulders, knees hip width.",
        "Slowly shift hips backward toward heels while arms reach long, then return hips above knees.",
        "Do not collapse elbows or round back excessively."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadruped-rock-back-c007c31384bb.gif?alt=media&token=2973ee42-daad-4288-a238-d2b645d457bf",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadruped-rock-back-9ac338504346.png?alt=media&token=7570fc2d-2ea1-4629-8273-f989e7b41f40",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/quadruped-rock-back/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2660,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "137b303f5315231eedc7c7345e40b5d00fc1d39c700d40a33ba08b4ab2722128",
          "bytes": 280085,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-rock-back-137b303f5315231e.gif?alt=media&token=15c359c9-82c7-4bee-9a32-2c8705cd0271",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-rock-back-137b303f5315231e.gif",
          "verifiedAt": "2026-10-07T23:32:08.144Z"
        },
        "webp": {
          "sha256": "d01a7aaa34ed8de382695a6e3dcd153975007f4e5359a6c1d18f7d91a3c9b1a5",
          "bytes": 483114,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-rock-back-d01a7aaa34ed8de3.webp?alt=media&token=55f1d5eb-8d3d-4533-9a56-33f23d2b3781",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-rock-back-d01a7aaa34ed8de3.webp",
          "verifiedAt": "2026-10-07T22:47:16.716Z"
        },
        "poster": {
          "sha256": "f1a08788be0ddb0ce65469d8198afdd1a8d2c82ee5fb7022c8d204ffb9df925f",
          "bytes": 55410,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-rock-back-f1a08788be0ddb0c.png?alt=media&token=745b5b68-ab88-4955-bc19-657f412e9c16",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-rock-back-f1a08788be0ddb0c.png",
          "verifiedAt": "2026-10-07T22:47:17.168Z"
        }
      }
    },
    {
      "id": "trainai-quadruped-wrist-rock",
      "slug": "quadruped-wrist-rock",
      "name": "Quadruped wrist rock",
      "category": "Mobility",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "On hands and knees, palms flat fingers forward, elbows straight.",
        "Gently shift shoulders a few centimeters forward over wrists then back to start.",
        "Hips and torso move together slightly, palms and knees fixed.",
        "Do not lift palm heels."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadruped-wrist-rock-362c82b5199d.gif?alt=media&token=a1e9d853-2e4c-4d30-a450-978b30860fff",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-quadruped-wrist-rock-63c195600b0c.png?alt=media&token=d128f840-5480-4596-9693-33380c521c4a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/quadruped-wrist-rock/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3040,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "83a23dc2b4dac1cd120f98d4539bf0cd5e0cace37bdb3cd16e2c7744967393f2",
          "bytes": 334518,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-wrist-rock-83a23dc2b4dac1cd.gif?alt=media&token=b77f5044-a87b-4ebe-9c38-5b209967782f",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-wrist-rock-83a23dc2b4dac1cd.gif",
          "verifiedAt": "2026-10-07T23:32:10.069Z"
        },
        "webp": {
          "sha256": "a5823522a5b082fda7c1b70b6275caf5f7790d82dabc4a2b8afab0edb7659a4f",
          "bytes": 536276,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-wrist-rock-a5823522a5b082fd.webp?alt=media&token=479ccc7b-96df-4f60-8a45-07ca82edbfd6",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-wrist-rock-a5823522a5b082fd.webp",
          "verifiedAt": "2026-10-07T22:47:17.863Z"
        },
        "poster": {
          "sha256": "19070dbf424a44e830af0a28ef964cebb3fa3be1fb704f4b896b1f511480e26b",
          "bytes": 56472,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-quadruped-wrist-rock-19070dbf424a44e8.png?alt=media&token=be8acce6-626e-483c-87d8-61c2423a826d",
          "name": "trainai/creator-media/2026-10-07/trainai-quadruped-wrist-rock-19070dbf424a44e8.png",
          "verifiedAt": "2026-10-07T22:47:17.869Z"
        }
      }
    },
    {
      "id": "trainai-reverse-barbell-curl",
      "slug": "reverse-barbell-curl",
      "name": "Reverse barbell curl",
      "category": "Barbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Standing reverse barbell curl with overhand PRONATED grip.",
        "Palms face DOWN when forearms horizontal.",
        "Keep wrists rigid, upper arms by ribs, NEVER rotate palms UP."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-barbell-curl-77a6d415b057.gif?alt=media&token=666b4d7c-6bc1-4363-8a6d-b70faf448d85",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-barbell-curl-3096bc544c7e.png?alt=media&token=9c17fdcb-5b1b-4472-9304-c3c84309e8e2",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/reverse-barbell-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1320,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bdefe618c67cae6963debf0faf9293dce9cbefcfb6a39c9c9677d9b4239ec081",
          "bytes": 319607,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-barbell-curl-bdefe618c67cae69.gif?alt=media&token=1ca736e1-832a-4aa0-bb90-a5219b28d94f",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-barbell-curl-bdefe618c67cae69.gif",
          "verifiedAt": "2026-10-07T23:32:08.528Z"
        },
        "webp": {
          "sha256": "dfab951c94545eb06e0cd4b12e9b4345dd6428d78a6608ba72bb15f381ba6b0c",
          "bytes": 498128,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-barbell-curl-dfab951c94545eb0.webp?alt=media&token=61e041f4-1623-41cb-a68e-5265dda83f1b",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-barbell-curl-dfab951c94545eb0.webp",
          "verifiedAt": "2026-10-07T23:32:18.445Z"
        },
        "poster": {
          "sha256": "7a4c0b708cfb1339fa5753663db64359cb828e8303dfc4fe0a14bc74e1033563",
          "bytes": 157154,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-barbell-curl-7a4c0b708cfb1339.png?alt=media&token=7212229e-8457-4059-9639-49dba1d3a5bb",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-barbell-curl-7a4c0b708cfb1339.png",
          "verifiedAt": "2026-10-07T23:32:11.564Z"
        }
      }
    },
    {
      "id": "trainai-reverse-crunch",
      "slug": "reverse-crunch",
      "name": "Reverse crunch",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on back, arms alongside with palms resting down, hips and knees bent about 90 degrees.",
        "Curl pelvis gently toward ribs so tailbone lifts a small distance and knees move toward chest, then lower pelvis under control.",
        "Head and shoulders stay down.",
        "No swinging straight legs or rolling onto neck."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-crunch-65a15aa17cc9.gif?alt=media&token=8fafb7bb-6d65-4269-8269-75039ae216c3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-crunch-381802bd55e0.png?alt=media&token=6fded033-3315-4510-bd8f-c3bee2648aeb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/reverse-crunch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "786e00ff300f85789b7188611d2efe1a409141243dc34580412c1810dc6321de",
          "bytes": 372074,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-crunch-786e00ff300f8578.gif?alt=media&token=384312f3-f070-419c-ad3c-f98da3580843",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-crunch-786e00ff300f8578.gif",
          "verifiedAt": "2026-10-07T23:32:12.536Z"
        },
        "webp": {
          "sha256": "49fd9b8b0f3aaa3db2c5743c30b0760a0692ed7eac853baf79c7dc4bded03b8f",
          "bytes": 599710,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-crunch-49fd9b8b0f3aaa3d.webp?alt=media&token=634265de-944f-494a-a78f-28aa6fe311b8",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-crunch-49fd9b8b0f3aaa3d.webp",
          "verifiedAt": "2026-10-07T22:47:19.829Z"
        },
        "poster": {
          "sha256": "ba6d073e27c91d63887eea8ffaab84dc780bf168d6e77505879a63c8e2b42bd3",
          "bytes": 58618,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-crunch-ba6d073e27c91d63.png?alt=media&token=696e2543-3dfb-46d9-8bb4-6ce1878c161d",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-crunch-ba6d073e27c91d63.png",
          "verifiedAt": "2026-10-07T22:47:19.624Z"
        }
      }
    },
    {
      "id": "trainai-reverse-lunge",
      "slug": "reverse-lunge",
      "name": "Reverse lunge",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Reverse lunge, hands on hips.",
        "Start standing with feet hip-width.",
        "Keep the right foot planted, step the left foot backward and lower until both knees bend comfortably and the left knee is just above the floor; push through the right leg and return the left foot beside the right.",
        "One controlled repetition on one side.",
        "Front knee aligned with toes, neutral upright torso.",
        "No alternating sides within this loop.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-lunge-810923b5d584.gif?alt=media&token=c5b0c910-290c-4281-bbd3-5746635bc775",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-lunge-613b557ed396.png?alt=media&token=0f6f8566-2e2a-4ed4-9663-fba272701ad5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/reverse-lunge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "9b065fa76abfcf8c52ee25399b4e91e22ff7b8c9bbe5bccfa50c2b8bd700cd8d",
          "bytes": 270375,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-lunge-9b065fa76abfcf8c.gif?alt=media&token=5c1c6058-bccb-4a0a-8b84-4bedad5ed786",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-lunge-9b065fa76abfcf8c.gif",
          "verifiedAt": "2026-10-07T23:32:14.293Z"
        },
        "webp": {
          "sha256": "09e954c60402ed4e3c1a433bc0d84cd0323d230169961eb84e836ddde87ab763",
          "bytes": 448190,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-lunge-09e954c60402ed4e.webp?alt=media&token=b11fbcba-24ea-45c0-ace3-2a827be0a455",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-lunge-09e954c60402ed4e.webp",
          "verifiedAt": "2026-10-07T23:32:15.661Z"
        },
        "poster": {
          "sha256": "89ed9f76549e4a33421653d52924661f571edfced50ae3df823a73260eb9f37e",
          "bytes": 46720,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-lunge-89ed9f76549e4a33.png?alt=media&token=c0556bf0-2890-42bd-baea-3a22925c275b",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-lunge-89ed9f76549e4a33.png",
          "verifiedAt": "2026-10-07T23:32:15.113Z"
        }
      }
    },
    {
      "id": "trainai-reverse-pec-deck",
      "slug": "reverse-pec-deck",
      "name": "Reverse pec deck",
      "category": "Gym machines",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "pec-deck-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit facing the pec-deck pad and adjust the handles to shoulder height.",
        "Keep a slight elbow bend as you open the arms to the sides without forcing them behind your body.",
        "Return to the start while keeping hold of the handles."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-pec-deck-7894416e577e.gif?alt=media&token=407d316c-68c4-49ce-993e-c5a19ae88ad9",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-pec-deck-93f71597985c.png?alt=media&token=620c0688-cfbd-400e-a6e4-7d87ac7a3fa5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/reverse-pec-deck/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 1760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a27689b013e260b0fb566d886a8e8124d0bee893745693fdfc57f2a12740a465",
          "bytes": 612316,
          "mimeType": "image/gif",
          "width": 592,
          "height": 592,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-pec-deck-a27689b013e260b0.gif?alt=media&token=b90aa82a-07d5-4f26-8f8f-f8234b275bfa",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-pec-deck-a27689b013e260b0.gif",
          "verifiedAt": "2026-10-07T23:32:17.735Z"
        },
        "webp": {
          "sha256": "6a8ad2fa3b1df4aa11958bbb88a9e1aef841d934071c6e76a47d40f524797f8d",
          "bytes": 962902,
          "mimeType": "image/webp",
          "width": 592,
          "height": 592,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-pec-deck-6a8ad2fa3b1df4aa.webp?alt=media&token=1582ff7f-3677-4f2e-bd59-91bd3f05d2c8",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-pec-deck-6a8ad2fa3b1df4aa.webp",
          "verifiedAt": "2026-10-07T23:32:39.813Z"
        },
        "poster": {
          "sha256": "2e3a04919b2eb029210e839d755d2744665c3b4aea8700b47a555c58db3bc4ea",
          "bytes": 176595,
          "mimeType": "image/png",
          "width": 592,
          "height": 592,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-pec-deck-2e3a04919b2eb029.png?alt=media&token=dd9494b6-b8ff-44e5-bbe5-41ac2be639b7",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-pec-deck-2e3a04919b2eb029.png",
          "verifiedAt": "2026-10-07T23:32:18.865Z"
        }
      }
    },
    {
      "id": "trainai-reverse-snow-angel",
      "slug": "reverse-snow-angel",
      "name": "Reverse snow angel",
      "category": "Home posterior shoulder",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Prone reverse snow angel, face down, straight legs stationary, elbows straight.",
        "Sweep both arms in the FLOOR PLANE from beside hips through T to overhead."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-snow-angel-211991b382af.gif?alt=media&token=21d43f24-8b6e-4a38-971e-50a4d5ae5085",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-reverse-snow-angel-6d2a0eb63b7e.png?alt=media&token=3f96f04b-baa5-4dd0-bbda-59856fda5fb9",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/reverse-snow-angel/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1320,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "03ef6025690f9253178d92c1c8b7c232fedf5cfe7a3764dd0d1d7618fef33565",
          "bytes": 328918,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-snow-angel-03ef6025690f9253.gif?alt=media&token=932aafca-57e7-496a-9fec-9d9668d900c0",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-snow-angel-03ef6025690f9253.gif",
          "verifiedAt": "2026-10-07T23:32:27.011Z"
        },
        "webp": {
          "sha256": "f068d760d6b37a5fd5bc249b5f6e4928bab251e168ecf7a78567e55dd9cd8159",
          "bytes": 473080,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-snow-angel-f068d760d6b37a5f.webp?alt=media&token=8a7bbed3-7b57-4886-83cc-7f0bcdf7509b",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-snow-angel-f068d760d6b37a5f.webp",
          "verifiedAt": "2026-10-07T23:32:23.068Z"
        },
        "poster": {
          "sha256": "ee92e5caa5a6205e0ba258a8af0edb79082e3eb16ecd953a6a54e8c5fae88024",
          "bytes": 140734,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-reverse-snow-angel-ee92e5caa5a6205e.png?alt=media&token=a7c2d3ed-fff1-462d-8f37-6135a1ad0ceb",
          "name": "trainai/creator-media/2026-10-07/trainai-reverse-snow-angel-ee92e5caa5a6205e.png",
          "verifiedAt": "2026-10-07T23:32:24.524Z"
        }
      }
    },
    {
      "id": "trainai-rowing-ergometer",
      "slug": "rowing-ergometer",
      "name": "Rowing ergometer",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "rowing-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Secure the feet in the rowing-machine footplates and hold the handle with straight wrists.",
        "Push through the legs, then open the hips slightly and draw the handle to the lower ribs.",
        "Return by extending the arms, hinging forward, then bending the knees."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-rowing-ergometer-339143cd6dff.gif?alt=media&token=4f1de594-f175-41b4-afe0-ff291e5ca59d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-rowing-ergometer-add7ff8209c3.png?alt=media&token=d7e2a47e-c1ef-4bc8-a956-34c1686be410",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/rowing-ergometer/",
      "mediaKind": "animated-demonstration",
      "frames": 9,
      "durationMs": 1980,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "997b61d0dbae9671105e12296e458908be86e5a411aadc92ea338edf40159d9b",
          "bytes": 250285,
          "mimeType": "image/gif",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-rowing-ergometer-997b61d0dbae9671.gif?alt=media&token=4e89ff1a-4612-4168-a12e-51621375b37c",
          "name": "trainai/creator-media/2026-10-07/trainai-rowing-ergometer-997b61d0dbae9671.gif",
          "verifiedAt": "2026-10-07T23:32:34.593Z"
        },
        "webp": {
          "sha256": "e9712a96da1b7d672ffc3c069d415b435d0b901edcedf05a88b8a5a0c5ddac3a",
          "bytes": 408084,
          "mimeType": "image/webp",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-rowing-ergometer-e9712a96da1b7d67.webp?alt=media&token=79355720-a73a-4399-9a1b-1d7fff49ec4d",
          "name": "trainai/creator-media/2026-10-07/trainai-rowing-ergometer-e9712a96da1b7d67.webp",
          "verifiedAt": "2026-10-07T23:32:36.442Z"
        },
        "poster": {
          "sha256": "01c37a601b8c7df852aa8226fe44e43f09992f7a7d8749f708d3f9b329088d39",
          "bytes": 72725,
          "mimeType": "image/png",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-rowing-ergometer-01c37a601b8c7df8.png?alt=media&token=4b3e1eaf-44b6-482f-89bd-e136236f4a35",
          "name": "trainai/creator-media/2026-10-07/trainai-rowing-ergometer-01c37a601b8c7df8.png",
          "verifiedAt": "2026-10-07T23:32:37.003Z"
        }
      }
    },
    {
      "id": "trainai-run",
      "slug": "run",
      "name": "Run",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [
        "running-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Run on a clear, suitable surface with an upright, relaxed posture.",
        "Alternate strides with the opposite arm swinging forward.",
        "Keep the steps controlled and use a pace suited to your current ability."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-run-829cd8d27122.gif?alt=media&token=bc509c21-6e5a-4bd3-ac7a-fe425bfb19c2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-run-d74ccf62026c.png?alt=media&token=993af374-6ca9-4183-ace0-d4151c0ac46f",
      "aliases": [
        "run"
      ],
      "legacyIds": [
        "0685"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/run/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "00ab6484baaae3cf45db69bdcc45b123fd1bd32f408b07a6fa7830d8c0a4c916",
          "bytes": 178168,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-run-00ab6484baaae3cf.gif?alt=media&token=f89c284b-c91a-4c4d-a7b3-338c74549d17",
          "name": "trainai/creator-media/2026-10-07/trainai-run-00ab6484baaae3cf.gif",
          "verifiedAt": "2026-10-07T23:32:40.230Z"
        },
        "webp": {
          "sha256": "6d1779eb099da3d01dcc4206a141dc5c6bb302227f1348e96e238ec2415ae089",
          "bytes": 268740,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-run-6d1779eb099da3d0.webp?alt=media&token=8944d3d0-f1fb-4ce1-9eff-ecd0868449bd",
          "name": "trainai/creator-media/2026-10-07/trainai-run-6d1779eb099da3d0.webp",
          "verifiedAt": "2026-10-07T23:32:43.198Z"
        },
        "poster": {
          "sha256": "7c34baa06bac47d4fa7ea784918aca74c986fba53d8d5b53050a95930f35d699",
          "bytes": 130426,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-run-7c34baa06bac47d4.png?alt=media&token=191d64fe-b6d9-4eea-9a73-12cba5c42708",
          "name": "trainai/creator-media/2026-10-07/trainai-run-7c34baa06bac47d4.png",
          "verifiedAt": "2026-10-07T23:32:42.000Z"
        }
      }
    },
    {
      "id": "trainai-scapular-circles",
      "slug": "scapular-circles",
      "name": "Scapular circles",
      "category": "Mobility",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall arms relaxed beside body.",
        "Move shoulder blades forward around ribs, elevate slightly, draw back, then down in one slow small circle.",
        "Elbows remain relaxed, head and feet quiet.",
        "Subtle shoulder-girdle mobility, no swinging arms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-scapular-circles-50e7ea6ea7c9.gif?alt=media&token=2911f97b-a676-4ada-9eba-69c6c9ea66d7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-scapular-circles-9fe11d41f5c2.png?alt=media&token=99e4a63f-be27-4ca7-bc46-6100686c8d03",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/scapular-circles/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "970680b0588e1ceefbeae0b92b151f675bc7acf15d31e8916ce2620a197ee09a",
          "bytes": 271826,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-circles-970680b0588e1cee.gif?alt=media&token=fd1a73ed-5b52-47ee-aa4c-59c12abca250",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-circles-970680b0588e1cee.gif",
          "verifiedAt": "2026-10-07T23:32:42.347Z"
        },
        "webp": {
          "sha256": "63ccb21bb1b78aae94fcf9687d908429a6dc3a429f0db233f3e66f97bb655479",
          "bytes": 440996,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-circles-63ccb21bb1b78aae.webp?alt=media&token=ccad9f2a-5e4d-44e8-8ddc-9338bd591300",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-circles-63ccb21bb1b78aae.webp",
          "verifiedAt": "2026-10-07T22:47:25.074Z"
        },
        "poster": {
          "sha256": "cbca85827b47958ebd287e3dee55dd5a6ce64bd880deb129e8479acea39321e1",
          "bytes": 44145,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-circles-cbca85827b47958e.png?alt=media&token=be19bd85-1f43-4f89-9122-3a9835d750ad",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-circles-cbca85827b47958e.png",
          "verifiedAt": "2026-10-07T22:47:24.413Z"
        }
      }
    },
    {
      "id": "trainai-scapular-pull-up",
      "slug": "scapular-pull-up",
      "name": "Scapular pull-up",
      "category": "Pull-up and suspension",
      "target": "serratus anterior",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [
        "rated-pull-up-bar"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Hang from fixed freestanding pull-up bar with overhand grip and ELBOWS STRAIGHT throughout.",
        "Depress shoulder blades to lift torso only a few centimeters without bending elbows, then relax shoulders into hang.",
        "Very small deliberate vertical motion, legs quiet, hands fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-scapular-pull-up-acfbfcfd35e0.gif?alt=media&token=83994cd3-79c2-42e0-9a3c-f8b1c6fd0f63",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-scapular-pull-up-2835bb6ea082.png?alt=media&token=4b83d4bf-0438-4c80-a320-121a187a1e1b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/scapular-pull-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d26a75d5f0fc83fe2b4ab09271e0de31b308a51d25d98ea8752c93591d042dc2",
          "bytes": 623488,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-pull-up-d26a75d5f0fc83fe.gif?alt=media&token=118ea7fa-25e1-41de-9ce9-6373ac14a506",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-pull-up-d26a75d5f0fc83fe.gif",
          "verifiedAt": "2026-10-07T23:32:48.092Z"
        },
        "webp": {
          "sha256": "5d88ba1521430ed6e666fc914fdc2624bc6a7a084c23c9a4395ca61e5497674f",
          "bytes": 954846,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-pull-up-5d88ba1521430ed6.webp?alt=media&token=ed112010-d247-4b6f-8eb6-9504353e73df",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-pull-up-5d88ba1521430ed6.webp",
          "verifiedAt": "2026-10-07T23:32:47.665Z"
        },
        "poster": {
          "sha256": "d8b34a701dfb497fdc659222e389cdc6d4214163d5b860dbe604d70638ff3ea3",
          "bytes": 103291,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-pull-up-d8b34a701dfb497f.png?alt=media&token=9edaa8f7-cea4-491b-bc38-e0d8385c7c42",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-pull-up-d8b34a701dfb497f.png",
          "verifiedAt": "2026-10-07T23:32:46.556Z"
        }
      }
    },
    {
      "id": "trainai-scapular-push-up",
      "slug": "scapular-push-up",
      "name": "Scapular push-up",
      "category": "Home pushing",
      "target": "serratus anterior",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start in a high plank with hands under shoulders and elbows straight.",
        "Let the shoulder blades move gently together, then push the floor away to spread them.",
        "Keep the movement small and avoid bending the elbows."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-scapular-push-up-6e4b59477231.gif?alt=media&token=14015cdf-cc95-4417-ab0e-b1e356848f3c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-scapular-push-up-2222522d320c.png?alt=media&token=79b82424-39b4-4745-a18c-062d730bdb4f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/scapular-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e1bf500ddb9643e34984fd0b014bda00ffe705e853ee6c0dbf7c949d3920ce93",
          "bytes": 621499,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-push-up-e1bf500ddb9643e3.gif?alt=media&token=4e95a305-8a22-4efb-8448-093b56fde608",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-push-up-e1bf500ddb9643e3.gif",
          "verifiedAt": "2026-10-07T23:32:56.335Z"
        },
        "webp": {
          "sha256": "05698953ee48f5b95fbc48495473c0dadc8e689609b572e97dcd1b385193c123",
          "bytes": 1021520,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-push-up-05698953ee48f5b9.webp?alt=media&token=8a48a1d2-fbca-404b-be3d-14559d7c4995",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-push-up-05698953ee48f5b9.webp",
          "verifiedAt": "2026-10-07T23:33:26.965Z"
        },
        "poster": {
          "sha256": "23bf2b8927ca5e5aa5131845772cf125e8278d2d3eee6903490d82b684f12fa6",
          "bytes": 108387,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-scapular-push-up-23bf2b8927ca5e5a.png?alt=media&token=1486c1f8-0bf1-47fc-be5b-711d5c3b6376",
          "name": "trainai/creator-media/2026-10-07/trainai-scapular-push-up-23bf2b8927ca5e5a.png",
          "verifiedAt": "2026-10-07T23:32:49.819Z"
        }
      }
    },
    {
      "id": "trainai-seated-arm-reach",
      "slug": "seated-arm-reach",
      "name": "Seated arm reach",
      "category": "Chair and seated movement",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "seated",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on fixed armless chair, feet flat and hips centered.",
        "Reach both arms forward then upward overhead as comfortable, elbows softly straight, then lower.",
        "No back arch or standing up, chair and feet still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-arm-reach-ccccebfa853b.gif?alt=media&token=f740334a-f69f-4a3f-8dda-a23843c37711",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-arm-reach-8475b9d09e04.png?alt=media&token=094c554f-feee-4a59-ba9e-2dead46e511d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-arm-reach/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a7e971ee4625b075b1ee3070d8bbb7b38389bcf8b4031293ed3cf3df57b728bb",
          "bytes": 312589,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-arm-reach-a7e971ee4625b075.gif?alt=media&token=b1af3b1d-16ad-493f-b3c2-8cf3778ed930",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-arm-reach-a7e971ee4625b075.gif",
          "verifiedAt": "2026-10-07T23:32:52.839Z"
        },
        "webp": {
          "sha256": "2e73b1fefad2a9db24d9746dff30a8b145b376ba8347d435a6112ca645d60793",
          "bytes": 495594,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-arm-reach-2e73b1fefad2a9db.webp?alt=media&token=1de388d3-07c6-4390-90d3-6d43e8e840ff",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-arm-reach-2e73b1fefad2a9db.webp",
          "verifiedAt": "2026-10-07T23:32:55.986Z"
        },
        "poster": {
          "sha256": "d94738bd9656b26f33ae18306aabf4d8e9d9bad9092bd1964129061fa803cb44",
          "bytes": 61073,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-arm-reach-d94738bd9656b26f.png?alt=media&token=433eae51-913f-4c9e-925d-1623d83c6d86",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-arm-reach-d94738bd9656b26f.png",
          "verifiedAt": "2026-10-07T23:32:57.057Z"
        }
      }
    },
    {
      "id": "trainai-seated-band-row",
      "slug": "seated-band-row",
      "name": "Seated band row",
      "category": "Bands",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on ground, legs extended with knees softly bent, feet still.",
        "A two-handle orange resistance band runs from hands to a fixed small anchor ahead at ankle height.",
        "Start arms extended, pull elbows backward so hands approach lower ribs, then extend arms.",
        "Do not rock torso; band always attached to same anchor."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-band-row-61a4e7c5ea6f.gif?alt=media&token=8cf2b577-295e-4315-a583-c5132f31a644",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-band-row-f6c2aaac29e4.png?alt=media&token=e53a8537-a5c4-40b0-97ea-059dc2d69470",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-band-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "21c431292fe9d18eab62bbcb7f2619ef58f63f5251e6520d6c14d6aaf0f90784",
          "bytes": 408858,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-band-row-21c431292fe9d18e.gif?alt=media&token=67f796d4-d1d0-4a01-b994-edcbddec98ad",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-band-row-21c431292fe9d18e.gif",
          "verifiedAt": "2026-10-07T23:33:05.479Z"
        },
        "webp": {
          "sha256": "76b18c137c068b423cf56f96619411b4281fdbc76fe43a4fb8db6b55d94280bc",
          "bytes": 751888,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-band-row-76b18c137c068b42.webp?alt=media&token=772812e6-1b3b-49e9-8d8b-36ad6576a7b8",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-band-row-76b18c137c068b42.webp",
          "verifiedAt": "2026-10-07T22:47:28.948Z"
        },
        "poster": {
          "sha256": "186af6aaefaf6787e2767598724eabfbb8f1f642113166996d8aefa2fb4f31f7",
          "bytes": 73869,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-band-row-186af6aaefaf6787.png?alt=media&token=bf762d54-0f5d-443a-b9c5-b6fa15440e99",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-band-row-186af6aaefaf6787.png",
          "verifiedAt": "2026-10-07T22:47:28.791Z"
        }
      }
    },
    {
      "id": "trainai-seated-cable-row",
      "slug": "seated-cable-row",
      "name": "Seated cable row",
      "category": "Cable station",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "row-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright at fixed low cable row station with feet on plates, knees softly bent.",
        "Hold close-grip row handle, arms extended.",
        "Pull handle to lower ribs with elbows close, then extend.",
        "Cable remains taut between low pulley and handle; no torso rocking."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-cable-row-679151af5978.gif?alt=media&token=211f428c-8d4d-405e-9b97-19073cdffcd3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-cable-row-9cc6a5d6e836.png?alt=media&token=f7d181b3-2b78-4313-b3c4-5329839a9b53",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-cable-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6c5046ca6c1336c2ca4a8bd63697cf34af1e9630c86c16bf0d50886237fbb492",
          "bytes": 614437,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-cable-row-6c5046ca6c1336c2.gif?alt=media&token=2a704f4c-66a1-4d87-8dcb-bf06a26728b7",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-cable-row-6c5046ca6c1336c2.gif",
          "verifiedAt": "2026-10-07T23:33:17.430Z"
        },
        "webp": {
          "sha256": "9fa60ba64f1e6ec62afc506d188b2b02e5424f2e5e8ba755e60dd73af2e200b9",
          "bytes": 1008794,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-cable-row-9fa60ba64f1e6ec6.webp?alt=media&token=169f1bac-4db6-4fab-ba27-94723e2fbbfa",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-cable-row-9fa60ba64f1e6ec6.webp",
          "verifiedAt": "2026-10-07T22:47:31.028Z"
        },
        "poster": {
          "sha256": "b61572724b2ff200e34f953202715d6a665708ce2b8d6a115fbf04b213ed7d5e",
          "bytes": 109340,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-cable-row-b61572724b2ff200.png?alt=media&token=3e59eefc-c9db-4c2d-af50-76ae0d641b1f",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-cable-row-b61572724b2ff200.png",
          "verifiedAt": "2026-10-07T22:47:29.994Z"
        }
      }
    },
    {
      "id": "trainai-seated-calf-raise",
      "slug": "seated-calf-raise",
      "name": "Seated calf raise",
      "category": "Gym machines",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "seated-calf-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit in the calf-raise machine with the thigh pad secured and balls of the feet on the platform.",
        "Raise the heels through a comfortable range without bouncing.",
        "Lower the heels slowly while keeping the forefeet supported."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-calf-raise-5624fd793d5e.gif?alt=media&token=33367695-1361-492a-a6fc-d22715535137",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-calf-raise-a538f8d297f0.png?alt=media&token=baabe34e-ffaa-45de-be6a-22ddde057cf2",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0bbf71fd8a94016bdc1443bc893310cf49fd0eb57824b0757372c4bfa8d9d6fa",
          "bytes": 471604,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-calf-raise-0bbf71fd8a94016b.gif?alt=media&token=b410d4ee-bcd2-4fbb-90ad-684ce30efb68",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-calf-raise-0bbf71fd8a94016b.gif",
          "verifiedAt": "2026-10-07T23:33:21.984Z"
        },
        "webp": {
          "sha256": "eb8f4f4c6261e383a1068f1287a05374ad7214fc13d4b5237cefc8014ec4046a",
          "bytes": 699372,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-calf-raise-eb8f4f4c6261e383.webp?alt=media&token=18f1c303-67bf-45d6-a4fe-0a1d37c99099",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-calf-raise-eb8f4f4c6261e383.webp",
          "verifiedAt": "2026-10-07T22:47:32.304Z"
        },
        "poster": {
          "sha256": "c8044c11cbd80659128b52e9cc15c2a1107306ea84fbbf6b26afb173d92673a8",
          "bytes": 74662,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-calf-raise-c8044c11cbd80659.png?alt=media&token=ba3fd7c1-8b94-40ff-ad3b-ed1135e79361",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-calf-raise-c8044c11cbd80659.png",
          "verifiedAt": "2026-10-07T22:47:31.988Z"
        }
      }
    },
    {
      "id": "trainai-seated-dumbbell-shoulder-press",
      "slug": "seated-dumbbell-shoulder-press",
      "name": "Seated dumbbell shoulder press",
      "category": "Dumbbell foundations",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable bench with back supported and feet flat.",
        "Start with dumbbells at shoulder height and press overhead without arching the lower back.",
        "Lower slowly to the starting position."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-dumbbell-shoulder-press-9eab9b97f48b.gif?alt=media&token=e6ccb9c7-bccf-4ab7-9cdb-fbc1ca4c9cf5",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-dumbbell-shoulder-press-721343964f0f.png?alt=media&token=a89b7add-691a-4dfe-afd6-040725838294",
      "aliases": [
        "dumbbell seated shoulder press"
      ],
      "legacyIds": [
        "0405"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-dumbbell-shoulder-press/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1500,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7f749ba941a16c300a53ec4285ed3951c40e3f1a7817152efa60749698b8528a",
          "bytes": 426995,
          "mimeType": "image/gif",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-dumbbell-shoulder-press-7f749ba941a16c30.gif?alt=media&token=441863ac-4304-416a-9d54-855a60cb582f",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-dumbbell-shoulder-press-7f749ba941a16c30.gif",
          "verifiedAt": "2026-10-07T23:33:23.427Z"
        },
        "webp": {
          "sha256": "8ce16e6df96e53074456e3604ef6797748bb396c56d9ab16150dc34df54bbaa2",
          "bytes": 645632,
          "mimeType": "image/webp",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-dumbbell-shoulder-press-8ce16e6df96e5307.webp?alt=media&token=11b4166e-1b7f-4b8f-8de0-820fe7ac468d",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-dumbbell-shoulder-press-8ce16e6df96e5307.webp",
          "verifiedAt": "2026-10-07T23:33:29.434Z"
        },
        "poster": {
          "sha256": "bb136ab9f7503c8672c3aebeb8750eaf59421dd2a6341b26949f590efaa15d60",
          "bytes": 194307,
          "mimeType": "image/png",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-dumbbell-shoulder-press-bb136ab9f7503c86.png?alt=media&token=f62df910-831b-4cfc-8062-771c802373c6",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-dumbbell-shoulder-press-bb136ab9f7503c86.png",
          "verifiedAt": "2026-10-07T23:33:24.334Z"
        }
      }
    },
    {
      "id": "trainai-seated-figure-four-stretch",
      "slug": "seated-figure-four-stretch",
      "name": "Seated figure-four stretch",
      "category": "Static stretching",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit upright on a sturdy armless chair, left foot flat.",
        "Cross right ankle over left thigh above knee, right knee opens out.",
        "Keep back long and hinge forward a little from hips.",
        "Hold comfortable stretch, then ease upright.",
        "Chair and planted left foot stay fixed.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-figure-four-stretch-201183989823.gif?alt=media&token=fe754fb9-7723-4857-85d7-0a334062fe83",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-figure-four-stretch-3f2318b043d0.png?alt=media&token=0cacfe64-f320-433a-9940-c0d7fad2c3b5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-figure-four-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6894fc7018f2ea9db01785d21b5e85e016e50708749bf7f402b5137def90cb03",
          "bytes": 217465,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-figure-four-stretch-6894fc7018f2ea9d.gif?alt=media&token=94222898-1048-4539-b8c6-28c2b69818e4",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-figure-four-stretch-6894fc7018f2ea9d.gif",
          "verifiedAt": "2026-10-07T23:33:26.665Z"
        },
        "webp": {
          "sha256": "7ac208ea1c1e4ae8480726f345ab1ced57c712f7d156633ad93af10a1a3faeda",
          "bytes": 334138,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-figure-four-stretch-7ac208ea1c1e4ae8.webp?alt=media&token=df4a6d64-df55-48ba-9794-b62fdefd1665",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-figure-four-stretch-7ac208ea1c1e4ae8.webp",
          "verifiedAt": "2026-10-07T23:33:40.056Z"
        },
        "poster": {
          "sha256": "1cfa27bac6ec9b59300787a233a2f10d37b71d361e5b60f1e50b5883ce960f42",
          "bytes": 64195,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-figure-four-stretch-1cfa27bac6ec9b59.png?alt=media&token=0601b01c-cb38-4dcd-9e7c-d0f2770ea31f",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-figure-four-stretch-1cfa27bac6ec9b59.png",
          "verifiedAt": "2026-10-07T23:33:31.308Z"
        }
      }
    },
    {
      "id": "trainai-seated-hamstring-stretch",
      "slug": "seated-hamstring-stretch",
      "name": "Seated hamstring stretch",
      "category": "Static stretching",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit on floor with right leg straight forward and left knee bent with sole near inner right thigh.",
        "Keep spine long and hinge gently forward from hips, hands reach toward right shin without forcing toes.",
        "Hold then ease upright.",
        "Right knee softly extended, no bouncing.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-hamstring-stretch-83841753bc78.gif?alt=media&token=46fe6dc4-1039-471f-ac95-a0c79c5930f9",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-hamstring-stretch-343b3821c300.png?alt=media&token=bf3a655c-2a0c-4df3-8662-cf6d7dd4e522",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-hamstring-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "dba23ffe5d81b4ea21e906f5b53df29170ee3dd5b24b3617b07d5543cb2bd1bf",
          "bytes": 208747,
          "mimeType": "image/gif",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-hamstring-stretch-dba23ffe5d81b4ea.gif?alt=media&token=42240f39-907c-427a-b7e4-b67fa3950f12",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-hamstring-stretch-dba23ffe5d81b4ea.gif",
          "verifiedAt": "2026-10-07T23:33:34.237Z"
        },
        "webp": {
          "sha256": "67753d7f36ed4c6cb8a97facfe43295024c927c8059ff7840f9a511c1f88a150",
          "bytes": 336008,
          "mimeType": "image/webp",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-hamstring-stretch-67753d7f36ed4c6c.webp?alt=media&token=7dc7ace8-fbb1-41ab-b676-b664af786401",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-hamstring-stretch-67753d7f36ed4c6c.webp",
          "verifiedAt": "2026-10-07T23:33:39.126Z"
        },
        "poster": {
          "sha256": "911152e1e49c1e2b33173ab34b87bda94d9436b8648e03a7051520555d0e9760",
          "bytes": 84453,
          "mimeType": "image/png",
          "width": 368,
          "height": 368,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-hamstring-stretch-911152e1e49c1e2b.png?alt=media&token=aa159c44-bc89-424b-9467-4bde4e8df4ae",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-hamstring-stretch-911152e1e49c1e2b.png",
          "verifiedAt": "2026-10-07T23:33:35.736Z"
        }
      }
    },
    {
      "id": "trainai-seated-heel-raise",
      "slug": "seated-heel-raise",
      "name": "Seated heel raise",
      "category": "Chair and seated movement",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "seated",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on fixed armless chair feet flat and knees at 90 degrees.",
        "Keep balls of both feet on floor, raise both heels by extending ankles, then lower.",
        "No whole-foot lift.",
        "Hands rest on thighs, torso still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-heel-raise-978175a80839.gif?alt=media&token=237df754-037e-4015-a8bd-294b6122cfa0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-heel-raise-deb716fa03ae.png?alt=media&token=a3d9ab3f-6f37-4beb-a0ef-bb02773be6be",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-heel-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c576787397ac1a71ccc11fbe89b9cd5c30a2c5c2e627bcae93d577f7f61f6cd3",
          "bytes": 312344,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-heel-raise-c576787397ac1a71.gif?alt=media&token=047eb022-6b38-4c57-8662-e0ee27473ad4",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-heel-raise-c576787397ac1a71.gif",
          "verifiedAt": "2026-10-07T23:33:37.580Z"
        },
        "webp": {
          "sha256": "2f9862bb16df002eb46a2b06f6c3c6aee12b4df86fb893c6c3d8071c6d0ed5df",
          "bytes": 483324,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-heel-raise-2f9862bb16df002e.webp?alt=media&token=a43b610e-3e32-41dc-af35-f617535a9d00",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-heel-raise-2f9862bb16df002e.webp",
          "verifiedAt": "2026-10-07T22:47:35.206Z"
        },
        "poster": {
          "sha256": "881a3e4370e7c3a5d71556dff99ff52482374099d99159af49ecb4536e4d9d7c",
          "bytes": 58158,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-heel-raise-881a3e4370e7c3a5.png?alt=media&token=fc2d825c-9237-4995-a3ab-ebe30df142eb",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-heel-raise-881a3e4370e7c3a5.png",
          "verifiedAt": "2026-10-07T22:47:35.119Z"
        }
      }
    },
    {
      "id": "trainai-seated-knee-extension",
      "slug": "seated-knee-extension",
      "name": "Seated knee extension",
      "category": "Chair and seated movement",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "seated",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on sturdy armless chair with both thighs supported and feet flat.",
        "Extend right knee to lift right foot until lower leg nearly straight forward, pause, then lower.",
        "Left foot fixed, right thigh remains on seat.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-knee-extension-709ab2330a43.gif?alt=media&token=f8a538a3-05cb-4dc3-9daa-2d90978fe542",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-knee-extension-8f0cf5f5ebac.png?alt=media&token=bef3ad7c-476d-4a6e-bf92-6d7d89657d7e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-knee-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a92ed177aebcc90e56e85be75198abc601f0e9b21cd128ba6cfd29af9047d071",
          "bytes": 603919,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-knee-extension-a92ed177aebcc90e.gif?alt=media&token=0cbaefe7-9aff-45bd-aea2-fe5c7d9caa2c",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-knee-extension-a92ed177aebcc90e.gif",
          "verifiedAt": "2026-10-07T23:33:44.271Z"
        },
        "webp": {
          "sha256": "665988123f09ada8d82921b72ec09cf8433c2dd7b2f4865409d1992dea76bd4c",
          "bytes": 932318,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-knee-extension-665988123f09ada8.webp?alt=media&token=b2056f19-f188-489f-bd54-5abba32d64b3",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-knee-extension-665988123f09ada8.webp",
          "verifiedAt": "2026-10-07T23:33:53.963Z"
        },
        "poster": {
          "sha256": "1452343c175f01894593db217e3b8617b21f997d6cecca7d13b97eb7e0996f7d",
          "bytes": 98319,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-knee-extension-1452343c175f0189.png?alt=media&token=96c148d2-a3cf-4b01-bd3d-db9e494b6923",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-knee-extension-1452343c175f0189.png",
          "verifiedAt": "2026-10-07T23:33:40.848Z"
        }
      }
    },
    {
      "id": "trainai-seated-knee-tuck",
      "slug": "seated-knee-tuck",
      "name": "Seated knee tuck",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on floor leaning back slightly, palms behind hips for support, feet lifted.",
        "Extend both legs forward together with a comfortable slight knee bend, then draw both knees toward chest while bringing torso a little more upright.",
        "Keep hands planted and balance on sitting bones.",
        "Smooth tuck and extend cycle."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-knee-tuck-834fd36b85b2.gif?alt=media&token=da849273-b4d9-4e36-8714-a81ca551b4da",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-knee-tuck-737da05ecec1.png?alt=media&token=2d0b7f4c-795c-4649-b4bf-e6e001938171",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-knee-tuck/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5fdb3c284e64036205f09170c8adb92b727c0e944997cf2d7b7127013a35c951",
          "bytes": 403546,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-knee-tuck-5fdb3c284e640362.gif?alt=media&token=aec17664-1acd-4220-95d6-fa1d120a4244",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-knee-tuck-5fdb3c284e640362.gif",
          "verifiedAt": "2026-10-07T23:33:42.297Z"
        },
        "webp": {
          "sha256": "34e6c1ce5c39995cec59f54862db2bb4173efffb67757b7a3b9f067712d1e2f6",
          "bytes": 640480,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-knee-tuck-34e6c1ce5c39995c.webp?alt=media&token=eb89d39a-ee48-471a-9ed5-d116291f7c3a",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-knee-tuck-34e6c1ce5c39995c.webp",
          "verifiedAt": "2026-10-07T23:33:44.328Z"
        },
        "poster": {
          "sha256": "be04c32ecf9fb26c8c8481f8b22aa1425fba7b6931e2d77d5f88c6c933bb8c14",
          "bytes": 66652,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-knee-tuck-be04c32ecf9fb26c.png?alt=media&token=a95dafa7-96ed-45e0-9deb-a8e1d3d1ab85",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-knee-tuck-be04c32ecf9fb26c.png",
          "verifiedAt": "2026-10-07T23:33:45.746Z"
        }
      }
    },
    {
      "id": "trainai-seated-leg-curl",
      "slug": "seated-leg-curl",
      "name": "Seated leg curl",
      "category": "Gym machines",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "leverage machine",
      "requiredEquipment": [
        "seated-leg-curl-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the seated leg-curl machine so its pivot aligns with your knees.",
        "Secure the thigh pad and place the lower-leg pad above the heels.",
        "Bend the knees to pull the pad back, then extend slowly without lifting the hips."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-leg-curl-94e5327f8270.gif?alt=media&token=5326db68-6fa6-4c32-8b14-eba868070c32",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-leg-curl-132e8ff0de67.png?alt=media&token=91b283fe-4a50-46ef-8aa8-94cb28988f21",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-leg-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "92bd5d3c580c39c48e045bed746498f3b0257c6d1eb0d068073c61d6cf0505c2",
          "bytes": 680267,
          "mimeType": "image/gif",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-leg-curl-92bd5d3c580c39c4.gif?alt=media&token=0a4fe9e4-0397-42a6-b16b-77fa6b0e2d05",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-leg-curl-92bd5d3c580c39c4.gif",
          "verifiedAt": "2026-10-07T23:33:51.350Z"
        },
        "webp": {
          "sha256": "9151b68a27198383039c71937dde5b792ab9328eea2a2b14fbdf57dfa1e86a1b",
          "bytes": 1004132,
          "mimeType": "image/webp",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-leg-curl-9151b68a27198383.webp?alt=media&token=7a244d48-8dbf-4f2b-b0e4-1b23e933fab6",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-leg-curl-9151b68a27198383.webp",
          "verifiedAt": "2026-10-07T23:33:48.238Z"
        },
        "poster": {
          "sha256": "1e094af7c447889acef3e22040ad5620e9a6bb27875164a9353218a0c4e107db",
          "bytes": 109353,
          "mimeType": "image/png",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-leg-curl-1e094af7c447889a.png?alt=media&token=bbdba3a9-d5a3-4a19-bb61-5825b239f0e9",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-leg-curl-1e094af7c447889a.png",
          "verifiedAt": "2026-10-07T23:33:49.168Z"
        }
      }
    },
    {
      "id": "trainai-seated-march",
      "slug": "seated-march",
      "name": "Seated march",
      "category": "Chair and seated movement",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "seated",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on sturdy armless chair with both feet flat, hands resting at seat edges.",
        "Lift right knee and foot a small amount, lower, then lift left knee and foot, lower.",
        "Back upright and pelvis seated, both legs must alternate visibly."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-march-c1d102329faf.gif?alt=media&token=35e67ed2-75ad-4e21-9387-c60312c534af",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-march-f18568d62fa9.png?alt=media&token=81dd8e7e-b816-4e4d-8fe2-7d544be880df",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-march/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bd9a0d3d1fbef88be603189b5da11847be59ee91d6e3eba9663136e1e7206fd0",
          "bytes": 604925,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-march-bd9a0d3d1fbef88b.gif?alt=media&token=e0f9c985-b44e-4303-b9fc-3de19b586de9",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-march-bd9a0d3d1fbef88b.gif",
          "verifiedAt": "2026-10-07T23:33:51.481Z"
        },
        "webp": {
          "sha256": "223b5463e305ede818c8f12faf05515ca680d9278c82f1cdaf96dc46a3806377",
          "bytes": 942404,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-march-223b5463e305ede8.webp?alt=media&token=6a0ac512-81de-4c72-b472-9b1e0ed3e35d",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-march-223b5463e305ede8.webp",
          "verifiedAt": "2026-10-07T23:33:54.311Z"
        },
        "poster": {
          "sha256": "c0d3a19c1a84c32d9c44a0b2d9ebbf5c64556183432cb4fc18102a2d4af2d301",
          "bytes": 105134,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-march-c0d3a19c1a84c32d.png?alt=media&token=98dcdf5b-2ca7-42e4-a865-de5fc464c935",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-march-c0d3a19c1a84c32d.png",
          "verifiedAt": "2026-10-07T23:33:53.022Z"
        }
      }
    },
    {
      "id": "trainai-seated-neck-side-stretch",
      "slug": "seated-neck-side-stretch",
      "name": "Seated neck side stretch",
      "category": "Static stretching",
      "target": "levator scapulae",
      "bodyPart": "neck",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit cross-legged upright on floor, hands resting on thighs.",
        "Gently tilt right ear toward right shoulder while shoulders stay level and down.",
        "Hold comfortable small range then return neutral.",
        "No hand pulling, no full neck circle.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-neck-side-stretch-f41212a44719.gif?alt=media&token=1c9d9846-da47-4b73-9848-792e71ac0413",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-neck-side-stretch-7544a19167b1.png?alt=media&token=eed87fbb-6396-4ab4-aad3-8ff05b305b64",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-neck-side-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5294211c0f5a4b23692b7a204a364bd02d371557ef237c7035e36ce0201e21e7",
          "bytes": 230254,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-neck-side-stretch-5294211c0f5a4b23.gif?alt=media&token=573c028f-3215-4acc-b5ee-1f02af733906",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-neck-side-stretch-5294211c0f5a4b23.gif",
          "verifiedAt": "2026-10-07T23:33:55.808Z"
        },
        "webp": {
          "sha256": "a9814e92f48280a0ed0613d5afe849daf5a6f31fe51e98dc5915de9d159cc86f",
          "bytes": 364370,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-neck-side-stretch-a9814e92f48280a0.webp?alt=media&token=ca9b3c08-169f-4a00-8204-acf75aaee678",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-neck-side-stretch-a9814e92f48280a0.webp",
          "verifiedAt": "2026-10-07T22:47:40.541Z"
        },
        "poster": {
          "sha256": "effdfea924b9958df28ce963c763855c6fc5348d1aedd9d9cada6ee5f164c813",
          "bytes": 83943,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-neck-side-stretch-effdfea924b9958d.png?alt=media&token=238fe874-74be-4c37-9e82-570ea7281c92",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-neck-side-stretch-effdfea924b9958d.png",
          "verifiedAt": "2026-10-07T22:47:40.402Z"
        }
      }
    },
    {
      "id": "trainai-seated-shoulder-blade-squeeze",
      "slug": "seated-shoulder-blade-squeeze",
      "name": "Seated shoulder-blade squeeze",
      "category": "Chair and seated movement",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "seated",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on sturdy armless chair feet flat.",
        "Arms relaxed beside torso, elbows bent lightly.",
        "Gently draw shoulder blades back and slightly down without shrugging, hold briefly, release.",
        "Chest opens subtly, no excessive back arch."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-shoulder-blade-squeeze-150f0b51b668.gif?alt=media&token=236bef92-2ca2-41ff-9384-0cb7240cced5",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-shoulder-blade-squeeze-f0c2eda07f71.png?alt=media&token=869d8a67-7d6b-4a13-b3a8-3b9236663b4b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-shoulder-blade-squeeze/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "081046917019ad3615370d972174eb21b426008f4d73d15d0267b2159ec07506",
          "bytes": 326511,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-shoulder-blade-squeeze-081046917019ad36.gif?alt=media&token=0b77c593-42f7-43d1-bd7e-cb19f272c485",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-shoulder-blade-squeeze-081046917019ad36.gif",
          "verifiedAt": "2026-10-07T23:33:56.800Z"
        },
        "webp": {
          "sha256": "7dce2bf5c5c95685f305ab2e3cf561661880f3d6e5d58cf42f94b9b28702295a",
          "bytes": 505968,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-shoulder-blade-squeeze-7dce2bf5c5c95685.webp?alt=media&token=f2a84101-d35e-43f7-b8cb-c4dee2dddba9",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-shoulder-blade-squeeze-7dce2bf5c5c95685.webp",
          "verifiedAt": "2026-10-07T23:33:55.818Z"
        },
        "poster": {
          "sha256": "8e71a777c7e3ad0e715e2ab0a95954fd4200da392835c29019cb7195dea412f5",
          "bytes": 60977,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-shoulder-blade-squeeze-8e71a777c7e3ad0e.png?alt=media&token=f1d03f36-5e7a-418e-8d1d-2e4bf9f402ed",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-shoulder-blade-squeeze-8e71a777c7e3ad0e.png",
          "verifiedAt": "2026-10-07T23:33:56.807Z"
        }
      }
    },
    {
      "id": "trainai-seated-supported-side-reach",
      "slug": "seated-supported-side-reach",
      "name": "Seated supported side reach",
      "category": "Static stretching",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit upright on sturdy armless chair feet flat.",
        "left hand holds side of seat, right arm reaches overhead and torso bends gently to left.",
        "Both hips remain seated, no twisting.",
        "Hold then return upright, chair and feet still.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-supported-side-reach-3745c45a5719.gif?alt=media&token=ddeb348d-8666-4107-90d6-9cc913754bfb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-supported-side-reach-753fe5729806.png?alt=media&token=204676b4-50b5-46c4-8077-7b37fd3b84c7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-supported-side-reach/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e45970601f5b3934b1f0fb9f890bca04f2dc7c2d2bbee36e046bab0e38a68752",
          "bytes": 163768,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-supported-side-reach-e45970601f5b3934.gif?alt=media&token=4394ed73-4678-4868-990f-a1bd5b82438c",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-supported-side-reach-e45970601f5b3934.gif",
          "verifiedAt": "2026-10-07T23:33:56.465Z"
        },
        "webp": {
          "sha256": "858ac536f023b134e0a4a6b72c7788f1e6433c7fbf30a5e420a4cc3b427406cb",
          "bytes": 237266,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-supported-side-reach-858ac536f023b134.webp?alt=media&token=0adfd771-02e4-429d-b8c4-ce680a13b32e",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-supported-side-reach-858ac536f023b134.webp",
          "verifiedAt": "2026-10-07T23:33:59.176Z"
        },
        "poster": {
          "sha256": "e3b6bf08b3fa80cc298594169662d1a9d516478e1aa13b1e8ef6ce1f8b45d9db",
          "bytes": 55474,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-supported-side-reach-e3b6bf08b3fa80cc.png?alt=media&token=9e5d3940-9f67-431c-b37e-19296add939c",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-supported-side-reach-e3b6bf08b3fa80cc.png",
          "verifiedAt": "2026-10-07T23:33:58.038Z"
        }
      }
    },
    {
      "id": "trainai-seated-thoracic-rotation",
      "slug": "seated-thoracic-rotation",
      "name": "Seated thoracic rotation",
      "category": "Mobility",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Sit cross-legged on floor upright, arms crossed lightly across chest.",
        "Rotate ribcage gently right while pelvis stays forward, return center, rotate left, return center.",
        "Head follows shoulders, no leaning.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-thoracic-rotation-6187a9c9faa2.gif?alt=media&token=8d7f6134-38d1-4621-a2e6-2acfbff592ac",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-thoracic-rotation-1d05e040dbb2.png?alt=media&token=7f0e49c1-9e99-4fe5-87c2-45913c3b6efd",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-thoracic-rotation/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4d9f3815fef61b1a408292c0c72056f28047a2fa72af6b436176edfa8e439585",
          "bytes": 451802,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-thoracic-rotation-4d9f3815fef61b1a.gif?alt=media&token=7ef29929-693a-4811-8def-f3d755e71a6f",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-thoracic-rotation-4d9f3815fef61b1a.gif",
          "verifiedAt": "2026-10-07T23:33:58.746Z"
        },
        "webp": {
          "sha256": "0c923f2b3bdedd14dabe5f0e14e4fcc93cf72f2d43f45d4d2b618be6d3f7e2e0",
          "bytes": 758084,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-thoracic-rotation-0c923f2b3bdedd14.webp?alt=media&token=c7919528-c867-411d-a0a8-2d22b049d813",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-thoracic-rotation-0c923f2b3bdedd14.webp",
          "verifiedAt": "2026-10-07T22:47:44.510Z"
        },
        "poster": {
          "sha256": "4a74e00b8b7837ff24889aa024a841dc8eb319381163e436d2e56372ded001cc",
          "bytes": 76910,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-thoracic-rotation-4a74e00b8b7837ff.png?alt=media&token=b04691c0-4943-4ba9-861b-7c66545892ed",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-thoracic-rotation-4a74e00b8b7837ff.png",
          "verifiedAt": "2026-10-07T22:47:42.930Z"
        }
      }
    },
    {
      "id": "trainai-seated-toe-raise",
      "slug": "seated-toe-raise",
      "name": "Seated toe raise",
      "category": "Chair and seated movement",
      "target": "tibialis anterior",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "seated",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on fixed armless chair feet flat and knees at 90 degrees.",
        "Keep both heels on floor, raise both forefeet and toes toward shins, then lower.",
        "No heel lift.",
        "Hands on thighs and torso still."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-toe-raise-e62ba70d0b94.gif?alt=media&token=c62ffd2c-362e-4698-be35-e8996cf28b47",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-seated-toe-raise-044dcb9fd567.png?alt=media&token=b7f0603c-a779-48ed-91c3-81fb43f998d5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-toe-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "af68f1603e2b6ac1f0c221945b3bfb2c57b50a2a209972a466b63ca67b6b2543",
          "bytes": 331151,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-toe-raise-af68f1603e2b6ac1.gif?alt=media&token=11c37477-33d5-44a6-8516-0d2ecf46bed1",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-toe-raise-af68f1603e2b6ac1.gif",
          "verifiedAt": "2026-10-07T23:34:01.183Z"
        },
        "webp": {
          "sha256": "6fac8e2de16a519fb63c63dcacfec7905bf4e5820880488e9a0f4d6893be5935",
          "bytes": 536394,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-toe-raise-6fac8e2de16a519f.webp?alt=media&token=1d5d1466-bf71-4a14-9512-98ac86714a64",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-toe-raise-6fac8e2de16a519f.webp",
          "verifiedAt": "2026-10-07T22:47:44.938Z"
        },
        "poster": {
          "sha256": "6beab004c7fc5a477e39b2a6f69ae099fd5ce2a229b96a8d266440219fd40162",
          "bytes": 63937,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-toe-raise-6beab004c7fc5a47.png?alt=media&token=a61b2934-d977-4994-88dd-b70fefa40bb4",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-toe-raise-6beab004c7fc5a47.png",
          "verifiedAt": "2026-10-07T22:47:45.486Z"
        }
      }
    },
    {
      "id": "trainai-shadow-boxing",
      "slug": "shadow-boxing",
      "name": "Shadow boxing",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand stable staggered boxing stance, fists guarding chin.",
        "Extend left jab straight forward and retract to guard, then right cross with small torso rotation and rear heel pivot, return to guard.",
        "Elbows not locked; no target, no opponent.",
        "Keep feet on same spots, alternate hands correctly."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-shadow-boxing-26a2d9d5a200.gif?alt=media&token=547ea4e4-260d-4f08-b725-dd10ccc750b6",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-shadow-boxing-19191be59519.png?alt=media&token=a15bfa58-14b1-4e5e-8a1a-e5f561f131c9",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/shadow-boxing/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bede53b7062d4677837170263d78ccb526d8029cc431d3d1c7e06cc391f84d93",
          "bytes": 305000,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-shadow-boxing-bede53b7062d4677.gif?alt=media&token=2951a3aa-a3db-4253-9e96-2884ba208e38",
          "name": "trainai/creator-media/2026-10-07/trainai-shadow-boxing-bede53b7062d4677.gif",
          "verifiedAt": "2026-10-07T23:33:59.801Z"
        },
        "webp": {
          "sha256": "287447b2acf30234f5053af202c0d5c0de2e9f2922b4af0a188ca0132b7adcba",
          "bytes": 491898,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-shadow-boxing-287447b2acf30234.webp?alt=media&token=acfa9207-713c-4f15-89d7-b6271333194b",
          "name": "trainai/creator-media/2026-10-07/trainai-shadow-boxing-287447b2acf30234.webp",
          "verifiedAt": "2026-10-07T22:47:46.749Z"
        },
        "poster": {
          "sha256": "0c2fb41158503a1c4e59298f5ca78c0b4297e0629ff1e26ba81c8cc2d4e2e6cf",
          "bytes": 47713,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-shadow-boxing-0c2fb41158503a1c.png?alt=media&token=3d16cde4-71ee-4314-965f-4031dbc0a3db",
          "name": "trainai/creator-media/2026-10-07/trainai-shadow-boxing-0c2fb41158503a1c.png",
          "verifiedAt": "2026-10-07T22:47:46.226Z"
        }
      }
    },
    {
      "id": "trainai-shoulder-circles",
      "slug": "shoulder-circles",
      "name": "Shoulder circles",
      "category": "Dynamic warm-up",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall arms relaxed down.",
        "Gently roll shoulders forward, then up, then back, then down completing one circle.",
        "Arms hang naturally and feet stay still.",
        "Head upright and quiet, no neck circles."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-shoulder-circles-2dec1d4394b8.gif?alt=media&token=5abd934a-24d1-4fae-844d-4889d52b7ada",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-shoulder-circles-d22ff48ffddd.png?alt=media&token=5e17759b-5c68-416c-8b7e-951e80bcf2d0",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/shoulder-circles/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2b8726bb19c60d5e4bb20ddf25db462032070283c1615c890f4de959f5e44ecb",
          "bytes": 296883,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-shoulder-circles-2b8726bb19c60d5e.gif?alt=media&token=fc5da2ee-ea3c-4704-9657-289b40ba9316",
          "name": "trainai/creator-media/2026-10-07/trainai-shoulder-circles-2b8726bb19c60d5e.gif",
          "verifiedAt": "2026-10-07T23:34:01.824Z"
        },
        "webp": {
          "sha256": "04309173029d8c0d59611c81720ccbc99f0194c44d1e3e63c4768228eb068be2",
          "bytes": 476644,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-shoulder-circles-04309173029d8c0d.webp?alt=media&token=2f64a9dd-b131-4ba8-b28f-000ca3b02e4f",
          "name": "trainai/creator-media/2026-10-07/trainai-shoulder-circles-04309173029d8c0d.webp",
          "verifiedAt": "2026-10-07T22:47:47.324Z"
        },
        "poster": {
          "sha256": "b0badbb6820c59affd585c0e43a6c2790c3dc9b7cc167030b90b1b033c08c0f3",
          "bytes": 46206,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-shoulder-circles-b0badbb6820c59af.png?alt=media&token=80eb86a1-6a7a-4419-b8e5-443302ea6549",
          "name": "trainai/creator-media/2026-10-07/trainai-shoulder-circles-b0badbb6820c59af.png",
          "verifiedAt": "2026-10-07T22:47:47.100Z"
        }
      }
    },
    {
      "id": "trainai-side-lying-hip-abduction",
      "slug": "side-lying-hip-abduction",
      "name": "Side-lying hip abduction",
      "category": "Home foundations",
      "target": "abductors",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on one side with legs straight and stacked, bottom arm supporting head, top hand on floor in front of chest.",
        "Raise the straight top leg outward and upward to about 35 degrees without rolling the pelvis, then lower it to just above the bottom leg.",
        "Toes face forward, not ceiling."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-side-lying-hip-abduction-d497be3c33c4.gif?alt=media&token=1e2376a3-9085-44c5-be29-8b51a08ffbc4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-side-lying-hip-abduction-f8e963240597.png?alt=media&token=e99d2bde-6d42-447a-ac3f-7b367f593b40",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/side-lying-hip-abduction/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0a707faa864932d6dfed8365970cfa5a5539044cc61a5cf05de4e0124e32ede5",
          "bytes": 296657,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-lying-hip-abduction-0a707faa864932d6.gif?alt=media&token=01f54614-67c3-49c2-8a1a-1fb8a8db2999",
          "name": "trainai/creator-media/2026-10-07/trainai-side-lying-hip-abduction-0a707faa864932d6.gif",
          "verifiedAt": "2026-10-07T23:34:01.387Z"
        },
        "webp": {
          "sha256": "56dfd4e89c6e3bbc82646cedf6aaf95a0cf8460638995e3464356b4148ab3162",
          "bytes": 494380,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-lying-hip-abduction-56dfd4e89c6e3bbc.webp?alt=media&token=bdbbf506-6944-409c-83a0-362929c058b3",
          "name": "trainai/creator-media/2026-10-07/trainai-side-lying-hip-abduction-56dfd4e89c6e3bbc.webp",
          "verifiedAt": "2026-10-07T22:47:48.792Z"
        },
        "poster": {
          "sha256": "6fdf657d8b0f137c47c0550f5c1d6c935e74368fe476ce4b2f9c2880acab77f4",
          "bytes": 48092,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-lying-hip-abduction-6fdf657d8b0f137c.png?alt=media&token=7f75fc55-65c2-4fde-9b6b-4db2b4eb49de",
          "name": "trainai/creator-media/2026-10-07/trainai-side-lying-hip-abduction-6fdf657d8b0f137c.png",
          "verifiedAt": "2026-10-07T22:47:48.093Z"
        }
      }
    },
    {
      "id": "trainai-side-plank",
      "slug": "side-plank",
      "name": "Side plank",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Lie on one side supported on the lower forearm, elbow under shoulder, legs straight and stacked.",
        "Raise hips until head, torso, hips and ankles form a straight line.",
        "Hold, then lower hips.",
        "Top hand rests on hip; no arm waving or leg lifting."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-side-plank-85cd2e32ebc5.gif?alt=media&token=e613628d-0e21-4620-b41d-e0ff796d7494",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-side-plank-0b570c5449ab.png?alt=media&token=9d72d2ae-ebf3-4fb5-bda2-f383f6f47a60",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/side-plank/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3360,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6f9839464a5efba912528ae0f380311356a8f2d1a952e9eafaaeffb83d9dd261",
          "bytes": 188294,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-plank-6f9839464a5efba9.gif?alt=media&token=d305db31-a365-4dc8-86ef-ccaec24af1c1",
          "name": "trainai/creator-media/2026-10-07/trainai-side-plank-6f9839464a5efba9.gif",
          "verifiedAt": "2026-10-07T23:34:03.526Z"
        },
        "webp": {
          "sha256": "3330d2535b848a975af26f874fa209eed44d9189b13901537f4e5a922cbeace6",
          "bytes": 293544,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-plank-3330d2535b848a97.webp?alt=media&token=95173eeb-9fe2-4abe-8b45-40166e9e0f1a",
          "name": "trainai/creator-media/2026-10-07/trainai-side-plank-3330d2535b848a97.webp",
          "verifiedAt": "2026-10-07T22:47:49.105Z"
        },
        "poster": {
          "sha256": "b3189478d3196a8fc584569c8fbb9d064dfff8480e317e047b8b3a8de30a6cc4",
          "bytes": 49281,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-plank-b3189478d3196a8f.png?alt=media&token=46e52dab-24d7-43b6-8bad-154ed0c871f1",
          "name": "trainai/creator-media/2026-10-07/trainai-side-plank-b3189478d3196a8f.png",
          "verifiedAt": "2026-10-07T22:47:49.012Z"
        }
      }
    },
    {
      "id": "trainai-side-step-touch",
      "slug": "side-step-touch",
      "name": "Side step touch",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand tall with knees softly bent.",
        "Step to one side and bring the other foot in to touch beside it.",
        "Repeat to the other side without jumping."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-side-step-touch-25e3db063f48.gif?alt=media&token=bf29deee-4c5b-4106-899a-07790c7bb37c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-side-step-touch-156160d21aaa.png?alt=media&token=9f25cd8c-2609-4bbc-98d3-3d424defc8d9",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/side-step-touch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8a21d1e78763ed2308c9b1c6fcd49ae995af24dddfec6ffce935bce7fc93b08b",
          "bytes": 277070,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-step-touch-8a21d1e78763ed23.gif?alt=media&token=a5569dfb-cb33-4573-8cbb-5857a0e3e6f9",
          "name": "trainai/creator-media/2026-10-07/trainai-side-step-touch-8a21d1e78763ed23.gif",
          "verifiedAt": "2026-10-07T23:34:04.145Z"
        },
        "webp": {
          "sha256": "45810d91652a967e34913ac1bbf2d1be04de9c5d3ecd807a7347d6c2b275c104",
          "bytes": 448770,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-step-touch-45810d91652a967e.webp?alt=media&token=c4167597-7076-420c-87eb-7810e6812d8f",
          "name": "trainai/creator-media/2026-10-07/trainai-side-step-touch-45810d91652a967e.webp",
          "verifiedAt": "2026-10-07T22:47:50.549Z"
        },
        "poster": {
          "sha256": "d65a00e9dc49b4d47ef5e02a61b21802a3f65a387415517dd8d8a475fad08ca1",
          "bytes": 44080,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-side-step-touch-d65a00e9dc49b4d4.png?alt=media&token=bb70515a-a419-472d-9a1f-7588a5acb03e",
          "name": "trainai/creator-media/2026-10-07/trainai-side-step-touch-d65a00e9dc49b4d4.png",
          "verifiedAt": "2026-10-07T22:47:49.768Z"
        }
      }
    },
    {
      "id": "trainai-single-leg-calf-raise",
      "slug": "single-leg-calf-raise",
      "name": "Single-leg calf raise",
      "category": "Home foundations",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Balance upright on one leg with the other knee gently bent and its foot lifted.",
        "Keep supporting forefoot planted and knee nearly straight.",
        "Raise supporting heel to stand on the ball of that foot, then lower heel to the floor.",
        "Torso stays upright, arms slightly out for balance.",
        "Same leg for the full loop.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-single-leg-calf-raise-490e826f95a7.gif?alt=media&token=ea0d78ed-98fc-43b4-976c-35c6da502db4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-single-leg-calf-raise-97e1d56c859d.png?alt=media&token=77611de3-ca80-4052-bec1-0ba6a333ba9b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-leg-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b292f78e4d9604d7c378fc9f403091ad97a9da3206779a282e95c56343245a25",
          "bytes": 272627,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-single-leg-calf-raise-b292f78e4d9604d7.gif?alt=media&token=5a73e6b6-bd50-4fba-9f12-2c10932bf628",
          "name": "trainai/creator-media/2026-10-07/trainai-single-leg-calf-raise-b292f78e4d9604d7.gif",
          "verifiedAt": "2026-10-07T23:34:03.516Z"
        },
        "webp": {
          "sha256": "22f0dcbf0af480ee826265a52c7833579b4d62527ab9e1020d3145ee35d2df0b",
          "bytes": 430998,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-single-leg-calf-raise-22f0dcbf0af480ee.webp?alt=media&token=f8323dd7-02ba-40ef-9281-7f195a9c11f2",
          "name": "trainai/creator-media/2026-10-07/trainai-single-leg-calf-raise-22f0dcbf0af480ee.webp",
          "verifiedAt": "2026-10-07T23:34:07.445Z"
        },
        "poster": {
          "sha256": "e12438aa6fc37704da3e68833ea6c4b29f7fe74dadfc6df0d3c038f173b9eb67",
          "bytes": 44585,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-single-leg-calf-raise-e12438aa6fc37704.png?alt=media&token=0b209e8d-28dc-4d81-a505-d8db44b85166",
          "name": "trainai/creator-media/2026-10-07/trainai-single-leg-calf-raise-e12438aa6fc37704.png",
          "verifiedAt": "2026-10-07T23:34:04.351Z"
        }
      }
    },
    {
      "id": "trainai-single-leg-glute-bridge",
      "slug": "single-leg-glute-bridge",
      "name": "Single-leg glute bridge",
      "category": "Home foundations",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on back with one knee bent and its foot flat; other leg extended diagonally upward.",
        "Press through the planted foot to lift hips until shoulders, hips and supporting knee align, then lower hips.",
        "Keep the raised leg extended and pelvis level.",
        "Head and shoulders remain resting on invisible floor."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-single-leg-glute-bridge-8e460c9b5973.gif?alt=media&token=78c77548-3537-42cc-98e3-1a0a3a82bc7e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-single-leg-glute-bridge-43869dfe58dd.png?alt=media&token=3906ec47-f01d-44a7-9d3c-7c0b7b145b6e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-leg-glute-bridge/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fd4f28a5259f557ce3717ccf0c15881c4f7968165c78b946aa7bae2b6d7b5ddd",
          "bytes": 342906,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-single-leg-glute-bridge-fd4f28a5259f557c.gif?alt=media&token=f74ba1e3-a01a-43b2-bce3-f8cadd85152a",
          "name": "trainai/creator-media/2026-10-07/trainai-single-leg-glute-bridge-fd4f28a5259f557c.gif",
          "verifiedAt": "2026-10-07T23:34:10.345Z"
        },
        "webp": {
          "sha256": "da3bd9bf0102e1cce95a53442efc32982429395695273ca43300dbea79915175",
          "bytes": 554930,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-single-leg-glute-bridge-da3bd9bf0102e1cc.webp?alt=media&token=c8793f9e-bf51-48a7-89b4-e547a770e942",
          "name": "trainai/creator-media/2026-10-07/trainai-single-leg-glute-bridge-da3bd9bf0102e1cc.webp",
          "verifiedAt": "2026-10-07T22:47:51.910Z"
        },
        "poster": {
          "sha256": "1be017c989a97fc795efbab602bdd91a931abf038d41d5800f052a281dc73c03",
          "bytes": 52925,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-single-leg-glute-bridge-1be017c989a97fc7.png?alt=media&token=b9f7d8ae-c42e-4fa3-a491-f94c70eab1f5",
          "name": "trainai/creator-media/2026-10-07/trainai-single-leg-glute-bridge-1be017c989a97fc7.png",
          "verifiedAt": "2026-10-07T22:47:51.543Z"
        }
      }
    },
    {
      "id": "trainai-sit-to-stand",
      "slug": "sit-to-stand",
      "name": "Sit-to-stand",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start sitting upright on a sturdy armless charcoal chair, feet flat under knees.",
        "Lean torso slightly forward from hips and stand up, finishing fully upright in front of the unchanged chair.",
        "Two arms remain crossed at chest, two legs only.",
        "No stray body parts or objects."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-sit-to-stand-ad7c4dd8c989.gif?alt=media&token=97259640-7297-4280-9b3b-88a02c67bf55",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-sit-to-stand-172fa5ed1c77.png?alt=media&token=16f4a412-713f-43bd-8b8c-cf8976f7678d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/sit-to-stand/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 1760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "90eb3bd9b422fff90ef4e4177df4230a2b93772adc947035b161c26135ab9b1e",
          "bytes": 533337,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-sit-to-stand-90eb3bd9b422fff9.gif?alt=media&token=cbf86bfa-d014-4eab-a474-11b158cc8ae9",
          "name": "trainai/creator-media/2026-10-07/trainai-sit-to-stand-90eb3bd9b422fff9.gif",
          "verifiedAt": "2026-10-07T23:34:12.120Z"
        },
        "webp": {
          "sha256": "9a0e624ca1ae32176e78c45192a4032e8f9f58c3565e93f82c22ae60c91daf32",
          "bytes": 818518,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-sit-to-stand-9a0e624ca1ae3217.webp?alt=media&token=237ce955-3497-4685-87cf-775cfcc3bc10",
          "name": "trainai/creator-media/2026-10-07/trainai-sit-to-stand-9a0e624ca1ae3217.webp",
          "verifiedAt": "2026-10-07T23:34:15.972Z"
        },
        "poster": {
          "sha256": "fcca280e6a925d0323ad525932442faeb0341f019259ec2372f8b6db3b7a6b7b",
          "bytes": 89022,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-sit-to-stand-fcca280e6a925d03.png?alt=media&token=ddb26f39-4195-459f-abb2-d3125fa111f2",
          "name": "trainai/creator-media/2026-10-07/trainai-sit-to-stand-fcca280e6a925d03.png",
          "verifiedAt": "2026-10-07T23:34:12.026Z"
        }
      }
    },
    {
      "id": "trainai-skater-hop",
      "slug": "skater-hop",
      "name": "Skater hop",
      "category": "Power and agility",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lateral skater hop: push from left foot to hop right, land softly on right leg with left leg crossed lightly behind.",
        "Then push from right to hop left, land on left with right behind.",
        "Opposite arm sweeps across front.",
        "Clear two-direction cycle, controlled shallow landing.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-skater-hop-f66c13839d2c.gif?alt=media&token=e3c71a37-c1e5-47da-9e3f-8dfe8f8c0f44",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-skater-hop-ba49d2932122.png?alt=media&token=5caecf56-d8de-4e17-81be-122e4aba9815",
      "aliases": [
        "skater hops"
      ],
      "legacyIds": [
        "3361"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/skater-hop/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2240,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c803f4988ab5f16dc8f30823899b928b124cca41e772c66b21438e62e1113c32",
          "bytes": 302887,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-skater-hop-c803f4988ab5f16d.gif?alt=media&token=156af26f-ab08-4ba5-88a1-b41dd895739e",
          "name": "trainai/creator-media/2026-10-07/trainai-skater-hop-c803f4988ab5f16d.gif",
          "verifiedAt": "2026-10-07T23:34:15.824Z"
        },
        "webp": {
          "sha256": "978f5410a9ba31eae8bf55244f4fa5851576a09bc3f38b99600f95e19af69858",
          "bytes": 505134,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-skater-hop-978f5410a9ba31ea.webp?alt=media&token=956d1965-07f1-4f33-ae80-7a56819bf83b",
          "name": "trainai/creator-media/2026-10-07/trainai-skater-hop-978f5410a9ba31ea.webp",
          "verifiedAt": "2026-10-07T23:34:18.373Z"
        },
        "poster": {
          "sha256": "7e5d5520af52386b74aac980bb198119bf833013b46f9d490eefa876551b457a",
          "bytes": 51732,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-skater-hop-7e5d5520af52386b.png?alt=media&token=a5b1dc72-5c70-45fb-9c9a-18cc807c756a",
          "name": "trainai/creator-media/2026-10-07/trainai-skater-hop-7e5d5520af52386b.png",
          "verifiedAt": "2026-10-07T23:34:16.664Z"
        }
      }
    },
    {
      "id": "trainai-split-squat",
      "slug": "split-squat",
      "name": "Split squat",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stationary split squat, hands on hips.",
        "Start upright in a staggered stance, front foot fully planted, rear heel raised on rear toes.",
        "Lower the torso straight down by bending both knees, rear knee approaching but not hitting the floor.",
        "Front knee tracks toes.",
        "Extend both knees to return.",
        "Both feet remain in their original positions throughout; this is not a stepping lunge.",
        "Keep torso controlled and neutral."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-split-squat-af614d3d8099.gif?alt=media&token=a54b206d-956c-4950-b4f0-f12f3856407e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-split-squat-255562c1bc97.png?alt=media&token=c3ce223a-768e-47be-8d63-bfec6fd58f1c",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/split-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "21ba9a6486b0acc0884df3ca7c153e6b0759401c297d9f0ed0841f143a34add1",
          "bytes": 290322,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-split-squat-21ba9a6486b0acc0.gif?alt=media&token=dfcae8e7-7805-4c2a-ba19-5d60071f29a1",
          "name": "trainai/creator-media/2026-10-07/trainai-split-squat-21ba9a6486b0acc0.gif",
          "verifiedAt": "2026-10-07T23:34:18.555Z"
        },
        "webp": {
          "sha256": "eb4b7caaae07ed564f855334478518cfacab9484936195e689a5c8f6a67bbca4",
          "bytes": 479316,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-split-squat-eb4b7caaae07ed56.webp?alt=media&token=1c967491-c716-4a02-95e1-a736596c8220",
          "name": "trainai/creator-media/2026-10-07/trainai-split-squat-eb4b7caaae07ed56.webp",
          "verifiedAt": "2026-10-07T23:34:21.151Z"
        },
        "poster": {
          "sha256": "ae42d80f502fc9a2b1ac8e5af4d6d4de93ac2c996ffa267bb4baa4897e04adf8",
          "bytes": 48715,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-split-squat-ae42d80f502fc9a2.png?alt=media&token=3ce4d125-df85-4556-b15b-c7c3c46b4eac",
          "name": "trainai/creator-media/2026-10-07/trainai-split-squat-ae42d80f502fc9a2.png",
          "verifiedAt": "2026-10-07T23:34:19.419Z"
        }
      }
    },
    {
      "id": "trainai-squat-jump",
      "slug": "squat-jump",
      "name": "Squat jump",
      "category": "Power and agility",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with feet about hip-width apart and lower into a shallow squat.",
        "Push through both feet to jump upward.",
        "Land softly with knees following the toes, regain balance, then repeat."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-squat-jump-a260cb1a853c.gif?alt=media&token=2d91cdb7-1c12-4d6e-aa48-ed0e83371819",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-squat-jump-fb9315f88a1d.png?alt=media&token=478d13d4-fb5c-4f34-992b-9a5bbd3d6395",
      "aliases": [
        "jump squat",
        "semi squat jump"
      ],
      "legacyIds": [
        "0514",
        "3222"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/squat-jump/",
      "mediaKind": "animated-demonstration",
      "frames": 15,
      "durationMs": 2100,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ca1d7b1e5942d05c5a7e76ca9fe7cc3a09ed309ae1659326d50b10be99e30bd9",
          "bytes": 171181,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-squat-jump-ca1d7b1e5942d05c.gif?alt=media&token=c97f4082-9287-47c5-99f8-f43c9a46a273",
          "name": "trainai/creator-media/2026-10-07/trainai-squat-jump-ca1d7b1e5942d05c.gif",
          "verifiedAt": "2026-10-07T23:34:20.126Z"
        },
        "webp": {
          "sha256": "1c144e57768ee6dc07ea1942b41e3afbf87ecfd4c8fcbfbd7a5dcc90677abf32",
          "bytes": 265376,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-squat-jump-1c144e57768ee6dc.webp?alt=media&token=e4d93263-ca58-49d3-98fb-a753ab3b27b6",
          "name": "trainai/creator-media/2026-10-07/trainai-squat-jump-1c144e57768ee6dc.webp",
          "verifiedAt": "2026-10-07T23:34:22.518Z"
        },
        "poster": {
          "sha256": "cc6dd02a0ba43f19463a6a86ab459bdc38a9395eb454f1bbb1f87f40ffe749bc",
          "bytes": 30082,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-squat-jump-cc6dd02a0ba43f19.png?alt=media&token=90160b10-f4a4-49d8-a857-b37294b1defe",
          "name": "trainai/creator-media/2026-10-07/trainai-squat-jump-cc6dd02a0ba43f19.png",
          "verifiedAt": "2026-10-07T23:34:21.220Z"
        }
      }
    },
    {
      "id": "trainai-stair-climber",
      "slug": "stair-climber",
      "name": "Stair climber",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "stepmill",
      "requiredEquipment": [
        "stepmill"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Step up on compact stair climber, alternating feet onto next stair as treads descend.",
        "Hands lightly on fixed handrails.",
        "Left and right knee alternately rise, upright torso."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-stair-climber-a8ae1f7db44b.gif?alt=media&token=e07cf79f-d8e8-410b-ad6b-b86907964945",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-stair-climber-579fc481f2ce.png?alt=media&token=a0473041-6c00-4ed1-bd34-d2b5550cbe51",
      "aliases": [
        "walking on stepmill"
      ],
      "legacyIds": [
        "2311"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/stair-climber/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "153d98168bcb823b1e7e171ef35bcc54c29d4fa8c1fa840f36c53fbb245b5690",
          "bytes": 262778,
          "mimeType": "image/gif",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-stair-climber-153d98168bcb823b.gif?alt=media&token=a38b87f9-47db-4329-9f8f-06bf5453c2f2",
          "name": "trainai/creator-media/2026-10-07/trainai-stair-climber-153d98168bcb823b.gif",
          "verifiedAt": "2026-10-07T23:34:23.332Z"
        },
        "webp": {
          "sha256": "587acbb938038374d8cd4d8333ca0a1f05e10a143683d4a465619596d51d4a4e",
          "bytes": 377608,
          "mimeType": "image/webp",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-stair-climber-587acbb938038374.webp?alt=media&token=719a806d-0293-47aa-be79-0142119f70cc",
          "name": "trainai/creator-media/2026-10-07/trainai-stair-climber-587acbb938038374.webp",
          "verifiedAt": "2026-10-07T23:34:23.290Z"
        },
        "poster": {
          "sha256": "1b904ad8f64a018d871d8ad4e79c205470bb692145d2cdfb98e9038cbde8a05a",
          "bytes": 87714,
          "mimeType": "image/png",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-stair-climber-1b904ad8f64a018d.png?alt=media&token=ff564799-b980-4831-b63f-07e62e603cf6",
          "name": "trainai/creator-media/2026-10-07/trainai-stair-climber-1b904ad8f64a018d.png",
          "verifiedAt": "2026-10-07T23:34:24.876Z"
        }
      }
    },
    {
      "id": "trainai-standing-alternating-knee-raise",
      "slug": "standing-alternating-knee-raise",
      "name": "Standing alternating knee raise",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand tall with hands lightly on hips.",
        "Lift right knee toward hip height without leaning, return right foot to floor, then lift left knee and return.",
        "Controlled alternating hip flexion, clearly two distinct lifted knees, no jump.",
        "Keep shoulders facing front.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-alternating-knee-raise-aa81e28d1fc4.gif?alt=media&token=22a435da-9c00-4ec9-b167-c3d158ef1fe7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-alternating-knee-raise-a12c0dce57ec.png?alt=media&token=34a5dfb0-271c-4c12-a37e-cf0196f4d2d1",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-alternating-knee-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ac51464b101e97aaf745ec9294b663e2fd2b4d9b2508c4da00cecde4142d33ef",
          "bytes": 274011,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-alternating-knee-raise-ac51464b101e97aa.gif?alt=media&token=a605aafc-19b7-4077-ae84-f2fb0f662c64",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-alternating-knee-raise-ac51464b101e97aa.gif",
          "verifiedAt": "2026-10-07T23:34:28.633Z"
        },
        "webp": {
          "sha256": "7c4d1bece89012d5993e73936cc6a1f44ba4326731fb3099cd1748258d3c5671",
          "bytes": 448216,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-alternating-knee-raise-7c4d1bece89012d5.webp?alt=media&token=00ad1aa8-f53f-4bc4-8b37-43ff87f398e8",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-alternating-knee-raise-7c4d1bece89012d5.webp",
          "verifiedAt": "2026-10-07T23:34:32.285Z"
        },
        "poster": {
          "sha256": "e23a12af22c3a98ca357fcb34b86de1dd29f9b0733e69c0c51703d50752663c4",
          "bytes": 45995,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-alternating-knee-raise-e23a12af22c3a98c.png?alt=media&token=81ffc40e-af48-4acf-966f-ac7364a602ad",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-alternating-knee-raise-e23a12af22c3a98c.png",
          "verifiedAt": "2026-10-07T23:34:25.966Z"
        }
      }
    },
    {
      "id": "trainai-standing-band-chest-press",
      "slug": "standing-band-chest-press",
      "name": "Standing band chest press",
      "category": "Bands",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with stable split stance, a fixed small orange-band anchor behind torso at chest height.",
        "Hold ends by chest with elbows bent.",
        "Press both hands forward at chest height until elbows nearly straight, then return.",
        "Band passes outside arms, always visibly connected behind.",
        "No body sway or stepping."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-band-chest-press-27d6ba2549cd.gif?alt=media&token=3f8623ff-09ec-4508-b758-cf2f7a75cdd7",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-band-chest-press-9b53cc6c8d9c.png?alt=media&token=9f32a750-0426-4b87-99b5-7da3d7a1ad56",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-band-chest-press/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fdfd847aa5298d2ff28c39392d0e722386a0ad724a23ecfac661787047772e4d",
          "bytes": 305400,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-band-chest-press-fdfd847aa5298d2f.gif?alt=media&token=8aa2ce8d-861e-4ecc-a7ba-b3210d9a6cfd",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-band-chest-press-fdfd847aa5298d2f.gif",
          "verifiedAt": "2026-10-07T23:34:29.595Z"
        },
        "webp": {
          "sha256": "bd85015803bd0b5e822e14586a561411e9b9404dc0514e786909cb205c146414",
          "bytes": 500568,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-band-chest-press-bd85015803bd0b5e.webp?alt=media&token=30bfc129-7a8b-4e45-8d23-605c031e4658",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-band-chest-press-bd85015803bd0b5e.webp",
          "verifiedAt": "2026-10-07T23:34:35.737Z"
        },
        "poster": {
          "sha256": "22696df0c54475737420a7a06f18862d334afb2a6cdbfd05bd3a6c360f3b5c65",
          "bytes": 50684,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-band-chest-press-22696df0c5447573.png?alt=media&token=4a83b885-72bc-4f58-8d8d-067b9843d310",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-band-chest-press-22696df0c5447573.png",
          "verifiedAt": "2026-10-07T23:34:32.890Z"
        }
      }
    },
    {
      "id": "trainai-standing-band-row",
      "slug": "standing-band-row",
      "name": "Standing band row",
      "category": "Bands",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand in a fixed staggered stance facing an orange resistance tube attached to a small fixed dark anchor at lower-chest height ahead.",
        "Hold two ends with arms extended.",
        "Pull both elbows backward close to ribs until hands meet lower ribs, then straighten arms.",
        "Torso, shoes and anchor stay still; band stretches continuously."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-band-row-f02b39f885b3.gif?alt=media&token=e3243619-23e4-47b5-86b4-3664ae12fb92",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-band-row-78f9757de8d6.png?alt=media&token=1364dde8-9f8a-43a5-8d2f-beb02b7b597a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-band-row/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fef7b3a4ee498c626351f340d4821f44ff545d3426b6440af301116a9e7a6fd8",
          "bytes": 306914,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-band-row-fef7b3a4ee498c62.gif?alt=media&token=7698816f-98c0-48ce-bd79-5561f7324569",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-band-row-fef7b3a4ee498c62.gif",
          "verifiedAt": "2026-10-07T23:34:35.813Z"
        },
        "webp": {
          "sha256": "3e7f6b72c7410a3713f02bf248ddc26c3c2026c26f2f5d73fb17167767c007e8",
          "bytes": 517434,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-band-row-3e7f6b72c7410a37.webp?alt=media&token=58c3be69-e03b-4de2-845a-d432bb7ad492",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-band-row-3e7f6b72c7410a37.webp",
          "verifiedAt": "2026-10-07T22:47:59.941Z"
        },
        "poster": {
          "sha256": "e858a32654c50ba888e1a72eb3d6669f305253ef13800d34f36560a900117707",
          "bytes": 50883,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-band-row-e858a32654c50ba8.png?alt=media&token=433552a7-e8b0-44de-a13c-8652d15922cb",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-band-row-e858a32654c50ba8.png",
          "verifiedAt": "2026-10-07T22:47:59.446Z"
        }
      }
    },
    {
      "id": "trainai-standing-calf-raise",
      "slug": "standing-calf-raise",
      "name": "Standing calf raise",
      "category": "Home foundations",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Standing bilateral calf raise.",
        "Stand tall with straight but soft knees, feet hip-width apart, arms relaxed beside hips.",
        "Lift both heels together to rise onto the balls of both feet, pause briefly then lower heels to the floor.",
        "Toe/ball contacts stay fixed; the entire body rises naturally as the ankles plantarflex, no knee squat, no jumping or floating.",
        "Keep both shoes identical size and view.",
        "Show one complete rise and lower."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-calf-raise-ae3f38837bc4.gif?alt=media&token=82bb7100-6d40-4fbe-a8f0-9cb09fb68314",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-calf-raise-b60d494956cb.png?alt=media&token=0395c5eb-c4c4-40de-9e19-e25312525ec0",
      "aliases": [
        "bodyweight standing calf raise"
      ],
      "legacyIds": [
        "1373"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2103268e1e0748a377714fb49118a45940876b3c68aba61c8d06c4e67c290647",
          "bytes": 275435,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-calf-raise-2103268e1e0748a3.gif?alt=media&token=cfea7745-5d95-405b-b7ae-9b7e55ae1dca",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-calf-raise-2103268e1e0748a3.gif",
          "verifiedAt": "2026-10-07T23:34:35.751Z"
        },
        "webp": {
          "sha256": "411c4136811126b5553c1120bc9638eec355cad0ffd3adda879e0916cfcc8334",
          "bytes": 437878,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-calf-raise-411c4136811126b5.webp?alt=media&token=3a449cc6-cf38-4a23-a3ee-77b3223a5c5e",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-calf-raise-411c4136811126b5.webp",
          "verifiedAt": "2026-10-07T23:34:40.793Z"
        },
        "poster": {
          "sha256": "ade7f043e12b4f2650edd9b58c5aaf99473c284d47bcc7c6e4627faba4b6db1c",
          "bytes": 47115,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-calf-raise-ade7f043e12b4f26.png?alt=media&token=9fe7a58d-8960-466b-950e-50bee200b9f0",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-calf-raise-ade7f043e12b4f26.png",
          "verifiedAt": "2026-10-07T23:34:36.872Z"
        }
      }
    },
    {
      "id": "trainai-standing-dumbbell-shoulder-press",
      "slug": "standing-dumbbell-shoulder-press",
      "name": "Standing dumbbell shoulder press",
      "category": "Dumbbell foundations",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall with dumbbells at shoulder height and wrists over elbows.",
        "Press the weights overhead through a comfortable range without leaning backward.",
        "Lower to shoulder height under control."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-dumbbell-shoulder-press-a8d98e80cbac.gif?alt=media&token=c3472a11-593d-497f-8283-2184bed5ba0f",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-dumbbell-shoulder-press-23ec0c92e407.png?alt=media&token=beb3d35e-19be-4dd0-b266-4507bd996b13",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-dumbbell-shoulder-press/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1500,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0db9b3923cf09e15c998f9a995f5b1471e94df0a163f3d4fa5dc180ee05a14ac",
          "bytes": 331198,
          "mimeType": "image/gif",
          "width": 688,
          "height": 688,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-dumbbell-shoulder-press-0db9b3923cf09e15.gif?alt=media&token=b04dcaff-ad88-43c5-9364-0326dd988c81",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-dumbbell-shoulder-press-0db9b3923cf09e15.gif",
          "verifiedAt": "2026-10-07T23:34:39.666Z"
        },
        "webp": {
          "sha256": "27e2c89b0c56b2fa4fe1a83da2eb0435d37a8e828e9472426c36cdd78896ca82",
          "bytes": 512694,
          "mimeType": "image/webp",
          "width": 688,
          "height": 688,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-dumbbell-shoulder-press-27e2c89b0c56b2fa.webp?alt=media&token=fbde465e-f2b4-44c8-a666-a2b19269ea65",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-dumbbell-shoulder-press-27e2c89b0c56b2fa.webp",
          "verifiedAt": "2026-10-07T23:34:43.798Z"
        },
        "poster": {
          "sha256": "ab1e39dd2f53dfed819ed41adfb2f1f1c0f58c4f4788e1d6c30b55863cfec49e",
          "bytes": 157793,
          "mimeType": "image/png",
          "width": 688,
          "height": 688,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-dumbbell-shoulder-press-ab1e39dd2f53dfed.png?alt=media&token=d9caeb29-ebcf-4008-904c-55857e894bc3",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-dumbbell-shoulder-press-ab1e39dd2f53dfed.png",
          "verifiedAt": "2026-10-07T23:34:41.212Z"
        }
      }
    },
    {
      "id": "trainai-standing-hip-circle",
      "slug": "standing-hip-circle",
      "name": "Standing hip circle",
      "category": "Dynamic warm-up",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "warmup",
      "measurement": "repetitions",
      "instructions": [
        "Stand tall hands on hips feet wider than hip width.",
        "Make a gentle small pelvis circle forward, right, back, left, returning.",
        "Knees soft and feet planted, torso inclines only slightly.",
        "No leg lifting.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-hip-circle-19f45566d0f3.gif?alt=media&token=205a3ef0-4cad-484d-b749-def1ce43d342",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-hip-circle-31c42b37e680.png?alt=media&token=da67ad9c-ea92-4324-b29d-e3d97917976e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-hip-circle/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e3962eb73b3b87b15ff28417df88bbaca560c26a74051499629b18479e9bd7f8",
          "bytes": 303520,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-hip-circle-e3962eb73b3b87b1.gif?alt=media&token=0314c4b5-9857-41a6-81b5-f3035eca049c",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-hip-circle-e3962eb73b3b87b1.gif",
          "verifiedAt": "2026-10-07T23:34:45.218Z"
        },
        "webp": {
          "sha256": "1dc54f326d621e5cffbad019026dcd5bf5ec62772d907d11bdf46b19baf9184b",
          "bytes": 505626,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-hip-circle-1dc54f326d621e5c.webp?alt=media&token=b754971f-b471-4ee7-a10a-aec8c82413d5",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-hip-circle-1dc54f326d621e5c.webp",
          "verifiedAt": "2026-10-07T22:48:02.709Z"
        },
        "poster": {
          "sha256": "3bbe6176a677a05ddab696e485e5358fbd933e20d618a810ae9a9be31e422ebd",
          "bytes": 48600,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-hip-circle-3bbe6176a677a05d.png?alt=media&token=3298e215-4987-47fc-b426-aff04f60e190",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-hip-circle-3bbe6176a677a05d.png",
          "verifiedAt": "2026-10-07T22:48:02.632Z"
        }
      }
    },
    {
      "id": "trainai-standing-single-arm-cable-row",
      "slug": "standing-single-arm-cable-row",
      "name": "Standing single-arm cable row",
      "category": "Cable station",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "row-handle"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand facing fixed cable column, pulley at lower chest height.",
        "Stable split stance.",
        "Hold single handle in right hand with arm extended, pull elbow toward right hip then return.",
        "Left hand rests on hip, torso faces forward and does not twist.",
        "Cable continuously attached.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-single-arm-cable-row-e4106fb0658c.gif?alt=media&token=acd7d919-2eeb-40d6-bf49-0457b6fc790d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-single-arm-cable-row-5ad5c3d0ec9a.png?alt=media&token=5d28ed81-c7d5-4f55-ba71-e9bda036ad58",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-single-arm-cable-row/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2270,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6a1f9240d236d85fc650333776f067ef30fa22a6101afcf609d08e00e3dc01e8",
          "bytes": 402602,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-single-arm-cable-row-6a1f9240d236d85f.gif?alt=media&token=5c8d8585-9f8b-4252-9a0c-6d6dd836706f",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-single-arm-cable-row-6a1f9240d236d85f.gif",
          "verifiedAt": "2026-10-07T23:34:49.051Z"
        },
        "webp": {
          "sha256": "d43cf736297d6e3e4ef98d73c75d3497c7a85dbcc87a226a1b42fe33b3c498c7",
          "bytes": 649330,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-single-arm-cable-row-d43cf736297d6e3e.webp?alt=media&token=4a82bc0a-0b03-4c75-8d64-4247eaefd064",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-single-arm-cable-row-d43cf736297d6e3e.webp",
          "verifiedAt": "2026-10-07T22:48:03.865Z"
        },
        "poster": {
          "sha256": "9b185abb31bd6317fda2980960a206c02f718b9de2af16a01bb034858321974b",
          "bytes": 77980,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-single-arm-cable-row-9b185abb31bd6317.png?alt=media&token=52320550-cec2-4aea-9ce2-63b9f871754b",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-single-arm-cable-row-9b185abb31bd6317.png",
          "verifiedAt": "2026-10-07T22:48:03.813Z"
        }
      }
    },
    {
      "id": "trainai-standing-weight-shift",
      "slug": "standing-weight-shift",
      "name": "Standing weight shift",
      "category": "Balance and supported movement",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "balance",
      "measurement": "duration",
      "instructions": [
        "Stand facing a fixed waist-high rail, both hands lightly touching.",
        "Feet remain flat shoulder width.",
        "Slowly shift weight to right leg while left unloads slightly, then through center to left leg.",
        "Feet never lift, torso stays tall, no lunge.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-weight-shift-f5ebaa440535.gif?alt=media&token=45940300-b3ce-4f50-aedf-98257ba67b4d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-standing-weight-shift-446f7159dd46.png?alt=media&token=9cd7f637-afdf-4481-8c67-3699a0b64ed5",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-weight-shift/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "eb01314839ec6ec69ce57b7786bd72c72badf2811db5261b8f90501620ec5da7",
          "bytes": 351882,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-weight-shift-eb01314839ec6ec6.gif?alt=media&token=c2ff2d40-16d5-45b4-b812-977bee0b2581",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-weight-shift-eb01314839ec6ec6.gif",
          "verifiedAt": "2026-10-07T23:34:50.322Z"
        },
        "webp": {
          "sha256": "22b412f4f81d8d15ba5f26fad10aa224a56dff407fd42b8e8a93ac141065b366",
          "bytes": 557528,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-weight-shift-22b412f4f81d8d15.webp?alt=media&token=53c62d99-df5d-4299-a090-205116d541f0",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-weight-shift-22b412f4f81d8d15.webp",
          "verifiedAt": "2026-10-07T22:48:05.063Z"
        },
        "poster": {
          "sha256": "3aa4d5f8553be61fb3c7fe7cb9b03882aa35d0dae10354a9500a1c6f7fb2aadf",
          "bytes": 56987,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-standing-weight-shift-3aa4d5f8553be61f.png?alt=media&token=4e01823b-4dbb-44cf-9c96-67ff47b43b30",
          "name": "trainai/creator-media/2026-10-07/trainai-standing-weight-shift-3aa4d5f8553be61f.png",
          "verifiedAt": "2026-10-07T22:48:05.554Z"
        }
      }
    },
    {
      "id": "trainai-stationary-cycling",
      "slug": "stationary-cycling",
      "name": "Stationary cycling",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "stationary bike",
      "requiredEquipment": [
        "stationary-bike"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Adjust the stationary-bike seat so the knee remains slightly bent at the bottom of the pedal stroke.",
        "Keep both feet on the pedals and cycle smoothly with a relaxed upper body.",
        "Adjust resistance to a comfortable effort."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-stationary-cycling-ed25f8719465.gif?alt=media&token=6e6ba9bd-79e4-472c-b252-501f54909250",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-stationary-cycling-68ffb526ea23.png?alt=media&token=24a5b782-ec4f-4d3b-89f4-222353983a0a",
      "aliases": [
        "bike run"
      ],
      "legacyIds": [
        "2138"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/stationary-cycling/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 720,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d3a6a9d609aa5a4cb33c663aec37a18c634aa77da10ee3c519dd2d87df02a3bc",
          "bytes": 329962,
          "mimeType": "image/gif",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-stationary-cycling-d3a6a9d609aa5a4c.gif?alt=media&token=6e7a7401-b82c-4312-bdb5-ee0d8a0e96c7",
          "name": "trainai/creator-media/2026-10-07/trainai-stationary-cycling-d3a6a9d609aa5a4c.gif",
          "verifiedAt": "2026-10-07T23:34:49.063Z"
        },
        "webp": {
          "sha256": "2114c5b28f1724b59f78ce2a1715a0788c2e649b8d3d1ac33c12f628050bfea6",
          "bytes": 542052,
          "mimeType": "image/webp",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-stationary-cycling-2114c5b28f1724b5.webp?alt=media&token=0173beb4-6363-4e6c-871c-3e635f60e035",
          "name": "trainai/creator-media/2026-10-07/trainai-stationary-cycling-2114c5b28f1724b5.webp",
          "verifiedAt": "2026-10-07T23:34:53.130Z"
        },
        "poster": {
          "sha256": "19077948434544e105d51f71b4ae3e471383c19ba7a6dde069da9134fb79a53d",
          "bytes": 236820,
          "mimeType": "image/png",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-stationary-cycling-19077948434544e1.png?alt=media&token=13c2605f-b411-47a4-8a5d-1dfdcd2f0423",
          "name": "trainai/creator-media/2026-10-07/trainai-stationary-cycling-19077948434544e1.png",
          "verifiedAt": "2026-10-07T23:34:52.399Z"
        }
      }
    },
    {
      "id": "trainai-step-back-burpee",
      "slug": "step-back-burpee",
      "name": "Step-back burpee",
      "category": "Conditioning",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Low impact step-back burpee WITHOUT push-up or jump.",
        "From standing squat down place palms, step one foot back then other to high plank, step one foot in then other, rise to standing.",
        "Both hands stationary during plank, complete body visible."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-step-back-burpee-0b8702eecf13.gif?alt=media&token=06bad84f-b28d-4580-b2ff-32cb1d7d5930",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-step-back-burpee-3d344b5577c5.png?alt=media&token=eacb3902-8f25-4240-a84a-fe289fc4ac35",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/step-back-burpee/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1320,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "be1f5cc5b6bc58c074d5bfad7da3f301954e565ffa4cc38112a7d3643cfd0c75",
          "bytes": 111220,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-step-back-burpee-be1f5cc5b6bc58c0.gif?alt=media&token=d30ff72e-ad25-4d4e-89fa-c015b2a42751",
          "name": "trainai/creator-media/2026-10-07/trainai-step-back-burpee-be1f5cc5b6bc58c0.gif",
          "verifiedAt": "2026-10-07T23:34:51.869Z"
        },
        "webp": {
          "sha256": "c0ad2e041cb6d538102efb4e71288c06ba382a3d76c26014cdee5bf8335758f3",
          "bytes": 176960,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-step-back-burpee-c0ad2e041cb6d538.webp?alt=media&token=89b24a03-9c70-450a-8408-95bd9f6255d2",
          "name": "trainai/creator-media/2026-10-07/trainai-step-back-burpee-c0ad2e041cb6d538.webp",
          "verifiedAt": "2026-10-07T23:34:53.801Z"
        },
        "poster": {
          "sha256": "639391e53c30c7e0301639bdba058fcb64281f37f7beabfcea25f537750f4f12",
          "bytes": 57213,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-step-back-burpee-639391e53c30c7e0.png?alt=media&token=0af72b33-eb6c-4e6a-9a70-2d570941ebc4",
          "name": "trainai/creator-media/2026-10-07/trainai-step-back-burpee-639391e53c30c7e0.png",
          "verifiedAt": "2026-10-07T23:34:53.230Z"
        }
      }
    },
    {
      "id": "trainai-step-jack",
      "slug": "step-jack",
      "name": "Step jack",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Low-impact step jack with NO jumping: start feet together and arms at sides, step right foot sideways while both arms sweep overhead, then return right foot and lower arms.",
        "Next step left foot sideways with both arms overhead, then return left foot and arms.",
        "One foot stays planted at all times.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-step-jack-af90f97366bf.gif?alt=media&token=bd7d5f6a-88b9-43f0-969d-f903e9d431e8",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-step-jack-b4a38a85b975.png?alt=media&token=2ce1f033-bcea-4c2c-9150-c1ec829e037e",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/step-jack/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2080,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b758d4be3b6cc745acc53a6cc760d921f6ac0b6de61a4ec12613e24423386ee6",
          "bytes": 281144,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-step-jack-b758d4be3b6cc745.gif?alt=media&token=f9b3a2fe-0985-47ce-b4b1-46c0dbd80686",
          "name": "trainai/creator-media/2026-10-07/trainai-step-jack-b758d4be3b6cc745.gif",
          "verifiedAt": "2026-10-07T23:34:54.958Z"
        },
        "webp": {
          "sha256": "4b9ae20b1eef9851494006d4cef8e29caa881c8fd28bfd961211de469f84c247",
          "bytes": 443412,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-step-jack-4b9ae20b1eef9851.webp?alt=media&token=e82c0cd3-e470-466d-a8c0-f8292a67b8c8",
          "name": "trainai/creator-media/2026-10-07/trainai-step-jack-4b9ae20b1eef9851.webp",
          "verifiedAt": "2026-10-07T23:34:56.441Z"
        },
        "poster": {
          "sha256": "71c52d61a0f7f92a489761ffc4fa5bdb8eced7906d53ac05a4feb6e77445d919",
          "bytes": 45040,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-step-jack-71c52d61a0f7f92a.png?alt=media&token=d0d7f687-e7d0-4063-9657-0822403af40e",
          "name": "trainai/creator-media/2026-10-07/trainai-step-jack-71c52d61a0f7f92a.png",
          "verifiedAt": "2026-10-07T23:34:54.748Z"
        }
      }
    },
    {
      "id": "trainai-suitcase-carry",
      "slug": "suitcase-carry",
      "name": "Suitcase carry",
      "category": "Dumbbell accessories",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "walking-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Walk holding ONE dumbbell in anatomical right hand, other hand free.",
        "Torso remains vertical, no sideways lean.",
        "Normal alternating steps, weight stays in SAME hand.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-suitcase-carry-6e7eb2ca6eaa.gif?alt=media&token=d386f65a-2a87-42e8-9a9a-c405f56e4e34",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-suitcase-carry-dbce7019a59a.png?alt=media&token=b05d59a1-f739-42f0-8cfd-3e12dde11d5d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/suitcase-carry/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8e9457635d336234bf8a7dac4a8f65020c2fa7f1e56194efc84ecff3bdfe428e",
          "bytes": 231868,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suitcase-carry-8e9457635d336234.gif?alt=media&token=fc040b91-043c-4cbe-9ea2-b50d61f7b5cf",
          "name": "trainai/creator-media/2026-10-07/trainai-suitcase-carry-8e9457635d336234.gif",
          "verifiedAt": "2026-10-07T23:34:57.090Z"
        },
        "webp": {
          "sha256": "95cd43aac582d0e51400ff712daba4746960430c1acf716df8a41f7e576a1d38",
          "bytes": 347242,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suitcase-carry-95cd43aac582d0e5.webp?alt=media&token=9bba24bc-655e-4f1a-80a0-6a3595ddc162",
          "name": "trainai/creator-media/2026-10-07/trainai-suitcase-carry-95cd43aac582d0e5.webp",
          "verifiedAt": "2026-10-07T23:34:56.969Z"
        },
        "poster": {
          "sha256": "4e5e754c6ba1702aff2a04d4df68093754651bb2243a0f03e8a930a89adb795a",
          "bytes": 77038,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suitcase-carry-4e5e754c6ba1702a.png?alt=media&token=18aec8cb-1bfa-4f51-90d4-2473abe3668d",
          "name": "trainai/creator-media/2026-10-07/trainai-suitcase-carry-4e5e754c6ba1702a.png",
          "verifiedAt": "2026-10-07T23:34:57.541Z"
        }
      }
    },
    {
      "id": "trainai-suitcase-hold",
      "slug": "suitcase-hold",
      "name": "Suitcase hold",
      "category": "Dumbbell accessories",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand tall holding one dumbbell at your side.",
        "Keep both shoulders level and avoid leaning toward or away from the weight.",
        "Breathe throughout the hold, then set the weight down and switch sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-suitcase-hold-05419e3d0fd4.gif?alt=media&token=20ecf4f9-2dc1-4f7c-b807-42f927c3619a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-suitcase-hold-1508ee2e07d7.png?alt=media&token=98b8efcd-530b-4b4f-888e-8e64ed080f16",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/suitcase-hold/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ef3eba6c4fd2bd62df54c57638927f5066d1c591cdc53733b8c1b5b7dc010569",
          "bytes": 30379,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suitcase-hold-ef3eba6c4fd2bd62.gif?alt=media&token=0e083701-4c28-4f9e-913d-13433d5ba46e",
          "name": "trainai/creator-media/2026-10-07/trainai-suitcase-hold-ef3eba6c4fd2bd62.gif",
          "verifiedAt": "2026-10-07T23:34:57.626Z"
        },
        "webp": {
          "sha256": "3ebfb7c85013e7e1d5af7af4bda29851093db1b9ca10943f9365c6b5161a55c6",
          "bytes": 27402,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suitcase-hold-3ebfb7c85013e7e1.webp?alt=media&token=599355c4-4605-4408-abe9-85e0de5b36d3",
          "name": "trainai/creator-media/2026-10-07/trainai-suitcase-hold-3ebfb7c85013e7e1.webp",
          "verifiedAt": "2026-10-07T22:48:08.670Z"
        },
        "poster": {
          "sha256": "bf0989920c6b5eb3581ed8cd778127720f141d2dd24f3c95703a42250304a88b",
          "bytes": 46180,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suitcase-hold-bf0989920c6b5eb3.png?alt=media&token=acea43a1-0080-4dc9-bcd3-505231ebd7b8",
          "name": "trainai/creator-media/2026-10-07/trainai-suitcase-hold-bf0989920c6b5eb3.png",
          "verifiedAt": "2026-10-07T22:48:08.731Z"
        }
      }
    },
    {
      "id": "trainai-supine-figure-four-stretch",
      "slug": "supine-figure-four-stretch",
      "name": "Supine figure-four stretch",
      "category": "Static stretching",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie on back with knees bent, cross right ankle over left thigh above knee.",
        "Hold behind left thigh and gently draw left thigh toward torso, right knee opens outward.",
        "Head and shoulders stay on floor.",
        "Hold steady then release slightly; no pulling directly on right knee.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supine-figure-four-stretch-e390a0f5e82c.gif?alt=media&token=536198ff-e115-491c-87eb-dd9655c94739",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supine-figure-four-stretch-ea8650b7234c.png?alt=media&token=ee5c318a-5e32-4f5e-a0de-617759ec2df2",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supine-figure-four-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bc17f84336ec4cf08fd08525ed17be64f6598d71a564e2e33a36ca3f7b588800",
          "bytes": 164530,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-figure-four-stretch-bc17f84336ec4cf0.gif?alt=media&token=3ea6ba5c-4bf1-473c-9749-5c42c7bf1b0e",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-figure-four-stretch-bc17f84336ec4cf0.gif",
          "verifiedAt": "2026-10-07T23:35:00.291Z"
        },
        "webp": {
          "sha256": "28e0afbbcf44b9859647c4e775116e6755756d1e02da5d7fc2efcffa5512e225",
          "bytes": 254228,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-figure-four-stretch-28e0afbbcf44b985.webp?alt=media&token=555a12b8-8fff-4883-9671-f0c3390a1f26",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-figure-four-stretch-28e0afbbcf44b985.webp",
          "verifiedAt": "2026-10-07T22:48:09.483Z"
        },
        "poster": {
          "sha256": "b1ca2baddecb4bbd38efc421ed8f0678003e4d6cb6fe72832d4a84ad7ad9b9ef",
          "bytes": 58708,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-figure-four-stretch-b1ca2baddecb4bbd.png?alt=media&token=23e28dcb-385a-4b2d-b5e5-84476b3fc0f3",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-figure-four-stretch-b1ca2baddecb4bbd.png",
          "verifiedAt": "2026-10-07T22:48:09.313Z"
        }
      }
    },
    {
      "id": "trainai-supine-hamstring-strap-stretch",
      "slug": "supine-hamstring-strap-stretch",
      "name": "Supine hamstring strap stretch",
      "category": "Static stretching",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "strap"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie on back, left leg relaxed straight along floor.",
        "Loop a strap around ball of right foot, hold strap ends with both hands and raise right leg toward ceiling, knee softly bent.",
        "Keep pelvis and head on floor.",
        "Hold then lower slightly, never pull forcefully.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supine-hamstring-strap-stretch-dd3250ef3622.gif?alt=media&token=b0982beb-e1a3-47cd-af9d-581fec746066",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supine-hamstring-strap-stretch-e6b7e6714c75.png?alt=media&token=b48df74d-ee73-4fe9-9a9c-5ef7a946c5a3",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supine-hamstring-strap-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "9196a879f9cc50e215bb135594760834c5c99c2f6f5734a167c8f45e135c7f98",
          "bytes": 105362,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-hamstring-strap-stretch-9196a879f9cc50e2.gif?alt=media&token=502924cd-58fe-4bff-bccc-628ba5b93724",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-hamstring-strap-stretch-9196a879f9cc50e2.gif",
          "verifiedAt": "2026-10-07T23:34:58.805Z"
        },
        "webp": {
          "sha256": "c4026923dc1ae05a34e016dd0bda9204ddcb86e3b8bf575318209c4150a06d62",
          "bytes": 157212,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-hamstring-strap-stretch-c4026923dc1ae05a.webp?alt=media&token=158c464c-ebc9-4e41-86eb-28837e5a9d0c",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-hamstring-strap-stretch-c4026923dc1ae05a.webp",
          "verifiedAt": "2026-10-07T22:48:10.009Z"
        },
        "poster": {
          "sha256": "2168e79c6745c44b7e3d9d6a45b43dbc90c3803d489a5c5c3c0e44e8d55216fa",
          "bytes": 32630,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-hamstring-strap-stretch-2168e79c6745c44b.png?alt=media&token=a8b9cd84-f5c6-4c99-b6ae-03705e7bb506",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-hamstring-strap-stretch-2168e79c6745c44b.png",
          "verifiedAt": "2026-10-07T22:48:10.001Z"
        }
      }
    },
    {
      "id": "trainai-supine-march",
      "slug": "supine-march",
      "name": "Supine march",
      "category": "Core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Supine march, lying flat on back with head grounded and both knees bent, feet flat.",
        "Lift one bent knee until thigh is vertical and shin horizontal; lower it.",
        "Then lift the OTHER bent knee and lower.",
        "Arms rest palms down beside torso; pelvis still, one foot stays down whenever other foot lifts."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supine-march-e6a6b62eadab.gif?alt=media&token=4fe77e41-5c47-48bb-9669-47a12fc74340",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supine-march-ced87f313e87.png?alt=media&token=9886c5d1-c342-4954-a790-341dd3f742fc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supine-march/",
      "mediaKind": "animated-demonstration",
      "frames": 9,
      "durationMs": 1530,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ecfc201a2c8557befcab1a2f0b5f26196aab67586531ebcfe6963d4091dd7c9e",
          "bytes": 330090,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-march-ecfc201a2c8557be.gif?alt=media&token=ee29b4fc-755d-4cb8-a0ac-4fb756aa4f65",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-march-ecfc201a2c8557be.gif",
          "verifiedAt": "2026-10-07T23:35:00.109Z"
        },
        "webp": {
          "sha256": "11342bc063f9808664ed06438918eae5c65325f0714963fca217eb1ed8f24b37",
          "bytes": 507272,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-march-11342bc063f98086.webp?alt=media&token=5ee13eb6-5425-4318-a61e-7f103d91ca8d",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-march-11342bc063f98086.webp",
          "verifiedAt": "2026-10-07T23:35:04.996Z"
        },
        "poster": {
          "sha256": "5bc62b78c97df1c55849a3229587d8285cb9317c4236678050cb8ae7619b9d02",
          "bytes": 98309,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supine-march-5bc62b78c97df1c5.png?alt=media&token=c009a0f0-8a82-4ff7-a332-9e21475d7677",
          "name": "trainai/creator-media/2026-10-07/trainai-supine-march-5bc62b78c97df1c5.png",
          "verifiedAt": "2026-10-07T23:35:01.681Z"
        }
      }
    },
    {
      "id": "trainai-supported-deep-squat-mobility",
      "slug": "supported-deep-squat-mobility",
      "name": "Supported deep-squat mobility",
      "category": "Mobility",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Hold a fixed waist-high support rail with both hands.",
        "Feet slightly wider than hips toes gently out.",
        "Slowly sit hips down into a comfortable supported deep squat, heels planted and knees track toes.",
        "Pause then rise while lightly supported."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-deep-squat-mobility-e3852a562957.gif?alt=media&token=db30edbd-6b16-49ba-8e9a-c6b7a500cc37",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-deep-squat-mobility-cb3477e9f5a5.png?alt=media&token=768afe07-5595-4aaa-9efb-c6cdf5dfc670",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-deep-squat-mobility/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3040,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "bb5ab5bab0c7730c144197b0ac596dd331be84e7b554f7989da3f4084c853e41",
          "bytes": 280086,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-deep-squat-mobility-bb5ab5bab0c7730c.gif?alt=media&token=3e62185d-e4e3-482f-872e-883963012bf1",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-deep-squat-mobility-bb5ab5bab0c7730c.gif",
          "verifiedAt": "2026-10-07T23:35:02.225Z"
        },
        "webp": {
          "sha256": "ac952fea139012255e5e11e32808da5f33ae26a3a622dcbd4b8e4bd994823474",
          "bytes": 467214,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-deep-squat-mobility-ac952fea13901225.webp?alt=media&token=d5ba815a-2d73-4350-83b0-5d17730fa249",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-deep-squat-mobility-ac952fea13901225.webp",
          "verifiedAt": "2026-10-07T23:35:04.421Z"
        },
        "poster": {
          "sha256": "5acdf05a139cc33b8fc3f4ef9f6c786717f7a97b43f283dc72bc97f11e1492eb",
          "bytes": 52868,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-deep-squat-mobility-5acdf05a139cc33b.png?alt=media&token=9fe61588-824e-4fae-b2d8-840d473161de",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-deep-squat-mobility-5acdf05a139cc33b.png",
          "verifiedAt": "2026-10-07T23:35:03.058Z"
        }
      }
    },
    {
      "id": "trainai-supported-heel-to-toe-rock",
      "slug": "supported-heel-to-toe-rock",
      "name": "Supported heel-to-toe rock",
      "category": "Balance and supported movement",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "balance",
      "measurement": "duration",
      "instructions": [
        "Stand facing fixed waist-high rail with both hands lightly holding it, feet hip width.",
        "Rock onto balls of feet lifting heels slightly, return flat, then rock onto heels lifting toes slightly, return flat.",
        "Ankles move, torso tall and knees soft.",
        "Rail fixed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-heel-to-toe-rock-5777b2810fdd.gif?alt=media&token=79ae2bd5-c098-477b-bf8f-fe9c63801336",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-heel-to-toe-rock-77362cda2084.png?alt=media&token=fc942682-7718-4642-938a-74624d4ff48b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-heel-to-toe-rock/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3c4128473f70d4ec79375a07c21ccc3418d26c198b98f6e24239624728ef3b0b",
          "bytes": 248517,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-heel-to-toe-rock-3c4128473f70d4ec.gif?alt=media&token=9b688d89-307a-4e7c-a414-75aacfe8f62c",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-heel-to-toe-rock-3c4128473f70d4ec.gif",
          "verifiedAt": "2026-10-07T23:35:05.605Z"
        },
        "webp": {
          "sha256": "fa91e8dd88306ce736c2481c7c7d34148437c77230f0d5a03f2bf2629c469be1",
          "bytes": 401732,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-heel-to-toe-rock-fa91e8dd88306ce7.webp?alt=media&token=d0a39616-f705-410c-bad2-5fa3fc0b2f4b",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-heel-to-toe-rock-fa91e8dd88306ce7.webp",
          "verifiedAt": "2026-10-07T22:48:13.291Z"
        },
        "poster": {
          "sha256": "12c83421ec318acfe2b9e4c1c86d4c3843ca3ff9c3acd08fa053901a1efc2e08",
          "bytes": 42381,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-heel-to-toe-rock-12c83421ec318acf.png?alt=media&token=51876f08-19fb-4ea7-beb1-5634e30e1049",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-heel-to-toe-rock-12c83421ec318acf.png",
          "verifiedAt": "2026-10-07T22:48:12.950Z"
        }
      }
    },
    {
      "id": "trainai-supported-single-leg-balance",
      "slug": "supported-single-leg-balance",
      "name": "Supported single-leg balance",
      "category": "Balance and supported movement",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "balance",
      "measurement": "duration",
      "instructions": [
        "Stand beside fixed waist-high rail with left hand lightly touching it.",
        "Shift weight onto left leg, bend right knee and lift right foot a few centimeters.",
        "Hold steady upright, then replace right foot.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-single-leg-balance-d7ba32ac87aa.gif?alt=media&token=de3ab9e0-04d4-4cfd-a138-510d24d6ead6",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-single-leg-balance-df2acf26e8ab.png?alt=media&token=54101f5c-f42d-496c-8188-8d76b9ea5f6d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-single-leg-balance/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b6636e0d1374f2c09c663bec5dacdc22ede6f335de97fb1ed2c6533fbf03078d",
          "bytes": 139161,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-single-leg-balance-b6636e0d1374f2c0.gif?alt=media&token=a50ce4cf-ceb5-43fc-b9dc-da23e86dc7b7",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-single-leg-balance-b6636e0d1374f2c0.gif",
          "verifiedAt": "2026-10-07T23:35:07.975Z"
        },
        "webp": {
          "sha256": "ce5f753a226edb0adadd2728f8a1b52052383fa137f4fbf24aaeedb11e62a29b",
          "bytes": 208480,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-single-leg-balance-ce5f753a226edb0a.webp?alt=media&token=c2d45bea-fb22-4d9d-a029-ccaab8adf180",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-single-leg-balance-ce5f753a226edb0a.webp",
          "verifiedAt": "2026-10-07T23:35:07.712Z"
        },
        "poster": {
          "sha256": "f2b85bf8c537d3d88f61e340e2fdd3b0d0379f670ba40cf0054f2d52e70824b9",
          "bytes": 52629,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-single-leg-balance-f2b85bf8c537d3d8.png?alt=media&token=10c977c3-4d9e-4093-a963-e66875c0170c",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-single-leg-balance-f2b85bf8c537d3d8.png",
          "verifiedAt": "2026-10-07T23:35:06.214Z"
        }
      }
    },
    {
      "id": "trainai-supported-tandem-stance",
      "slug": "supported-tandem-stance",
      "name": "Supported tandem stance",
      "category": "Balance and supported movement",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "balance",
      "measurement": "duration",
      "instructions": [
        "Stand beside fixed waist-high rail with left hand lightly on it.",
        "Place right heel immediately in front of left toes in a heel-to-toe tandem stance.",
        "Stand tall and hold steady, then ease to a wider stance.",
        "Knees soft; no eyes-closed challenge.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-tandem-stance-3842f7e17b08.gif?alt=media&token=cdf2dd2d-fe86-4df5-ab33-7ba5a0e58ded",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-supported-tandem-stance-9ee59206dab3.png?alt=media&token=4bc80b9a-b901-49e1-8c44-99a39a3b9733",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-tandem-stance/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3eb0eba4e6d4e62460d019d97e9f505b2136d35874164e998af70b4d8d924b98",
          "bytes": 145190,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-tandem-stance-3eb0eba4e6d4e624.gif?alt=media&token=d7d30364-a42d-4d55-8efc-ef570ea5ab78",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-tandem-stance-3eb0eba4e6d4e624.gif",
          "verifiedAt": "2026-10-07T23:35:08.734Z"
        },
        "webp": {
          "sha256": "941677b47d63e83cad8b1e7741e1f7b7a51dbb0bdca5c44bf2042dbfa85cbb03",
          "bytes": 217306,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-tandem-stance-941677b47d63e83c.webp?alt=media&token=a9d4ed56-019a-497a-ba8c-5dd40e49b13a",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-tandem-stance-941677b47d63e83c.webp",
          "verifiedAt": "2026-10-07T22:48:14.571Z"
        },
        "poster": {
          "sha256": "3b618749778821d3ac95d80ea516c796f591d5e4902fbf970cbe348a94f221ab",
          "bytes": 54072,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-supported-tandem-stance-3b618749778821d3.png?alt=media&token=e9d10e55-d578-4261-91fc-4da924e6a685",
          "name": "trainai/creator-media/2026-10-07/trainai-supported-tandem-stance-3b618749778821d3.png",
          "verifiedAt": "2026-10-07T22:48:14.594Z"
        }
      }
    },
    {
      "id": "trainai-suspension-row",
      "slug": "suspension-row",
      "name": "Suspension row",
      "category": "Pull-up and suspension",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [
        "suspension-trainer",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a suspension trainer to a rated anchor and hold both handles.",
        "Walk the feet forward to a manageable incline, keeping the body straight.",
        "Pull the chest toward the handles, then lower slowly without allowing the hips to sag."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-suspension-row-832a8709a112.gif?alt=media&token=c7a57ba9-abc4-4ac2-b1cb-4018e3d8aa85",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-suspension-row-bb9d4c0f58a3.png?alt=media&token=dd15aa63-13c9-4382-ab68-a8523978ac88",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/suspension-row/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1500,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "46f4ae1343392df1c1aee93f1acc263b7797b3aeaf0e7979376a46fd63608d11",
          "bytes": 280699,
          "mimeType": "image/gif",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suspension-row-46f4ae1343392df1.gif?alt=media&token=28c1e834-e779-41ab-99fe-f3533c7fc5f3",
          "name": "trainai/creator-media/2026-10-07/trainai-suspension-row-46f4ae1343392df1.gif",
          "verifiedAt": "2026-10-07T23:35:09.631Z"
        },
        "webp": {
          "sha256": "cac11d94bdd7a186ceb05bcd16284a242b15b41522e9af84576b352c1da14b91",
          "bytes": 464886,
          "mimeType": "image/webp",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suspension-row-cac11d94bdd7a186.webp?alt=media&token=ebf5d25c-1303-4f79-9e57-c441064e86be",
          "name": "trainai/creator-media/2026-10-07/trainai-suspension-row-cac11d94bdd7a186.webp",
          "verifiedAt": "2026-10-07T23:35:10.847Z"
        },
        "poster": {
          "sha256": "84a9a75c21ff3ddeb47570f01b0e2069d08691d0d11242c0c3339f4714272469",
          "bytes": 134526,
          "mimeType": "image/png",
          "width": 640,
          "height": 640,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-suspension-row-84a9a75c21ff3dde.png?alt=media&token=b28797e4-315f-4c47-b588-feaefde7336a",
          "name": "trainai/creator-media/2026-10-07/trainai-suspension-row-84a9a75c21ff3dde.png",
          "verifiedAt": "2026-10-07T23:35:11.906Z"
        }
      }
    },
    {
      "id": "trainai-tandem-walk-beside-support",
      "slug": "tandem-walk-beside-support",
      "name": "Tandem walk beside support",
      "category": "Balance and supported movement",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "balance",
      "measurement": "duration",
      "instructions": [
        "Walk heel-to-toe slowly along a fixed rail, one hand sliding lightly on rail.",
        "Alternate the leading foot; each forward heel goes directly in front of the opposite toes.",
        "Feet in narrow straight line."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-tandem-walk-beside-support-a2926e3fc041.gif?alt=media&token=e991005d-6c08-479f-85e7-40733c7c7880",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-tandem-walk-beside-support-203b7ccb68f5.png?alt=media&token=21b69455-c57f-4c93-ab7c-7900247c7c4d",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/tandem-walk-beside-support/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1280,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5420dbd2314628bd31d3f1199129aa2dee6b9d4583c09c735b6854a5a30199e1",
          "bytes": 207704,
          "mimeType": "image/gif",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tandem-walk-beside-support-5420dbd2314628bd.gif?alt=media&token=1e46d671-1045-4b7f-bb96-dacd58509cdf",
          "name": "trainai/creator-media/2026-10-07/trainai-tandem-walk-beside-support-5420dbd2314628bd.gif",
          "verifiedAt": "2026-10-07T23:35:11.938Z"
        },
        "webp": {
          "sha256": "5a488ac83b6e77209a99ba727e2193bcaf5059114f6f4fb389081d1fe0924f99",
          "bytes": 327440,
          "mimeType": "image/webp",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tandem-walk-beside-support-5a488ac83b6e7720.webp?alt=media&token=9ff22270-f783-4abb-a075-daf1e420513b",
          "name": "trainai/creator-media/2026-10-07/trainai-tandem-walk-beside-support-5a488ac83b6e7720.webp",
          "verifiedAt": "2026-10-07T23:35:15.677Z"
        },
        "poster": {
          "sha256": "859ef13dcfac5bcf42d2830826f993d1b0e4a739289709937a0c483cca2fc5ef",
          "bytes": 74325,
          "mimeType": "image/png",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tandem-walk-beside-support-859ef13dcfac5bcf.png?alt=media&token=bcd2b0fd-7711-4349-b8ae-828e3a2a3185",
          "name": "trainai/creator-media/2026-10-07/trainai-tandem-walk-beside-support-859ef13dcfac5bcf.png",
          "verifiedAt": "2026-10-07T23:35:13.728Z"
        }
      }
    },
    {
      "id": "trainai-tempo-bodyweight-squat",
      "slug": "tempo-bodyweight-squat",
      "name": "Tempo bodyweight squat",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Bodyweight squat with both arms straight forward at shoulder level for balance.",
        "Lower hips back and down slowly to around thighs parallel, knees tracking toes and heels grounded; stand back up.",
        "Feet hip-to-shoulder width, slight outward toe angle, neutral spine.",
        "One squat, no jump."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-tempo-bodyweight-squat-ec4ec3020542.gif?alt=media&token=ef2b74fd-cecb-4867-807b-b56c5a4b9218",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-tempo-bodyweight-squat-3a673a07305b.png?alt=media&token=019de119-d934-4f0c-9492-8c04aa37d4bb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/tempo-bodyweight-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "75a6d88253bebc88b80a768f9a6b32e3b32d534255dc5f772e683f5d62eec7ae",
          "bytes": 258384,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tempo-bodyweight-squat-75a6d88253bebc88.gif?alt=media&token=ebc235b9-326b-4c6a-a3f5-9bbde6004141",
          "name": "trainai/creator-media/2026-10-07/trainai-tempo-bodyweight-squat-75a6d88253bebc88.gif",
          "verifiedAt": "2026-10-07T23:35:13.311Z"
        },
        "webp": {
          "sha256": "d9ab693dcaf168fc325be160e9d38e5a5781c143b90c4d3b389a6dcc4c3625aa",
          "bytes": 425706,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tempo-bodyweight-squat-d9ab693dcaf168fc.webp?alt=media&token=449fd082-bd06-4576-b443-b22b8610d36b",
          "name": "trainai/creator-media/2026-10-07/trainai-tempo-bodyweight-squat-d9ab693dcaf168fc.webp",
          "verifiedAt": "2026-10-07T23:35:19.504Z"
        },
        "poster": {
          "sha256": "c22ea14ed0c9d92ffaafd51685fb8caf49b4236b53bf97d681011a104688d962",
          "bytes": 45340,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tempo-bodyweight-squat-c22ea14ed0c9d92f.png?alt=media&token=ee9d4b95-414c-4411-988f-d6c27c247ae2",
          "name": "trainai/creator-media/2026-10-07/trainai-tempo-bodyweight-squat-c22ea14ed0c9d92f.png",
          "verifiedAt": "2026-10-07T23:35:15.656Z"
        }
      }
    },
    {
      "id": "trainai-thoracic-open-book",
      "slug": "thoracic-open-book",
      "name": "Thoracic open book",
      "category": "Mobility",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Lie on left side, knees bent and stacked in front at 90 degrees, arms extended forward together at shoulder height.",
        "Lift right arm and rotate chest open toward ceiling, bringing right arm back toward floor behind, then return to stacked hands.",
        "Knees stay stacked and still, head follows gently.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-thoracic-open-book-22a764a1a60b.gif?alt=media&token=a8137d81-ee5b-4586-8e2a-580167fa6fb8",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-thoracic-open-book-9b5d3b1b2269.png?alt=media&token=984ca1c0-0f31-414f-9c72-1ece2e42107c",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/thoracic-open-book/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a2aa00788e978dc25f59f574d7b467aca030629a4ad114f87e8ae6ac1ca9a440",
          "bytes": 497699,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-thoracic-open-book-a2aa00788e978dc2.gif?alt=media&token=97244142-9e65-4117-a172-7c2e3e1db6ed",
          "name": "trainai/creator-media/2026-10-07/trainai-thoracic-open-book-a2aa00788e978dc2.gif",
          "verifiedAt": "2026-10-07T23:35:25.421Z"
        },
        "webp": {
          "sha256": "36774bf8ae3be85eeb808fec3306d725ec255718c8db552296a6b902c1250255",
          "bytes": 789828,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-thoracic-open-book-36774bf8ae3be85e.webp?alt=media&token=5e5c3214-a142-483b-bd33-cc1f8d0a64f2",
          "name": "trainai/creator-media/2026-10-07/trainai-thoracic-open-book-36774bf8ae3be85e.webp",
          "verifiedAt": "2026-10-07T23:35:18.995Z"
        },
        "poster": {
          "sha256": "87abfd0f2b62119ad9ac7ae53de73598b8f91c614e22513118238fe7c9cff723",
          "bytes": 88246,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-thoracic-open-book-87abfd0f2b62119a.png?alt=media&token=7b825079-9afa-4e41-829c-cc168e80f6e0",
          "name": "trainai/creator-media/2026-10-07/trainai-thoracic-open-book-87abfd0f2b62119a.png",
          "verifiedAt": "2026-10-07T23:35:21.323Z"
        }
      }
    },
    {
      "id": "trainai-thread-the-needle",
      "slug": "thread-the-needle",
      "name": "Thread the needle",
      "category": "Mobility",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "From quadruped, one arm threads palm-up under opposite arm, chest rotates and threading shoulder lowers toward floor.",
        "Both knees and support palm stay fixed.",
        "Only reaching arm and upper trunk move.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-thread-the-needle-bf1de350c5fc.gif?alt=media&token=d600d286-b863-4450-8dae-eac1550bd9db",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-thread-the-needle-36596bcbdac0.png?alt=media&token=0733f163-7f77-48b1-b5dc-d7c0d9f07285",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/thread-the-needle/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 2050,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0f23141c0b31ad5b4a76d33df63a06331b7cff7ea9d79455d1c6fd0d41bd7190",
          "bytes": 423765,
          "mimeType": "image/gif",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-thread-the-needle-0f23141c0b31ad5b.gif?alt=media&token=57acbe02-7a8b-40e1-9ddd-4fcf9f196df3",
          "name": "trainai/creator-media/2026-10-07/trainai-thread-the-needle-0f23141c0b31ad5b.gif",
          "verifiedAt": "2026-10-07T23:35:26.636Z"
        },
        "webp": {
          "sha256": "7ec70ad8cc8994eb54bdec0e7c2d85beacd9f6133cbe68e9837cb220b0f9f92b",
          "bytes": 671666,
          "mimeType": "image/webp",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-thread-the-needle-7ec70ad8cc8994eb.webp?alt=media&token=e30874b2-84e5-4efe-9d0c-3e644df64c00",
          "name": "trainai/creator-media/2026-10-07/trainai-thread-the-needle-7ec70ad8cc8994eb.webp",
          "verifiedAt": "2026-10-07T23:35:28.838Z"
        },
        "poster": {
          "sha256": "fac86238fc085a3965becc080482d2849747042d98d7da4e2664a47f568a05dd",
          "bytes": 102985,
          "mimeType": "image/png",
          "width": 384,
          "height": 384,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-thread-the-needle-fac86238fc085a39.png?alt=media&token=ec009816-310a-470b-8272-487369e6738a",
          "name": "trainai/creator-media/2026-10-07/trainai-thread-the-needle-fac86238fc085a39.png",
          "verifiedAt": "2026-10-07T23:35:27.118Z"
        }
      }
    },
    {
      "id": "trainai-tibialis-raise",
      "slug": "tibialis-raise",
      "name": "Tibialis raise",
      "category": "Home foundations",
      "target": "tibialis anterior",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lean back against a wall with legs nearly straight and feet slightly in front.",
        "Keeping both heels fixed on the floor, lift the toes and forefeet toward shins, then lower toes.",
        "The heels never rise.",
        "Body remains almost still, movement occurs only at ankles."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-tibialis-raise-f44cb42548ed.gif?alt=media&token=62238d6b-b47b-4444-b3c8-93cf7566579a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-tibialis-raise-de34fdfed8a9.png?alt=media&token=13dbf7a4-fe5b-4f7e-b5d6-d2abe005516a",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/tibialis-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f07cfbebb455faef98c699c6c79714ce9a2e77e4baea65896805ae541d02d841",
          "bytes": 367148,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tibialis-raise-f07cfbebb455faef.gif?alt=media&token=8931b15d-6074-4229-91a0-3fc20dc0e316",
          "name": "trainai/creator-media/2026-10-07/trainai-tibialis-raise-f07cfbebb455faef.gif",
          "verifiedAt": "2026-10-07T23:35:30.871Z"
        },
        "webp": {
          "sha256": "c62dc0d174b1429cc4b0ec41b89d55af393559c1374ebb06b3eb98f934e9eca0",
          "bytes": 564830,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tibialis-raise-c62dc0d174b1429c.webp?alt=media&token=2885720f-f07f-4a22-8959-b1ba20f2ccee",
          "name": "trainai/creator-media/2026-10-07/trainai-tibialis-raise-c62dc0d174b1429c.webp",
          "verifiedAt": "2026-10-07T22:48:20.533Z"
        },
        "poster": {
          "sha256": "644ce3ea59048d1ed3ce4a70eb9c6aa6d2bcb55f1ba0fe567db73031fdf834a0",
          "bytes": 64903,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-tibialis-raise-644ce3ea59048d1e.png?alt=media&token=b99de1b5-cbf6-4e0b-bfb0-ad49c6416d15",
          "name": "trainai/creator-media/2026-10-07/trainai-tibialis-raise-644ce3ea59048d1e.png",
          "verifiedAt": "2026-10-07T22:48:20.541Z"
        }
      }
    },
    {
      "id": "trainai-trap-bar-deadlift",
      "slug": "trap-bar-deadlift",
      "name": "Trap-bar deadlift",
      "category": "Barbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "trap bar",
      "requiredEquipment": [
        "trap-bar",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand INSIDE a clear hexagonal trap bar with small equal plates at sides.",
        "Grip elevated side handles with neutral hands.",
        "Begin hips hinged and knees bent, extend knees and hips to stand tall, then lower.",
        "Arms straight, entire hex bar surrounds feet and moves as one rigid object, no bar passing through legs."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-trap-bar-deadlift-a21a3b7e494f.gif?alt=media&token=648270e0-a6c4-4645-ad05-5cc64d529e8a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-trap-bar-deadlift-7fa269dfb73e.png?alt=media&token=9be9f78f-80fe-4986-be85-54d5d913ae4f",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/trap-bar-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 12,
      "durationMs": 1940,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "9dc51091b8283ab96c2348ab83d891405d4a484e1251ab0b047a7a5c4356dc65",
          "bytes": 567734,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-trap-bar-deadlift-9dc51091b8283ab9.gif?alt=media&token=b4852c9c-2b62-4ad1-aaf2-db34f7673038",
          "name": "trainai/creator-media/2026-10-07/trainai-trap-bar-deadlift-9dc51091b8283ab9.gif",
          "verifiedAt": "2026-10-07T23:35:29.588Z"
        },
        "webp": {
          "sha256": "e4441b0a2a303aa8d6966340c025b0f09962fe35fb179baea1891a10aa0ca3d2",
          "bytes": 910676,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-trap-bar-deadlift-e4441b0a2a303aa8.webp?alt=media&token=11b79b17-e1f6-4aec-88aa-da14bf532080",
          "name": "trainai/creator-media/2026-10-07/trainai-trap-bar-deadlift-e4441b0a2a303aa8.webp",
          "verifiedAt": "2026-10-07T23:35:31.879Z"
        },
        "poster": {
          "sha256": "1f29e444040690f950dda05d96865b419633e5fad535daef07f6336d92da26a2",
          "bytes": 137091,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-trap-bar-deadlift-1f29e444040690f9.png?alt=media&token=e240b6b3-e805-45ec-be9d-d556fa975e1c",
          "name": "trainai/creator-media/2026-10-07/trainai-trap-bar-deadlift-1f29e444040690f9.png",
          "verifiedAt": "2026-10-07T23:35:30.731Z"
        }
      }
    },
    {
      "id": "trainai-treadmill-run",
      "slug": "treadmill-run",
      "name": "Treadmill run",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "treadmill",
      "requiredEquipment": [
        "treadmill"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Start the treadmill at a low speed and attach the safety clip.",
        "Build to a comfortable run while staying near the center of the belt and keeping your gaze forward.",
        "Reduce speed gradually before stepping off."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-treadmill-run-255e770a6b21.gif?alt=media&token=01d4ea8e-e270-4f25-a7e4-4989c2e341d0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-treadmill-run-019d110145f7.png?alt=media&token=1b771993-5482-4af7-9282-2da75ce37ba8",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/treadmill-run/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4b1764c248808e071ca280151a28b0525dc520c50702b0b80df654b4954b402d",
          "bytes": 250592,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-treadmill-run-4b1764c248808e07.gif?alt=media&token=309f637c-ad02-4b80-bf96-6649dae8043a",
          "name": "trainai/creator-media/2026-10-07/trainai-treadmill-run-4b1764c248808e07.gif",
          "verifiedAt": "2026-10-07T23:35:32.394Z"
        },
        "webp": {
          "sha256": "715eb11053f50af7bcca51aed4f4abdf7b51698b74b8c27697067d637121ee08",
          "bytes": 384138,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-treadmill-run-715eb11053f50af7.webp?alt=media&token=9ab669b5-6023-414f-a1f7-57384daf4a33",
          "name": "trainai/creator-media/2026-10-07/trainai-treadmill-run-715eb11053f50af7.webp",
          "verifiedAt": "2026-10-07T23:35:37.115Z"
        },
        "poster": {
          "sha256": "6f825c53ec72380418dc71259ac977b7919988349e36f50ad64f354c8b2502bd",
          "bytes": 183961,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-treadmill-run-6f825c53ec723804.png?alt=media&token=115865a3-9c83-4793-bc0f-c489ab609d20",
          "name": "trainai/creator-media/2026-10-07/trainai-treadmill-run-6f825c53ec723804.png",
          "verifiedAt": "2026-10-07T23:35:33.785Z"
        }
      }
    },
    {
      "id": "trainai-treadmill-walk",
      "slug": "treadmill-walk",
      "name": "Treadmill walk",
      "category": "Cardio equipment",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "treadmill",
      "requiredEquipment": [
        "treadmill"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Natural alternating walking on compact treadmill.",
        "Entire machine remains identical and feet alternate normally.",
        "One leg forward while other back then exchange; opposite arms swing."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-treadmill-walk-1a3c85c4e6a6.gif?alt=media&token=6ce2dc29-1782-4bf7-aeda-a41c2c6e3e84",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-treadmill-walk-15b80638b7b1.png?alt=media&token=e55bcb29-4a58-4701-a2ad-9dc09b16ac9b",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/treadmill-walk/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 880,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "118abe596a3b771806b5c7854e6866b9b8926644b350e7b3b678174cf68bb8d4",
          "bytes": 267109,
          "mimeType": "image/gif",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-treadmill-walk-118abe596a3b7718.gif?alt=media&token=3791afd5-7613-476f-abfb-0af33b6d6dc4",
          "name": "trainai/creator-media/2026-10-07/trainai-treadmill-walk-118abe596a3b7718.gif",
          "verifiedAt": "2026-10-07T23:35:35.714Z"
        },
        "webp": {
          "sha256": "215df1dd53426d518f8ae1d4362b385a904a02516117f7bae2dd8178209c5b1d",
          "bytes": 400704,
          "mimeType": "image/webp",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-treadmill-walk-215df1dd53426d51.webp?alt=media&token=6cdf2721-18de-4257-afc2-68f3277813ff",
          "name": "trainai/creator-media/2026-10-07/trainai-treadmill-walk-215df1dd53426d51.webp",
          "verifiedAt": "2026-10-07T23:35:37.304Z"
        },
        "poster": {
          "sha256": "9d64b8681b166122152dddc6091e8e36d1e6ae46b588324748e0c2ca23ff3b5b",
          "bytes": 185802,
          "mimeType": "image/png",
          "width": 656,
          "height": 656,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-treadmill-walk-9d64b8681b166122.png?alt=media&token=10f006dc-49d7-4132-827f-834992ad8061",
          "name": "trainai/creator-media/2026-10-07/trainai-treadmill-walk-9d64b8681b166122.png",
          "verifiedAt": "2026-10-07T23:35:38.038Z"
        }
      }
    },
    {
      "id": "trainai-two-hand-kettlebell-swing",
      "slug": "two-hand-kettlebell-swing",
      "name": "Two-hand kettlebell swing",
      "category": "Kettlebells",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Two-hand Russian kettlebell swing.",
        "Begin hips hinged, knees soft, bell between upper thighs behind hands.",
        "Drive hips to tall stance so bell floats forward to chest height on long arms, then let bell return between thighs while hinging.",
        "Neutral back, no overhead swing, no deep squat, no arm curl.",
        "Depict continuous swing arc."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-two-hand-kettlebell-swing-6e16fc547486.gif?alt=media&token=1b89b2b7-77af-4275-95a0-0416d2d53e4d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-two-hand-kettlebell-swing-fa4836bd3158.png?alt=media&token=d0b9b4a1-b868-4c61-978c-93010ae68389",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/two-hand-kettlebell-swing/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "44350734840ec97e175a47b06f4539609e0721665405390292a5b9c29c31a590",
          "bytes": 266835,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-two-hand-kettlebell-swing-44350734840ec97e.gif?alt=media&token=9be8013b-8aa7-4e64-9631-0faaf982c123",
          "name": "trainai/creator-media/2026-10-07/trainai-two-hand-kettlebell-swing-44350734840ec97e.gif",
          "verifiedAt": "2026-10-07T23:35:38.797Z"
        },
        "webp": {
          "sha256": "2b1cab566ecb1607f82681cdf22a0dc38eee2c8adfca5f6e2b9b6994628e8e6b",
          "bytes": 441350,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-two-hand-kettlebell-swing-2b1cab566ecb1607.webp?alt=media&token=c4f54555-9560-40d6-b360-3b7e54fc7aaa",
          "name": "trainai/creator-media/2026-10-07/trainai-two-hand-kettlebell-swing-2b1cab566ecb1607.webp",
          "verifiedAt": "2026-10-07T22:48:25.015Z"
        },
        "poster": {
          "sha256": "a5772f6d9026ab79c133ae3abfa79243fe106e653b94549d1fd5da4a49b21d87",
          "bytes": 41775,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-two-hand-kettlebell-swing-a5772f6d9026ab79.png?alt=media&token=97a2c0b2-2975-4427-9fa1-1cdc4d3468be",
          "name": "trainai/creator-media/2026-10-07/trainai-two-hand-kettlebell-swing-a5772f6d9026ab79.png",
          "verifiedAt": "2026-10-07T22:48:25.169Z"
        }
      }
    },
    {
      "id": "trainai-upper-back-foam-roll",
      "slug": "upper-back-foam-roll",
      "name": "Upper-back foam roll",
      "category": "Soft-tissue adjuncts",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "recovery",
      "measurement": "duration",
      "instructions": [
        "Foam roller perpendicular under upper back, knees bent, feet planted.",
        "Hands cradle head, neck neutral.",
        "Hips lifted off floor.",
        "Use legs to gently move torso 8 cm over roller between shoulder blades and mid upper back; roller rotates naturally, never rolls onto neck or lower back."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-upper-back-foam-roll-e74b79b90650.gif?alt=media&token=ccb1dcfb-9e65-419c-b232-a21700da5bc1",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-upper-back-foam-roll-a16a18a13923.png?alt=media&token=623b8f02-c183-40dd-a96c-aefc254b59ab",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/upper-back-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2300,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8e400ee36bca22e94f22a3611377dac976b670ccf7fd605e35cf10f55b28844f",
          "bytes": 326716,
          "mimeType": "image/gif",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-upper-back-foam-roll-8e400ee36bca22e9.gif?alt=media&token=9cef15c8-ab19-4875-96f1-3140df48a742",
          "name": "trainai/creator-media/2026-10-07/trainai-upper-back-foam-roll-8e400ee36bca22e9.gif",
          "verifiedAt": "2026-10-07T23:35:39.818Z"
        },
        "webp": {
          "sha256": "9713699b2da8334f70aadacec1d6a8a799ba17064b1de0f3205713ea2258cb30",
          "bytes": 548712,
          "mimeType": "image/webp",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-upper-back-foam-roll-9713699b2da8334f.webp?alt=media&token=aeaf677f-9a45-4733-8d27-52c5ada63602",
          "name": "trainai/creator-media/2026-10-07/trainai-upper-back-foam-roll-9713699b2da8334f.webp",
          "verifiedAt": "2026-10-07T23:35:46.425Z"
        },
        "poster": {
          "sha256": "ce28e04b5209c839089e2843408ebb3108b2f73ac2095bb8b7fd105937f25e5e",
          "bytes": 56575,
          "mimeType": "image/png",
          "width": 416,
          "height": 416,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-upper-back-foam-roll-ce28e04b5209c839.png?alt=media&token=cd083c9e-528f-4370-80df-3160f46b5b1a",
          "name": "trainai/creator-media/2026-10-07/trainai-upper-back-foam-roll-ce28e04b5209c839.png",
          "verifiedAt": "2026-10-07T23:35:40.348Z"
        }
      }
    },
    {
      "id": "trainai-walking",
      "slug": "walking",
      "name": "Walking",
      "category": "Low-impact cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [
        "walking-space"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand tall and begin walking at a comfortable pace.",
        "Alternate steps with a relaxed opposite-arm swing and look ahead.",
        "Use a clear, even surface and shorten the stride if needed for balance."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-walking-6c2f86dae2e1.gif?alt=media&token=7527fbfd-5e5b-42d3-b09b-d3eafea91201",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-walking-55a5efd2a237.png?alt=media&token=f0f800a9-b35b-40dc-96d5-e40cbd8e9f50",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/walking/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1000,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6cf1ffcc05794eb64d9afcad24b798f4a8a857dbe283a2c58264ab18cecddab7",
          "bytes": 216925,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-walking-6cf1ffcc05794eb6.gif?alt=media&token=ba4d5d2f-5289-4547-9aae-ceb2eae11cfb",
          "name": "trainai/creator-media/2026-10-07/trainai-walking-6cf1ffcc05794eb6.gif",
          "verifiedAt": "2026-10-07T23:35:42.762Z"
        },
        "webp": {
          "sha256": "61538754e2eff3e84f202b845668d6cb7ca88af22bffbe9943787396d389ae89",
          "bytes": 323550,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-walking-61538754e2eff3e8.webp?alt=media&token=2a9fc60b-ef59-4547-af7f-9162fba79cfa",
          "name": "trainai/creator-media/2026-10-07/trainai-walking-61538754e2eff3e8.webp",
          "verifiedAt": "2026-10-07T23:35:44.915Z"
        },
        "poster": {
          "sha256": "81e7c6267a18f828d03dad8f0826b8726cc7a99e98c42f7aca6a5b0cdb9952da",
          "bytes": 151037,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-walking-81e7c6267a18f828.png?alt=media&token=891084fb-bbe7-4c90-9a52-b85f5f17bf2e",
          "name": "trainai/creator-media/2026-10-07/trainai-walking-81e7c6267a18f828.png",
          "verifiedAt": "2026-10-07T23:35:43.858Z"
        }
      }
    },
    {
      "id": "trainai-wall-calf-stretch",
      "slug": "wall-calf-stretch",
      "name": "Wall calf stretch",
      "category": "Static stretching",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Straight-knee wall calf stretch.",
        "Both palms rest on the fixed wall at shoulder height.",
        "One leg is forward with its knee bent; the other leg extends back with rear knee straight and rear heel flat, both feet pointing toward wall.",
        "Gently shift weight toward wall to stretch the rear calf while heel stays grounded.",
        "Briefly hold, then ease out without changing feet.",
        "Do not bounce, lift rear heel or bend the rear knee.",
        "Show the same side throughout; the app will cue switching sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-calf-stretch-204475b5a77d.gif?alt=media&token=cbc2589d-c78c-40aa-8828-e0fe210c9e40",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-calf-stretch-aa90d04584a0.png?alt=media&token=4bbbd803-2455-4264-bc31-1f594d984e87",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-calf-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3760,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3bd9ccc1921f5316ef73eeb8f2bba9e3a7785adac25c483db9bdf50a96cc6eed",
          "bytes": 381497,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-calf-stretch-3bd9ccc1921f5316.gif?alt=media&token=0a8e9aa8-77cb-4766-9d78-5f6941fc5e4c",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-calf-stretch-3bd9ccc1921f5316.gif",
          "verifiedAt": "2026-10-07T23:35:46.439Z"
        },
        "webp": {
          "sha256": "78a503aaa3231574e839e66beac61fcc6d2e306fb80ccb95a20faa779c7fce64",
          "bytes": 536738,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-calf-stretch-78a503aaa3231574.webp?alt=media&token=a9f8c095-e324-4c0d-90c0-1aa31cc58b04",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-calf-stretch-78a503aaa3231574.webp",
          "verifiedAt": "2026-10-07T23:35:55.075Z"
        },
        "poster": {
          "sha256": "693767d6c87305c3f0169226b9f706e8d02eeae7640a3b2b8f44a47ffcdaacc7",
          "bytes": 57166,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-calf-stretch-693767d6c87305c3.png?alt=media&token=72c8f06c-1dc6-4475-a508-5ba0a43f3121",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-calf-stretch-693767d6c87305c3.png",
          "verifiedAt": "2026-10-07T23:35:47.615Z"
        }
      }
    },
    {
      "id": "trainai-wall-push-up",
      "slug": "wall-push-up",
      "name": "Wall push-up",
      "category": "Home pushing",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Place both palms on a stable wall at shoulder height and step back.",
        "Keep a straight line from head to heels as you bend the elbows and bring your chest toward the wall.",
        "Push away smoothly without bending at the waist."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-push-up-9a6182cb78a1.gif?alt=media&token=673c8788-1a0e-4b11-a245-f017527aa62f",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-push-up-5e24d970035b.png?alt=media&token=613d78f9-b4c4-416d-b69e-3b2def7bcccc",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8446469dbc032cfc1f7bcc0856305c6d81f76efc7808eed676499753483b9cd2",
          "bytes": 345058,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-push-up-8446469dbc032cfc.gif?alt=media&token=907e48cc-ebe2-4016-aa46-6e8f8ffb975c",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-push-up-8446469dbc032cfc.gif",
          "verifiedAt": "2026-10-07T23:35:51.541Z"
        },
        "webp": {
          "sha256": "11106e4af95fae4006110f853e0df47994977226ae19a9df0225878ba00e88fc",
          "bytes": 501348,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-push-up-11106e4af95fae40.webp?alt=media&token=63e1e517-d853-42d1-8278-113e833f7ea4",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-push-up-11106e4af95fae40.webp",
          "verifiedAt": "2026-10-07T23:35:51.849Z"
        },
        "poster": {
          "sha256": "8351a74afc7b78a0df890ef347f306421b4e16333c2f1a61de5bb58930ee0c96",
          "bytes": 51835,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-push-up-8351a74afc7b78a0.png?alt=media&token=c4e9a689-752f-48f2-a85d-cf9043bf6668",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-push-up-8351a74afc7b78a0.png",
          "verifiedAt": "2026-10-07T23:35:52.484Z"
        }
      }
    },
    {
      "id": "trainai-wall-sit",
      "slug": "wall-sit",
      "name": "Wall sit",
      "category": "Home foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Place your back against a wall and walk your feet slightly forward.",
        "Slide down to a comfortable seated position with feet flat and knees aligned over the feet.",
        "Breathe steadily through the hold, then slide back up."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-sit-8af52f30e9a5.gif?alt=media&token=f7b6efea-6afe-44d9-bd65-042a9ab898a0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-sit-0372cb73b1ba.png?alt=media&token=121f6a3d-788d-48ec-8b23-1ff8fc8531d6",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-sit/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a9df4a2471719f416b1b06009c624ca112754b95d54a7dc51cbd1afeb164b575",
          "bytes": 327853,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-sit-a9df4a2471719f41.gif?alt=media&token=0a1a00d7-ab15-4e92-bdc4-70be2c35f17f",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-sit-a9df4a2471719f41.gif",
          "verifiedAt": "2026-10-07T23:35:56.033Z"
        },
        "webp": {
          "sha256": "9a6f721f31185f31453cbb3be654ac57b7926c1d4c21270269aa7f064afecf95",
          "bytes": 505854,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-sit-9a6f721f31185f31.webp?alt=media&token=2e8e80cd-c82c-4c34-8dec-2d991708aab6",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-sit-9a6f721f31185f31.webp",
          "verifiedAt": "2026-10-07T22:48:30.362Z"
        },
        "poster": {
          "sha256": "391e429e225d4eb9bb6014f0ed76c22f8d8886e63913414e78087e790fb9e979",
          "bytes": 57013,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-sit-391e429e225d4eb9.png?alt=media&token=4da4e599-8f45-4fed-b699-14a428a46549",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-sit-391e429e225d4eb9.png",
          "verifiedAt": "2026-10-07T22:48:29.850Z"
        }
      }
    },
    {
      "id": "trainai-wall-slide",
      "slug": "wall-slide",
      "name": "Wall slide",
      "category": "Mobility",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Arms in goalpost shape, backs of hands near wall.",
        "Slide arms upward into a Y as comfortable, then lower to goalpost."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-slide-b8860f9e67b4.gif?alt=media&token=a791f54d-f2f5-47c2-9bd8-109ed978d0e1",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-slide-8de744736617.png?alt=media&token=97cc8f95-d7a3-4352-adc1-e20322c3fa44",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-slide/",
      "mediaKind": "animated-demonstration",
      "frames": 14,
      "durationMs": 2520,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "aae161b631a46c44aa78d15b0f3695ed55fab6bdd198dc8a5a9e832c1a596b65",
          "bytes": 370849,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-slide-aae161b631a46c44.gif?alt=media&token=55b5c548-b4ba-4290-a2a5-ef4d3287d6e4",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-slide-aae161b631a46c44.gif",
          "verifiedAt": "2026-10-07T23:35:55.060Z"
        },
        "webp": {
          "sha256": "da0d9b74dca6c33dd44dc9fb01e525003eb34424c16ed7380d78613c2e75294b",
          "bytes": 516334,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-slide-da0d9b74dca6c33d.webp?alt=media&token=909459ae-b22e-4e45-aa6a-711789e40329",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-slide-da0d9b74dca6c33d.webp",
          "verifiedAt": "2026-10-07T23:36:02.985Z"
        },
        "poster": {
          "sha256": "15eca1227e4914daa87dca5b9b83c51faf29f6ddc6285043c88f606ccf40b221",
          "bytes": 73260,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-slide-15eca1227e4914da.png?alt=media&token=c3395424-9715-4678-80ba-b6eb3e1d38b0",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-slide-15eca1227e4914da.png",
          "verifiedAt": "2026-10-07T23:35:56.725Z"
        }
      }
    },
    {
      "id": "trainai-wall-supported-calf-raise",
      "slug": "wall-supported-calf-raise",
      "name": "Wall-supported calf raise",
      "category": "Home foundations",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand upright with both forefeet on floor, fingertips lightly touching a wall for balance.",
        "Raise both heels together to rise onto the balls of feet, then lower heels slowly.",
        "Knees remain nearly straight and hips do not hinge.",
        "Hands touch the same spots throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-supported-calf-raise-1d12c3341adb.gif?alt=media&token=48329050-e2d3-4d2b-800f-de0c55e4794b",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-supported-calf-raise-1c72fdc66a47.png?alt=media&token=6e4c0e0b-35a7-4424-a887-cecff2eb5ab0",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-supported-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d541a98bae0ed6b32f9e017fd1688ef2eff0bb86e733bfba6c3fcf3d0db1af47",
          "bytes": 339508,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-supported-calf-raise-d541a98bae0ed6b3.gif?alt=media&token=55fc905d-6ffb-4434-b89c-07f766875d8d",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-supported-calf-raise-d541a98bae0ed6b3.gif",
          "verifiedAt": "2026-10-07T23:36:02.686Z"
        },
        "webp": {
          "sha256": "df8db3c3cf6190d36622054bc6b51da93d9fb4d13f643ad33ef0bb3817f62bc5",
          "bytes": 494644,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-supported-calf-raise-df8db3c3cf6190d3.webp?alt=media&token=7cd98a1d-ebc1-448b-aa9a-927c6e59c586",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-supported-calf-raise-df8db3c3cf6190d3.webp",
          "verifiedAt": "2026-10-07T23:36:02.677Z"
        },
        "poster": {
          "sha256": "6d4a0ca175ceebaeafb9ad24682609e0f03dd967a13a6db00457a45e348378ff",
          "bytes": 55777,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-supported-calf-raise-6d4a0ca175ceebae.png?alt=media&token=b6af53ef-98c9-4464-8ecc-03f9dfad4277",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-supported-calf-raise-6d4a0ca175ceebae.png",
          "verifiedAt": "2026-10-07T23:36:04.122Z"
        }
      }
    },
    {
      "id": "trainai-wall-supported-quadriceps-stretch",
      "slug": "wall-supported-quadriceps-stretch",
      "name": "Wall-supported quadriceps stretch",
      "category": "Static stretching",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Bend right knee, hold right ankle behind with right hand, bring heel toward buttock comfortably.",
        "Knees close, pelvis neutral, torso upright.",
        "Hold then gently lower right foot.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-supported-quadriceps-stretch-58e4400edb12.gif?alt=media&token=f286f0f2-c790-4fbb-ae6b-71cf0ccd208d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wall-supported-quadriceps-stretch-9882ca9e4938.png?alt=media&token=52e6e8d3-99d0-4592-8b3c-4888cda5ae24",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-supported-quadriceps-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3bcb72d76de09247fa99dc262e317ad1ac0d23e7a2e5c1ee99d6a5c220d5f51d",
          "bytes": 140146,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-supported-quadriceps-stretch-3bcb72d76de09247.gif?alt=media&token=92cbfe78-7aab-487d-8464-414fd0af8b51",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-supported-quadriceps-stretch-3bcb72d76de09247.gif",
          "verifiedAt": "2026-10-07T23:36:04.913Z"
        },
        "webp": {
          "sha256": "1e4d575b79cb0ebd10d266ead10b1808d7bc28ba96345f589d56c000341b7702",
          "bytes": 206292,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-supported-quadriceps-stretch-1e4d575b79cb0ebd.webp?alt=media&token=1f790cc8-8d5d-429b-958a-3a29db4c08cb",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-supported-quadriceps-stretch-1e4d575b79cb0ebd.webp",
          "verifiedAt": "2026-10-07T22:48:32.798Z"
        },
        "poster": {
          "sha256": "7e5b52c084457074de17af81e8968c867ffa3aaec2af917b921439adacd0a9b3",
          "bytes": 50042,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wall-supported-quadriceps-stretch-7e5b52c084457074.png?alt=media&token=e5e8719d-f288-4965-8aa1-66c3c9293913",
          "name": "trainai/creator-media/2026-10-07/trainai-wall-supported-quadriceps-stretch-7e5b52c084457074.png",
          "verifiedAt": "2026-10-07T22:48:32.633Z"
        }
      }
    },
    {
      "id": "trainai-wrist-circles",
      "slug": "wrist-circles",
      "name": "Wrist circles",
      "category": "Mobility",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "mobility",
      "measurement": "repetitions",
      "instructions": [
        "Stand upright feet still, elbows bent90 degrees beside ribs and forearms forward, hands loose.",
        "Circle both wrists gently through flexion, side bend, extension and opposite side.",
        "Forearms and upper arms nearly still; no large arm circles."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wrist-circles-ecfedb3298e9.gif?alt=media&token=c7117ff2-387f-4f9a-ad44-3cd4a67daa11",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wrist-circles-8fe87890994e.png?alt=media&token=4bb75fd2-f2b2-4cb7-a9a8-1bbb5a1b2dd0",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wrist-circles/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 2560,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "27cbc22e5b229e245edac62cc3575e1b7ce86fe0c99b27885784db9de4234f2c",
          "bytes": 282471,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-circles-27cbc22e5b229e24.gif?alt=media&token=251008e7-4ca4-46a1-82ce-ce169dcc224b",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-circles-27cbc22e5b229e24.gif",
          "verifiedAt": "2026-10-07T23:36:09.539Z"
        },
        "webp": {
          "sha256": "c58e833ab6f18454b0c63a1b841df98e45a73e77b53f5df3a91cc9622547d50d",
          "bytes": 444450,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-circles-c58e833ab6f18454.webp?alt=media&token=fbb21aa5-2171-48dd-876b-f576c6299736",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-circles-c58e833ab6f18454.webp",
          "verifiedAt": "2026-10-07T22:48:33.668Z"
        },
        "poster": {
          "sha256": "b499a7051ad6c3eaac5de2fc51a2b204bab5734eb7fdc9ec08e534a34cf10814",
          "bytes": 43449,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-circles-b499a7051ad6c3ea.png?alt=media&token=f222233c-c0a4-43e9-8edc-4e31a9a4f1a3",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-circles-b499a7051ad6c3ea.png",
          "verifiedAt": "2026-10-07T22:48:33.756Z"
        }
      }
    },
    {
      "id": "trainai-wrist-extensor-stretch",
      "slug": "wrist-extensor-stretch",
      "name": "Wrist extensor stretch",
      "category": "Static stretching",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Stand tall with right arm forward at shoulder height, palm facing down.",
        "Bend right wrist downward so fingertips point toward floor; left hand gently supports back of right hand.",
        "Hold light stretch then release.",
        "Upper arm stays steady.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wrist-extensor-stretch-9e2a965d838a.gif?alt=media&token=fead7181-8c2a-4f97-81cd-2bfb733f2c32",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wrist-extensor-stretch-5aeaa4f1009b.png?alt=media&token=e3f2bddb-df5b-47fc-a039-c5bdd98036bb",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wrist-extensor-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8cad37ebb371cbbe9decd9076ec954f635cc4e13b226f51423e4f95a650f177c",
          "bytes": 122808,
          "mimeType": "image/gif",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-extensor-stretch-8cad37ebb371cbbe.gif?alt=media&token=78478a2c-cd23-4c7c-82cb-686dc8da34dd",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-extensor-stretch-8cad37ebb371cbbe.gif",
          "verifiedAt": "2026-10-07T23:36:07.119Z"
        },
        "webp": {
          "sha256": "4d7165e0cd7fb0b5cab5bc9d113ab69d79aaafc5c81751592f8bbbb1fca26ef3",
          "bytes": 187676,
          "mimeType": "image/webp",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-extensor-stretch-4d7165e0cd7fb0b5.webp?alt=media&token=e6e100ef-53c7-4735-882a-ef529bb07a82",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-extensor-stretch-4d7165e0cd7fb0b5.webp",
          "verifiedAt": "2026-10-07T22:48:35.074Z"
        },
        "poster": {
          "sha256": "83333ea7990ed3b01330abf1b58c467058bc8bfb1097ae410d88c9265fa65b62",
          "bytes": 44237,
          "mimeType": "image/png",
          "width": 320,
          "height": 320,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-extensor-stretch-83333ea7990ed3b0.png?alt=media&token=e41ead5f-f858-4973-bfe1-d46da1a74532",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-extensor-stretch-83333ea7990ed3b0.png",
          "verifiedAt": "2026-10-07T22:48:34.993Z"
        }
      }
    },
    {
      "id": "trainai-wrist-flexor-stretch",
      "slug": "wrist-flexor-stretch",
      "name": "Wrist flexor stretch",
      "category": "Static stretching",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Stand tall with right arm forward at shoulder height, elbow softly straight, palm facing up.",
        "Use left hand gently across right fingers to guide right wrist backward, fingers down.",
        "Hold light stretch then release slightly.",
        "No forced elbow lock.",
        "Repeat on the other side with the same controlled range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wrist-flexor-stretch-353fd6706c1f.gif?alt=media&token=2680f6a2-1eb9-4a94-9bf5-df61892d3070",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v1%2Ftrainai-wrist-flexor-stretch-9d8e190c53d3.png?alt=media&token=b5810444-179f-474b-85fe-bd4e10a4f4e7",
      "aliases": [],
      "legacyIds": [],
      "pageUrl": "https://www.trainaiapp.com/exercises/wrist-flexor-stretch/",
      "mediaKind": "animated-demonstration",
      "frames": 16,
      "durationMs": 3200,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "03643c9dae2d1c8d6459bd86dadc5b85f7b3f8dc0c81bd7bf5f4f53583cdc5f1",
          "bytes": 126024,
          "mimeType": "image/gif",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-flexor-stretch-03643c9dae2d1c8d.gif?alt=media&token=44ab3e05-392e-424e-a4e6-477af697c62a",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-flexor-stretch-03643c9dae2d1c8d.gif",
          "verifiedAt": "2026-10-07T23:36:06.867Z"
        },
        "webp": {
          "sha256": "43dc3b5d004f7b28a8984d856b4e94824e964b1135f121fc39b5804392422e7f",
          "bytes": 185266,
          "mimeType": "image/webp",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-flexor-stretch-43dc3b5d004f7b28.webp?alt=media&token=0c0197b3-2a6f-4c39-949a-4d56384d7eb1",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-flexor-stretch-43dc3b5d004f7b28.webp",
          "verifiedAt": "2026-10-07T23:36:09.495Z"
        },
        "poster": {
          "sha256": "9fb21f8e8f53b3260ad3def9fef25f876dd35846efd318228d3d1fadf6f84d1f",
          "bytes": 43455,
          "mimeType": "image/png",
          "width": 352,
          "height": 352,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-wrist-flexor-stretch-9fb21f8e8f53b326.png?alt=media&token=4ee0e7c9-1d6b-429c-a30b-b516f331d01d",
          "name": "trainai/creator-media/2026-10-07/trainai-wrist-flexor-stretch-9fb21f8e8f53b326.png",
          "verifiedAt": "2026-10-07T23:36:08.235Z"
        }
      }
    },
    {
      "id": "trainai-russian-twist",
      "slug": "russian-twist",
      "name": "Russian twist",
      "category": "Bodyweight core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit with your knees bent, lean back slightly and brace your abdomen while keeping your spine long.",
        "Hold your hands together close to your chest. Keep your heels down for an easier variation, or lift them slightly if you can keep your balance.",
        "Turn your ribcage and shoulders a small, controlled distance to one side while your hips stay still.",
        "Return through the centre and turn the other way. Avoid swinging your arms or forcing the rotation."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-russian-twist-6b2b5ecbed62.gif?alt=media&token=33f94bdb-8c05-42e8-bf05-05b3c5b16530",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-russian-twist-e60d1324f799.png?alt=media&token=ab79f2ad-ea0b-48d4-9cfe-4cb107730920",
      "aliases": [
        "russian twist"
      ],
      "legacyIds": [
        "0687"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/russian-twist/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1600,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4d5a963acbb51bbb1d026dc46b1ee15932928b7c21c9212acb6e7f2eec1982f7",
          "bytes": 391395,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-russian-twist-4d5a963acbb51bbb.gif?alt=media&token=23ee21a0-356c-4212-859f-41d81ad7a453",
          "name": "trainai/creator-media/2026-10-07/trainai-russian-twist-4d5a963acbb51bbb.gif",
          "verifiedAt": "2026-10-07T23:36:13.954Z"
        },
        "webp": {
          "sha256": "da2d4d95d8391041f65e66c419cdd67b24f5982cf62b36e9140084bb16944166",
          "bytes": 651714,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-russian-twist-da2d4d95d8391041.webp?alt=media&token=523826b6-881a-4467-b557-7f03dfda17f8",
          "name": "trainai/creator-media/2026-10-07/trainai-russian-twist-da2d4d95d8391041.webp",
          "verifiedAt": "2026-10-07T23:36:15.494Z"
        },
        "poster": {
          "sha256": "c52f3c391619fed72158f9650293ae99179bf45ec348b74b7d4ef696ab0c2eb0",
          "bytes": 139500,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-russian-twist-c52f3c391619fed7.png?alt=media&token=1c85a4d2-07e3-4c6b-b8a1-82a1c9d6686d",
          "name": "trainai/creator-media/2026-10-07/trainai-russian-twist-c52f3c391619fed7.png",
          "verifiedAt": "2026-10-07T23:36:12.496Z"
        }
      }
    },
    {
      "id": "trainai-barbell-good-morning",
      "slug": "barbell-good-morning",
      "name": "Barbell good morning",
      "category": "Barbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "rack",
        "safeties"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set a light barbell securely across your upper back, below your neck, and grip it outside your shoulders.",
        "Stand with your feet about hip-width apart, soften your knees and brace your trunk.",
        "Push your hips back and hinge forward while keeping your spine neutral and the bar supported on your upper back. Stop before your back rounds.",
        "Drive your hips forward to return to standing. Keep your feet planted and avoid leaning backwards at the top."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-barbell-good-morning-a0cb65218d51.gif?alt=media&token=c88d7b9e-0e51-4dae-a5e9-db8f8a68cb74",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-barbell-good-morning-c11111a685ac.png?alt=media&token=b8b775bb-0aba-4c18-8d4d-73dc59b0578c",
      "aliases": [
        "barbell good morning"
      ],
      "legacyIds": [
        "0044"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-good-morning/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1660,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "692448b72154d42476500e6c33e58d0233b0afd72d3511c21a2747624fc19864",
          "bytes": 210335,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-good-morning-692448b72154d424.gif?alt=media&token=a149db32-2d20-4720-9818-acfa1cb01b2a",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-good-morning-692448b72154d424.gif",
          "verifiedAt": "2026-10-07T23:36:16.044Z"
        },
        "webp": {
          "sha256": "420b9c8bea51c3b74af08f6fcaf60cd4e7bda47290ea8ce9ea2f27e49e9ee96d",
          "bytes": 311438,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-good-morning-420b9c8bea51c3b7.webp?alt=media&token=ad345183-8b5b-4e42-87f5-2be00d911b24",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-good-morning-420b9c8bea51c3b7.webp",
          "verifiedAt": "2026-10-07T23:36:16.585Z"
        },
        "poster": {
          "sha256": "c5152d1f7d84934cc7feaf527579addccb1700e0eae9a9774c322f0387aae5cf",
          "bytes": 69785,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-barbell-good-morning-c5152d1f7d84934c.png?alt=media&token=f7f0b94e-9218-45dc-a22b-79362f0fcfde",
          "name": "trainai/creator-media/2026-10-07/trainai-barbell-good-morning-c5152d1f7d84934c.png",
          "verifiedAt": "2026-10-07T23:36:16.522Z"
        }
      }
    },
    {
      "id": "trainai-seated-band-hip-abduction",
      "slug": "seated-band-hip-abduction",
      "name": "Seated band hip abduction",
      "category": "Bands",
      "target": "abductors",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "mini-band",
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on a stable chair or bench with a mini band around your thighs, just above your knees.",
        "Keep your feet on the floor and your pelvis steady.",
        "Move your knees apart against the band through a comfortable range without leaning your trunk.",
        "Bring your knees back under control. Keep tension on the band without letting your knees snap inward."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-seated-band-hip-abduction-2d47ce611353.gif?alt=media&token=cc519177-97f3-4a18-9512-eb47453bc745",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-seated-band-hip-abduction-3da56fd4bc52.png?alt=media&token=668e4048-0ae0-4aa0-a431-cda76e8d6f2e",
      "aliases": [
        "resistance band seated hip abduction"
      ],
      "legacyIds": [
        "3006"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-band-hip-abduction/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 2020,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b7a41279987e1cb384a5fcd4bd7114b451efadba2680aaaa815e12266bf8115d",
          "bytes": 424238,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-band-hip-abduction-b7a41279987e1cb3.gif?alt=media&token=40f442cf-8fa6-432e-b379-91906a5867dd",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-band-hip-abduction-b7a41279987e1cb3.gif",
          "verifiedAt": "2026-10-07T23:36:20.639Z"
        },
        "webp": {
          "sha256": "c390fa7e3254aec6ecd6184062e4ea0276ef9c2a5d649d5f296d15a2a00b671e",
          "bytes": 677164,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-band-hip-abduction-c390fa7e3254aec6.webp?alt=media&token=e0207e99-6f8e-4989-bded-8df7d9f1a723",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-band-hip-abduction-c390fa7e3254aec6.webp",
          "verifiedAt": "2026-10-07T23:36:22.842Z"
        },
        "poster": {
          "sha256": "097217f38f7a7e816416b17e55265b976c8beb8491e22c4ee547b5d72c9b90f0",
          "bytes": 119854,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-seated-band-hip-abduction-097217f38f7a7e81.png?alt=media&token=9c15dbf8-36f5-494e-8b51-c052cfb988f6",
          "name": "trainai/creator-media/2026-10-07/trainai-seated-band-hip-abduction-097217f38f7a7e81.png",
          "verifiedAt": "2026-10-07T23:36:18.321Z"
        }
      }
    },
    {
      "id": "trainai-kneeling-ab-wheel-rollout",
      "slug": "kneeling-ab-wheel-rollout",
      "name": "Kneeling ab-wheel rollout",
      "category": "Core equipment",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "wheel roller",
      "requiredEquipment": [
        "ab-wheel"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Kneel and grip both handles of the ab wheel with the wheel close to your knees and below your shoulders.",
        "Brace your abdomen and keep your ribs down as you roll the wheel forward slowly.",
        "Move your shoulders and hips forward together. Stop within a range where your lower back stays controlled; you do not need to reach the floor.",
        "Draw the wheel back toward you while maintaining your brace and keeping your knees planted."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-kneeling-ab-wheel-rollout-7d888fba8d42.gif?alt=media&token=5e84968f-1a38-4ad6-863b-522ed661c277",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-kneeling-ab-wheel-rollout-46d6cb132e9c.png?alt=media&token=18650007-956a-414b-8708-582b55b0e3e8",
      "aliases": [
        "wheel rollerout"
      ],
      "legacyIds": [
        "0857"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/kneeling-ab-wheel-rollout/",
      "mediaKind": "animated-demonstration",
      "frames": 10,
      "durationMs": 1980,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0813496310766824fcbbe91cebd7399cae2f0f0aeabd7b737f24b4b28201fcc1",
          "bytes": 362734,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kneeling-ab-wheel-rollout-0813496310766824.gif?alt=media&token=b89dee06-f7db-42e2-8035-6c7ce2ffca76",
          "name": "trainai/creator-media/2026-10-07/trainai-kneeling-ab-wheel-rollout-0813496310766824.gif",
          "verifiedAt": "2026-10-07T23:36:21.828Z"
        },
        "webp": {
          "sha256": "11cbdbd911bc76ede31872c30aae2831fb0360e93dac362467f7d229cd07f901",
          "bytes": 593480,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kneeling-ab-wheel-rollout-11cbdbd911bc76ed.webp?alt=media&token=3848359b-f483-4fea-bb28-5eb9d6d51522",
          "name": "trainai/creator-media/2026-10-07/trainai-kneeling-ab-wheel-rollout-11cbdbd911bc76ed.webp",
          "verifiedAt": "2026-10-07T23:36:25.967Z"
        },
        "poster": {
          "sha256": "fedd145596fabda183f84642353e7b260dd12b6003b30a41561c0117ea137eb2",
          "bytes": 108582,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-kneeling-ab-wheel-rollout-fedd145596fabda1.png?alt=media&token=a5ade2cb-205d-4e5e-a74d-1cce75e14650",
          "name": "trainai/creator-media/2026-10-07/trainai-kneeling-ab-wheel-rollout-fedd145596fabda1.png",
          "verifiedAt": "2026-10-07T23:36:23.083Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0977",
      "slug": "single-arm-band-front-raise",
      "name": "Single-arm band front raise",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a resistance band to a rated low anchor behind you and hold its handle in one hand.",
        "Stand tall with your feet planted and your elbow slightly bent. Keep your other hand at your hip.",
        "Raise your working arm forward to about shoulder height without leaning back or shrugging.",
        "Lower slowly while keeping the same soft elbow bend. Complete the repetitions, then change sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0977-f3e9ea2f9911.gif?alt=media&token=7d96939d-3258-49f6-be83-891d5ce8bcec",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0977-480c111ff6b9.png?alt=media&token=c641c82f-23d7-49bb-bef6-d0d79c75d953",
      "aliases": [
        "band front lateral raise"
      ],
      "legacyIds": [
        "0977"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-arm-band-front-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1620,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fcec820e43cdb05662a88ae67662014a4c73979790e0917eed89d0a19022a7c1",
          "bytes": 197145,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0977-fcec820e43cdb056.gif?alt=media&token=eb964946-e4d7-4237-bcf9-439eb3d5a496",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0977-fcec820e43cdb056.gif",
          "verifiedAt": "2026-10-07T23:36:24.182Z"
        },
        "webp": {
          "sha256": "0be0d69bb6bf80dcc940c44b1e5866fcaa6608c998bb82e462d1391c8e560a6f",
          "bytes": 319722,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0977-0be0d69bb6bf80dc.webp?alt=media&token=4a6fdf96-f8da-438e-afdf-4846a670f2cd",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0977-0be0d69bb6bf80dc.webp",
          "verifiedAt": "2026-10-07T23:36:26.332Z"
        },
        "poster": {
          "sha256": "25aaf24e1243c3406efcd4435d53f7ab0204c3bf273fc5860c409d2142243a03",
          "bytes": 90499,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0977-25aaf24e1243c340.png?alt=media&token=b1213ecb-0edf-4ac8-8b35-3121d282b104",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0977-25aaf24e1243c340.png",
          "verifiedAt": "2026-10-07T23:36:25.514Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0978",
      "slug": "band-front-raise",
      "name": "Band front raise",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand securely on the middle of a long resistance band and hold one end in each hand in front of your thighs.",
        "Brace your trunk, relax your shoulders and keep a small bend in your elbows.",
        "Raise both arms forward together to about shoulder height. Keep your feet and torso still.",
        "Lower both hands slowly to the starting position without allowing the band to snap back."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0978-c5632471edef.gif?alt=media&token=51635eea-773b-4101-8c93-e00e51c1fd37",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0978-b9f5ff741500.png?alt=media&token=c1f93822-39ce-4782-9c93-e92b3d3e4e1c",
      "aliases": [
        "band front raise"
      ],
      "legacyIds": [
        "0978"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-front-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1620,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "beacef33e7c939363d790568837680f329e939e342ad048713b466a445c99c72",
          "bytes": 189975,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0978-beacef33e7c93936.gif?alt=media&token=401c85eb-507d-4c5f-ae57-8f3693cfd163",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0978-beacef33e7c93936.gif",
          "verifiedAt": "2026-10-07T23:36:27.242Z"
        },
        "webp": {
          "sha256": "8cb87df0a02a586f9d65b5de91270c6a77afa13f2d5d7000012898d95e96813c",
          "bytes": 307880,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0978-8cb87df0a02a586f.webp?alt=media&token=56e25291-1eb5-41d6-a839-4788d7ea5934",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0978-8cb87df0a02a586f.webp",
          "verifiedAt": "2026-10-07T23:36:27.509Z"
        },
        "poster": {
          "sha256": "a202c628eead86f5086a5f99eefcd9b8891e9961ce5472cd4de118a7d4da62d2",
          "bytes": 87512,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0978-a202c628eead86f5.png?alt=media&token=14b1766c-c1de-416b-8793-e59b7ae4d9fa",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0978-a202c628eead86f5.png",
          "verifiedAt": "2026-10-07T23:36:27.333Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0994",
      "slug": "seated-band-wrist-extension",
      "name": "Seated band wrist extension",
      "category": "Bands",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable seat and secure a light resistance band under your foot. Hold the end in the hand on that side.",
        "Rest that forearm on your thigh with your palm facing down and your hand just beyond your knee. Use your other hand to steady the forearm.",
        "Keeping your forearm supported, raise the back of your hand through a small comfortable range by extending only the wrist.",
        "Lower your hand slowly. Keep your grip closed and use light resistance; repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0994-0661e4358bf1.gif?alt=media&token=2af17526-1bac-4b8d-93bc-cf96ac068a64",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0994-9d4f70b36cf3.png?alt=media&token=1a77dd8e-42c9-4751-a265-538e01c8efa4",
      "aliases": [
        "band reverse wrist curl"
      ],
      "legacyIds": [
        "0994"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-band-wrist-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1450,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "85a58068058392b925d2d5f71aa13dee7816668e06fd3d42d21dea7d57979667",
          "bytes": 198164,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0994-85a58068058392b9.gif?alt=media&token=8b234743-6b96-404c-9fd9-445217f64c86",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0994-85a58068058392b9.gif",
          "verifiedAt": "2026-10-07T23:36:28.636Z"
        },
        "webp": {
          "sha256": "70a352b4985b463541771099994034e1049cd54855ded70ef28aa8aae4e69e40",
          "bytes": 311958,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0994-70a352b4985b4635.webp?alt=media&token=80d64798-2cc3-42f3-aa74-86a71aa9e48c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0994-70a352b4985b4635.webp",
          "verifiedAt": "2026-10-07T23:36:29.392Z"
        },
        "poster": {
          "sha256": "b560127fd9582f57d05504d30591d2a59f2061d7d97a411bd09b60bf1ae30409",
          "bytes": 137070,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0994-b560127fd9582f57.png?alt=media&token=f695412f-dc11-4790-883f-f4016aa54953",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0994-b560127fd9582f57.png",
          "verifiedAt": "2026-10-07T23:36:30.318Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1016",
      "slug": "seated-band-wrist-curl",
      "name": "Seated band wrist curl",
      "category": "Bands",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable seat and secure a light resistance band under your foot. Hold its end in the hand on the same side.",
        "Support your forearm on your thigh with your palm facing up and your hand just beyond your knee. Keep your other hand on the forearm for stability.",
        "Curl your palm upward by bending only your wrist, keeping your forearm supported and your fingers around the band.",
        "Lower through a small comfortable range under control. Repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1016-5fb48fae55a9.gif?alt=media&token=15194b8e-81f2-42fd-8149-c4f837d08058",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1016-22243e463c5a.png?alt=media&token=5d39941d-a357-4ee5-ae17-640ac2c09408",
      "aliases": [
        "band wrist curl"
      ],
      "legacyIds": [
        "1016"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-band-wrist-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1680,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fb4610b72339bc599f501741ed64a703e7d22e94c1c83f0b528924725c47ca76",
          "bytes": 260602,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1016-fb4610b72339bc59.gif?alt=media&token=e69378ce-01d2-434d-b7e9-da7c7018486c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1016-fb4610b72339bc59.gif",
          "verifiedAt": "2026-10-07T23:36:33.164Z"
        },
        "webp": {
          "sha256": "86e7a0058f44d8b434ed2962bb8220753b0c717eb90003d46e575df5c507a6fd",
          "bytes": 415060,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1016-86e7a0058f44d8b4.webp?alt=media&token=d979fc1a-2d7e-46bc-809a-21cd452e463e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1016-86e7a0058f44d8b4.webp",
          "verifiedAt": "2026-10-07T23:36:33.399Z"
        },
        "poster": {
          "sha256": "e93213a3481c5ef35906276de3d79a2e7da54a14a3ad7753fe4b31ef749527d3",
          "bytes": 121686,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1016-e93213a3481c5ef3.png?alt=media&token=1c8126e1-2476-438c-a88a-28571c8fbe78",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1016-e93213a3481c5ef3.png",
          "verifiedAt": "2026-10-07T23:36:32.791Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1403",
      "slug": "standing-neck-side-stretch",
      "name": "Standing neck side stretch",
      "category": "Stretching",
      "target": "levator scapulae",
      "bodyPart": "neck",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Stand tall with your shoulders relaxed and your hands resting loosely behind your hips.",
        "Keeping your eyes facing forward, gently tilt one ear toward the shoulder on that side without raising the shoulder.",
        "Stop at a mild comfortable stretch and breathe normally. Do not pull on your head or force the range.",
        "Return to the middle slowly, then repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1403-055e5f6d76a8.gif?alt=media&token=7fa31ff8-5f2b-4cf3-b5c4-548326f74f58",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1403-733c2daa6434.png?alt=media&token=4b59ca07-f0af-4a84-bca7-86bae5a4b747",
      "aliases": [
        "neck side stretch"
      ],
      "legacyIds": [
        "1403"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-neck-side-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "0140cf1f60981b271ce25c374a5434828100f64f1baa70b384fd03af0a3f4bde",
          "bytes": 28444,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1403-0140cf1f60981b27.gif?alt=media&token=f20c5daa-5de9-44a3-b865-876728e4c4cb",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1403-0140cf1f60981b27.gif",
          "verifiedAt": "2026-10-07T23:36:33.605Z"
        },
        "webp": {
          "sha256": "b1200113bd22569c6b34190683ca1dae7a27c9e2ffa5f5784aaea99052df21b5",
          "bytes": 39864,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1403-b1200113bd22569c.webp?alt=media&token=ad505c14-71f4-4954-aca1-df5489dc87fc",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1403-b1200113bd22569c.webp",
          "verifiedAt": "2026-10-07T23:36:33.948Z"
        },
        "poster": {
          "sha256": "e3b95f5b724cc5633cd1def42ad8fdf36df7b9223e95268a5b64cddbcb9c4816",
          "bytes": 72101,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1403-e3b95f5b724cc563.png?alt=media&token=94997398-04ad-469d-9140-3157bd2acf3f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1403-e3b95f5b724cc563.png",
          "verifiedAt": "2026-10-07T23:36:34.741Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1511",
      "slug": "supine-hamstring-stretch",
      "name": "Supine hamstring stretch",
      "category": "Stretching",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie on your back with your head supported on the floor and one leg resting long.",
        "Raise the other thigh and hold behind it with both hands, keeping your shoulders and pelvis relaxed.",
        "Gently straighten the raised knee only as far as comfortable until you feel a mild stretch behind the thigh. A small knee bend is fine.",
        "Hold without bouncing, then bend the knee to release and switch legs."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1511-e5df0eb8a776.gif?alt=media&token=a8773f2a-1c4f-4e85-b3cf-99524ca6a798",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1511-a1229867ef20.png?alt=media&token=0c2bfcac-0c63-43be-bfc3-380c5739773f",
      "aliases": [
        "hamstring stretch"
      ],
      "legacyIds": [
        "1511"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/supine-hamstring-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "62e2af1984c714dfd25e8887f70f46ad32ad62916f4dde29d81574169621ef41",
          "bytes": 29081,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1511-62e2af1984c714df.gif?alt=media&token=414e88c7-3cda-4600-9a11-4cbca07ffea0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1511-62e2af1984c714df.gif",
          "verifiedAt": "2026-10-07T23:36:34.333Z"
        },
        "webp": {
          "sha256": "e734d576df6d3dff9506b9136d48bcef2c8064ae282031c641ab611697fef1b4",
          "bytes": 41552,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1511-e734d576df6d3dff.webp?alt=media&token=618c7dca-af37-463d-a423-062c3ec6168d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1511-e734d576df6d3dff.webp",
          "verifiedAt": "2026-10-07T23:36:34.811Z"
        },
        "poster": {
          "sha256": "49dbe2aa594d7d1ff1d1a8b3e28138df94d91d45942bd414568677bc447fdf1f",
          "bytes": 78279,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1511-49dbe2aa594d7d1f.png?alt=media&token=d1f87652-db1b-472f-b5bc-553c61e5b21c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1511-49dbe2aa594d7d1f.png",
          "verifiedAt": "2026-10-07T23:36:35.626Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1512",
      "slug": "quadruped-quadriceps-stretch",
      "name": "Quadruped quadriceps stretch",
      "category": "Stretching",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Begin on hands and knees with your supporting hand beneath your shoulder and your supporting knee beneath your hip.",
        "Bend the other knee and reach back with the hand on that side to hold the ankle or shoe comfortably.",
        "Keep your trunk steady and gently bring the heel toward your buttock until you feel a mild stretch at the front of the thigh. Avoid arching your lower back.",
        "Hold while breathing normally, release the foot slowly and return to all fours before switching sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1512-3de6674d1b78.gif?alt=media&token=eafa9633-2a71-4073-8253-a6bc4281b824",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1512-9b98850081e3.png?alt=media&token=2499275e-1f11-4e67-897d-3b1a0cde485b",
      "aliases": [
        "all fours squad stretch"
      ],
      "legacyIds": [
        "1512"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/quadruped-quadriceps-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8727fa29e9cce904f95c71cd1b6ac63d3252f0e6e401190af543beafe77886f0",
          "bytes": 50647,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1512-8727fa29e9cce904.gif?alt=media&token=a53fd2d5-f2f2-4c0d-a247-d89360ee926f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1512-8727fa29e9cce904.gif",
          "verifiedAt": "2026-10-07T23:36:36.135Z"
        },
        "webp": {
          "sha256": "2e4c92259e78ce876ee805490d2af615bedb8488324de59e02b9fecf65e169ed",
          "bytes": 76076,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1512-2e4c92259e78ce87.webp?alt=media&token=496e0469-57f0-40d9-af1e-f6011242784c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1512-2e4c92259e78ce87.webp",
          "verifiedAt": "2026-10-07T23:36:36.490Z"
        },
        "poster": {
          "sha256": "a482681712c24bf564c556940cab90de195f17fe1c2846a336fe09f2a1baaf34",
          "bytes": 137225,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1512-a482681712c24bf5.png?alt=media&token=b0908e34-21d4-4e5d-be81-6490e91a36f4",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1512-a482681712c24bf5.png",
          "verifiedAt": "2026-10-07T23:36:36.907Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1405",
      "slug": "incline-bench-lat-and-chest-stretch",
      "name": "Incline-bench lat and chest stretch",
      "category": "Stretching",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "bench",
      "requiredEquipment": [
        "adjustable-bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Secure an adjustable bench with its backrest raised and stand facing the raised end. Place both hands on the top edge.",
        "Step back, soften your knees and hinge at your hips while keeping your hands supported.",
        "Allow your chest to lower gently between your arms until you feel a comfortable stretch through your sides and chest. Keep your neck aligned with your back.",
        "Hold without bouncing, then walk your feet forward and rise slowly. The bench must stay stable throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1405-c380ba41aa93.gif?alt=media&token=70ee1a79-64a7-46a9-8304-7f36ce18c2d0",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1405-0b705480133d.png?alt=media&token=d4f50c9e-97fd-4e24-9d05-ab25503b40dc",
      "aliases": [
        "back pec stretch"
      ],
      "legacyIds": [
        "1405"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-bench-lat-and-chest-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "89f30fc34ceeb3aa75b923740eefef79d18416c1f3ace27bd2f8038648421ecb",
          "bytes": 32423,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1405-89f30fc34ceeb3aa.gif?alt=media&token=b62cf1a4-b67f-4711-959e-2711c5aa047c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1405-89f30fc34ceeb3aa.gif",
          "verifiedAt": "2026-10-07T23:36:36.876Z"
        },
        "webp": {
          "sha256": "37018df44ddaaa9d0af9d07202419973ef072db5bc201ba73d808e96c8734321",
          "bytes": 49810,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1405-37018df44ddaaa9d.webp?alt=media&token=197dded5-b7fb-4a74-ba28-44da99a7b5e1",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1405-37018df44ddaaa9d.webp",
          "verifiedAt": "2026-10-07T23:36:38.027Z"
        },
        "poster": {
          "sha256": "7ff533bcec42264060c5f927bbddcd9a309c15d33d4106c725ac802bd35f5c1e",
          "bytes": 92521,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1405-7ff533bcec422640.png?alt=media&token=a764ca61-350f-49c3-ab91-21dc0c3535ae",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1405-7ff533bcec422640.png",
          "verifiedAt": "2026-10-07T23:36:38.802Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1371",
      "slug": "seated-barbell-calf-raise",
      "name": "Seated barbell calf raise",
      "category": "Calf strength",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "bench",
        "stable-step"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable bench with the balls of both feet on a low stable block and your heels free to move.",
        "Rest a light bar across your thighs just above the knees and hold it securely with both hands. Use padding if needed for comfort.",
        "Raise both heels by pressing through your forefeet. Your knees and the supported bar rise a short distance while your hips stay seated.",
        "Lower your heels slowly through a comfortable range. Keep your forefeet in contact with the block and avoid bouncing."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1371-bd6c0ba241ef.gif?alt=media&token=df86bfe4-c636-499f-884d-0b1af3094a1f",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1371-2394e6d0d3c9.png?alt=media&token=23b16411-4829-4f12-95c6-95933c3b1018",
      "aliases": [
        "barbell seated calf raise"
      ],
      "legacyIds": [
        "1371"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-barbell-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1580,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7bdced1fa0b8f82e266e0b15d19c075a7847f566a2aa75257f31b72bbfeb26f6",
          "bytes": 263651,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1371-7bdced1fa0b8f82e.gif?alt=media&token=7b9b2352-7764-47d2-8d02-9ff1f152c82f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1371-7bdced1fa0b8f82e.gif",
          "verifiedAt": "2026-10-07T23:36:40.374Z"
        },
        "webp": {
          "sha256": "0c6dfff2f8364970a2acb18ccdff4b6570e66d043258659a955705a071120a91",
          "bytes": 426902,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1371-0c6dfff2f8364970.webp?alt=media&token=05615155-0119-4948-aeea-619cd7c54d8f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1371-0c6dfff2f8364970.webp",
          "verifiedAt": "2026-10-07T23:36:44.149Z"
        },
        "poster": {
          "sha256": "a783daead0634c48e06e9a7c94ce4481966244eacc87f1915a80100a938cfe84",
          "bytes": 126575,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1371-a783daead0634c48.png?alt=media&token=e7b0943f-06aa-471b-a413-0ac8897f670e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1371-a783daead0634c48.png",
          "verifiedAt": "2026-10-07T23:36:42.306Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1379",
      "slug": "seated-dumbbell-calf-raise",
      "name": "Seated dumbbell calf raise",
      "category": "Calf strength",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "bench",
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable bench with the balls of both feet on a low block and your heels free.",
        "Rest one end of a dumbbell on each thigh just above the knee and hold both handles securely.",
        "Lift your heels through a small comfortable range, allowing your thighs and dumbbells to rise with the movement. Keep your hips seated.",
        "Lower under control, keeping the weights supported on your thighs and your forefeet on the block."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1379-d782b94a0cd6.gif?alt=media&token=2ed28a5d-12f3-4776-89b1-09675de22a18",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1379-571299c9e311.png?alt=media&token=bb140a3b-c287-4de6-9e83-ac6becd2f170",
      "aliases": [
        "dumbbell seated calf raise"
      ],
      "legacyIds": [
        "1379"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-dumbbell-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1580,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d88bb4d309b3bc941401b492932470aee50079999dfca234af50c8fba71943e6",
          "bytes": 266578,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1379-d88bb4d309b3bc94.gif?alt=media&token=5ad678b9-6901-4fdc-951c-9eececedd877",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1379-d88bb4d309b3bc94.gif",
          "verifiedAt": "2026-10-07T23:36:47.865Z"
        },
        "webp": {
          "sha256": "0f82bfa4d43508e95f6e91e6feb4f95120c33d84382f87ee96ecc9ffe0e15a16",
          "bytes": 453128,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1379-0f82bfa4d43508e9.webp?alt=media&token=f34bc082-4e01-4e2a-8b07-026874f16b07",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1379-0f82bfa4d43508e9.webp",
          "verifiedAt": "2026-10-07T23:36:53.125Z"
        },
        "poster": {
          "sha256": "88b6891c1624399e1fb4378dd5a8cecb4ae6ef3bb60f7caa21ca7cc4609bd34f",
          "bytes": 133590,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1379-88b6891c1624399e.png?alt=media&token=cf590e58-66c4-4f3f-8cd2-07b83e6c3641",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1379-88b6891c1624399e.png",
          "verifiedAt": "2026-10-07T23:36:48.845Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0284",
      "slug": "supported-donkey-calf-raise",
      "name": "Supported donkey calf raise",
      "category": "Calf strength",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "body weight",
      "requiredEquipment": [
        "bench",
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Place the balls of both feet securely on a low stable step with your heels free to move.",
        "Hinge forward at your hips and place both hands on a stable bench, keeping your back long and your knees soft.",
        "Raise your heels by pressing through your forefeet while keeping your hands supported. Let your hips rise naturally a small distance.",
        "Lower the heels through a comfortable range without bouncing or shifting the supports."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0284-1b79f32c27a2.gif?alt=media&token=f24279ba-9ac7-44c5-b690-cbae8bd7283d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0284-7debfd9e25a7.png?alt=media&token=3f9bf520-a4f0-4d65-96d0-65429d8f0442",
      "aliases": [
        "donkey calf raise"
      ],
      "legacyIds": [
        "0284"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-donkey-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1580,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "89d8169a5570cfc5799445464b983990f9fbed9f443bb4685bdb3e681fbc0d4a",
          "bytes": 230782,
          "mimeType": "image/gif",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0284-89d8169a5570cfc5.gif?alt=media&token=d55b5a76-720f-49be-a0f0-fd3716762468",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0284-89d8169a5570cfc5.gif",
          "verifiedAt": "2026-10-07T23:36:53.760Z"
        },
        "webp": {
          "sha256": "4e549b29eb765ee7263ed6f95989674dc03038d41538665360f0fc7e09418f55",
          "bytes": 363706,
          "mimeType": "image/webp",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0284-4e549b29eb765ee7.webp?alt=media&token=e6b34189-8a8f-4c0e-a072-5a737199f128",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0284-4e549b29eb765ee7.webp",
          "verifiedAt": "2026-10-07T23:36:57.970Z"
        },
        "poster": {
          "sha256": "76bf912b18190922dc0b325a6bbaa718330f6edd644057733afeead0c38665ed",
          "bytes": 110126,
          "mimeType": "image/png",
          "width": 432,
          "height": 432,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0284-76bf912b18190922.png?alt=media&token=c5634915-0a0a-4e5e-9227-fce6b00d983e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0284-76bf912b18190922.png",
          "verifiedAt": "2026-10-07T23:36:56.251Z"
        }
      }
    },
    {
      "id": "trainai-legacy-3544",
      "slug": "incline-forearm-side-plank",
      "name": "Incline forearm side plank",
      "category": "Bodyweight core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "bench",
      "requiredEquipment": [
        "bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Place one forearm securely on a stable bench with your elbow beneath your shoulder.",
        "Extend your legs sideways and stack or stagger your feet on the floor for balance.",
        "Lift your hips until your head, trunk and legs form one long line. Keep the top arm resting along your side.",
        "Hold while breathing normally, then lower with control and switch sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3544-b92536599635.gif?alt=media&token=7421eaa5-cdd9-498b-8a4c-bdefaa4dc577",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3544-217bbdb19a83.png?alt=media&token=1c0f6e6a-8ee4-4073-a533-b5aafff47864",
      "aliases": [
        "bodyweight incline side plank"
      ],
      "legacyIds": [
        "3544"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-forearm-side-plank/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "24e0f90f5963490c7e3edd888a40cdcab2bb54dc5c0e368d02497fc8efb4e669",
          "bytes": 40295,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3544-24e0f90f5963490c.gif?alt=media&token=79fef16f-e5eb-47d0-8f89-26104643765a",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3544-24e0f90f5963490c.gif",
          "verifiedAt": "2026-10-07T23:36:54.843Z"
        },
        "webp": {
          "sha256": "959a9ccf22c7e753d2da46f06c8bcf8081738ab62d64bae703fd248ffaed4bdc",
          "bytes": 58118,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3544-959a9ccf22c7e753.webp?alt=media&token=ff095444-301b-488c-b3a9-93d0c31acf6f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3544-959a9ccf22c7e753.webp",
          "verifiedAt": "2026-10-07T23:36:56.138Z"
        },
        "poster": {
          "sha256": "1a82511a579019e3d737e762445c65d431d61d9819c059f91a5a61044fa98a8b",
          "bytes": 105400,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3544-1a82511a579019e3.png?alt=media&token=519c63ab-5d5c-4d84-965e-d21b663269cb",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3544-1a82511a579019e3.png",
          "verifiedAt": "2026-10-07T23:36:57.978Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0001",
      "slug": "three-quarter-sit-up",
      "name": "Three-quarter sit-up",
      "category": "Bodyweight core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on your back with your knees bent and your feet flat on the floor. Rest your fingertips lightly near your temples without pulling on your head.",
        "Brace your abdomen and curl your upper body toward your thighs, rising partway toward sitting.",
        "Keep your feet planted and your neck in line with your trunk. Use a controlled range without jerking.",
        "Lower slowly until your shoulders are close to the floor, then repeat."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0001-6654f3865312.gif?alt=media&token=416b9dff-c14f-4bfd-843b-f40121350411",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0001-91113c538578.png?alt=media&token=67b20bd7-59bc-49ce-973f-19e60be777f7",
      "aliases": [
        "3/4 sit-up"
      ],
      "legacyIds": [
        "0001"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/three-quarter-sit-up/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c83aea04e779fc20b2a38eb3cf7fb1339bd4792991a67d9b4096c190699a3507",
          "bytes": 210472,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0001-c83aea04e779fc20.gif?alt=media&token=e826ce9a-dc55-4d4b-9050-0f38a72ce365",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0001-c83aea04e779fc20.gif",
          "verifiedAt": "2026-10-07T23:36:59.374Z"
        },
        "webp": {
          "sha256": "bc356b7ce8e97b210760da5be3d5cc87415fa97d91798693eab1916bb804adec",
          "bytes": 325056,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0001-bc356b7ce8e97b21.webp?alt=media&token=acb1ee80-5502-4ca7-8257-74cb21be7a52",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0001-bc356b7ce8e97b21.webp",
          "verifiedAt": "2026-10-07T23:37:02.939Z"
        },
        "poster": {
          "sha256": "842e2208abd0bb1b786ad7a94bab0cc6ec6aaa2ed3a19b64c8a036b276a8e34f",
          "bytes": 85242,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0001-842e2208abd0bb1b.png?alt=media&token=0d4fc44d-b693-4cfa-8fc9-eaed7f87f6e9",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0001-842e2208abd0bb1b.png",
          "verifiedAt": "2026-10-07T23:37:00.256Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1774",
      "slug": "side-plank-with-hip-abduction",
      "name": "Side plank with hip abduction",
      "category": "Bodyweight core",
      "target": "abductors",
      "bodyPart": "upper legs",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set up in a side plank with your supporting elbow beneath your shoulder and your lower leg extended. Rest your top hand on your hip.",
        "Keep your hips lifted and your trunk steady as you raise the top leg a small distance away from the lower leg.",
        "Keep the working knee comfortably straight and avoid rolling your pelvis backward.",
        "Lower the top leg with control, complete your repetitions, then change sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1774-4f332cfbd0fc.gif?alt=media&token=1fe7bc82-80cc-4eea-b185-a68f44fcc65c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1774-2e297dcfccb5.png?alt=media&token=1359f46b-11f2-4449-826d-e37e70f84a2a",
      "aliases": [
        "side bridge hip abduction"
      ],
      "legacyIds": [
        "1774"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/side-plank-with-hip-abduction/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2972102738e52bf0cfa08d2afb2b21aa5bdebf84c62f0cbffca6f64d5e12962e",
          "bytes": 173761,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1774-2972102738e52bf0.gif?alt=media&token=f21b131f-9362-4adc-91d6-e797b23a92ed",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1774-2972102738e52bf0.gif",
          "verifiedAt": "2026-10-07T23:37:03.479Z"
        },
        "webp": {
          "sha256": "9dbf2e1af1c46f8a31b1da8edaa0ee2d8ea191a12e2a70572bce5915645e32fe",
          "bytes": 276320,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1774-9dbf2e1af1c46f8a.webp?alt=media&token=11cd14da-2f34-4105-9cba-bcaedcdd66cb",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1774-9dbf2e1af1c46f8a.webp",
          "verifiedAt": "2026-10-07T23:37:02.956Z"
        },
        "poster": {
          "sha256": "b16097bbde536c51f370ac3700cca4007e454da9f0fbb089e08f1127db9fdb4d",
          "bytes": 78008,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1774-b16097bbde536c51.png?alt=media&token=86f7eb63-8254-43aa-8776-e0d147d83ee8",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1774-b16097bbde536c51.png",
          "verifiedAt": "2026-10-07T23:37:03.799Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0464",
      "slug": "forearm-plank-rotation",
      "name": "Forearm plank rotation",
      "category": "Bodyweight core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Start in a forearm plank with your elbows below your shoulders and your abdomen braced.",
        "Rotate your chest and pelvis together toward one side while staying supported through the lower forearm. Allow your feet to pivot onto their edges.",
        "Reach the top arm upward while keeping your hips lifted and your trunk long.",
        "Return your forearm to the floor with control and repeat. Complete the movement on both sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0464-f5924d37609f.gif?alt=media&token=b0aa087a-a246-4bfb-b5b4-d1f5e98c9620",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0464-fdaea9159752.png?alt=media&token=ecf2d4ae-fedb-4f88-88cd-86da36e5a029",
      "aliases": [
        "front plank with twist"
      ],
      "legacyIds": [
        "0464"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/forearm-plank-rotation/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "21a3ab364f74487e5cf6eb219707368756d3b7b0d1dd139d05a3db2115623ed8",
          "bytes": 165854,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0464-21a3ab364f74487e.gif?alt=media&token=a1fd3391-1cc9-4e79-abde-1fd6864aba92",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0464-21a3ab364f74487e.gif",
          "verifiedAt": "2026-10-07T23:37:04.711Z"
        },
        "webp": {
          "sha256": "db5f0a410cadf8a60f7e43de370a8d736c973c3b9ba454d71a1dc9e9decba853",
          "bytes": 261380,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0464-db5f0a410cadf8a6.webp?alt=media&token=f2b57866-51b3-41a9-8bdb-1b77287716c8",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0464-db5f0a410cadf8a6.webp",
          "verifiedAt": "2026-10-07T23:37:06.057Z"
        },
        "poster": {
          "sha256": "3c2f84e6c1ed0aef8d05cde8c4006d21e67437217affcef9413539c997f29a20",
          "bytes": 69996,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0464-3c2f84e6c1ed0aef.png?alt=media&token=4281f86d-bd49-4a02-9732-8a8fd8876882",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0464-3c2f84e6c1ed0aef.png",
          "verifiedAt": "2026-10-07T23:37:06.048Z"
        }
      }
    },
    {
      "id": "trainai-legacy-3665",
      "slug": "high-plank-with-opposite-arm-and-leg-reach",
      "name": "High plank with opposite arm and leg reach",
      "category": "Bodyweight core",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Begin in a high plank with your hands below your shoulders and your feet wide enough for balance.",
        "Brace your abdomen and keep your hips level. Slowly reach one arm forward while lifting the opposite leg slightly.",
        "Keep both lifted limbs near the height of your trunk without arching your back or rotating your pelvis.",
        "Return your hand and foot to the floor under control, then repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3665-351e44a56844.gif?alt=media&token=c8c991bc-1bc1-46ce-87a3-ec19121b5e05",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3665-d8fde241c26f.png?alt=media&token=2ee97723-8c04-4f92-95e4-7b32c3454c26",
      "aliases": [
        "power point plank"
      ],
      "legacyIds": [
        "3665"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/high-plank-with-opposite-arm-and-leg-reach/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "de01f269531edc619685d9727d0b62ecbbb5e38a78ea4e2d72bf6d347a5cbd06",
          "bytes": 150442,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3665-de01f269531edc61.gif?alt=media&token=768bf13e-94f8-46ed-b4ed-216d5f2896a0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3665-de01f269531edc61.gif",
          "verifiedAt": "2026-10-07T23:37:06.551Z"
        },
        "webp": {
          "sha256": "078dda44de20b3d600c31bcae0cdf306e1a31e7e0a0f4fab747f7d6a6e33c3d3",
          "bytes": 254516,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3665-078dda44de20b3d6.webp?alt=media&token=5299cbd9-8076-470d-a2c8-ababb41c4585",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3665-078dda44de20b3d6.webp",
          "verifiedAt": "2026-10-07T23:37:09.753Z"
        },
        "poster": {
          "sha256": "688c735e868f9d8bb0f1d8cfedb144dddc7a424ccd29d11a81da36826462104d",
          "bytes": 79345,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3665-688c735e868f9d8b.png?alt=media&token=aee2b91c-c6a3-405e-960d-72c38465827d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3665-688c735e868f9d8b.png",
          "verifiedAt": "2026-10-07T23:37:08.642Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1775",
      "slug": "copenhagen-side-plank-hip-adduction",
      "name": "Copenhagen side plank hip adduction",
      "category": "Advanced bodyweight",
      "target": "adductors",
      "bodyPart": "upper legs",
      "equipment": "bench",
      "requiredEquipment": [
        "bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on your side beside a stable low bench and place the inside of your top ankle securely on its padding. Support your upper body on your lower forearm with your elbow beneath your shoulder.",
        "Press through the supported top leg and forearm to lift your hips into a long body line.",
        "Bring the lower leg upward toward the supported leg while keeping your pelvis controlled.",
        "Lower the free leg and hips slowly through a comfortable range, then repeat on the other side. Use this advanced variation only when you can control the supported position."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1775-3b8126c036b6.gif?alt=media&token=ca50571d-d076-4ef5-8f4c-5353c91089ad",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1775-7d01c2da05f3.png?alt=media&token=fd0084d3-a614-4f8d-a0e0-527cccc16682",
      "aliases": [
        "side plank hip adduction"
      ],
      "legacyIds": [
        "1775"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/copenhagen-side-plank-hip-adduction/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "9ec12e59862070419cf793548337f55fb020817403baa7c23f800bcd1a2c3a8b",
          "bytes": 164612,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1775-9ec12e5986207041.gif?alt=media&token=b5e03c28-4967-484c-be0d-754674263e98",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1775-9ec12e5986207041.gif",
          "verifiedAt": "2026-10-07T23:37:09.011Z"
        },
        "webp": {
          "sha256": "c7c6d5ea4482ad3fe5f723aeacdde756709b39757ea75832ea5230d4b32e1c67",
          "bytes": 264014,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1775-c7c6d5ea4482ad3f.webp?alt=media&token=8a8fe725-b106-4e80-812b-a11a24b0b9a5",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1775-c7c6d5ea4482ad3f.webp",
          "verifiedAt": "2026-10-07T23:37:11.115Z"
        },
        "poster": {
          "sha256": "25b48eb3c31fb6ba1f7c00fbb8ce8f30302ddb41508eac947ca7ffeb9dcec6ca",
          "bytes": 77893,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1775-25b48eb3c31fb6ba.png?alt=media&token=739bc20f-32c5-4d45-85c4-42991682032a",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1775-25b48eb3c31fb6ba.png",
          "verifiedAt": "2026-10-07T23:37:10.726Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1719",
      "slug": "incline-close-grip-barbell-bench-press",
      "name": "Incline close-grip barbell bench press",
      "category": "Barbell foundations",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "adjustable-bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set an adjustable bench to a modest incline inside a suitable rack. Lie back with your head and back supported and your feet planted.",
        "Take a comfortable close overhand grip and keep your wrists aligned with your forearms. Use the rack safeties or a spotter for a loaded bar.",
        "Lower the bar toward your upper chest with your elbows close to your sides, then press up under control.",
        "Keep your hips on the bench and stop the press before forcing your elbows past straight. Return the bar securely to the rack after your set."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1719-7c8a204288a6.gif?alt=media&token=b64e2fca-40aa-4d33-9955-ae5205ab5aaa",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1719-ecefbf75104b.png?alt=media&token=b381775b-0bc2-4883-96dc-5b09771c6855",
      "aliases": [
        "barbell incline close grip bench press"
      ],
      "legacyIds": [
        "1719"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-close-grip-barbell-bench-press/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c3aaf0671125282e5fda34ab4f61623f6b254d7b09efe5ed965f0e59d4e5bc58",
          "bytes": 323628,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1719-c3aaf0671125282e.gif?alt=media&token=c747b895-2f8e-4891-b9eb-078dee659225",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1719-c3aaf0671125282e.gif",
          "verifiedAt": "2026-10-07T23:37:11.788Z"
        },
        "webp": {
          "sha256": "990e37198181ee170c71bfd4bfae57ad6838399e970e69caf237cfa3cf9e0e81",
          "bytes": 517026,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1719-990e37198181ee17.webp?alt=media&token=c7fda3c2-c078-4828-b7aa-0e9b5f2b41a5",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1719-990e37198181ee17.webp",
          "verifiedAt": "2026-10-07T23:37:14.978Z"
        },
        "poster": {
          "sha256": "5577ef96e478a7f0071992ace70ab92a6f65e2c761930f15d8dfa405a4443134",
          "bytes": 142561,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1719-5577ef96e478a7f0.png?alt=media&token=79b8b0ee-c79b-4f94-998b-b35fc6573c95",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1719-5577ef96e478a7f0.png",
          "verifiedAt": "2026-10-07T23:37:12.591Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0050",
      "slug": "incline-barbell-scapular-raise",
      "name": "Incline barbell scapular raise",
      "category": "Barbell accessories",
      "target": "serratus anterior",
      "bodyPart": "chest",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "adjustable-bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie back on a stable incline bench with your feet planted. Hold a light barbell above your upper chest with an overhand grip.",
        "Keep your elbows comfortably straight and your head, back and hips supported.",
        "Reach the bar a small distance upward by moving your shoulder blades forward around your ribcage. Do not bend your elbows into a press.",
        "Let your shoulder blades return slowly while keeping control of the bar. The movement is deliberately small."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0050-39b69d7b0978.gif?alt=media&token=3d295ec2-248e-4f91-827a-b7a16553546c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0050-c8ec3ffafd8c.png?alt=media&token=92f503ba-a803-4847-84ae-cfcdb65eb821",
      "aliases": [
        "barbell incline shoulder raise"
      ],
      "legacyIds": [
        "0050"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-barbell-scapular-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "be72a199bb1193ed5cd467fa0c7959310c796e66b802b6f0ffbf86896d15a765",
          "bytes": 308203,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0050-be72a199bb1193ed.gif?alt=media&token=67f93706-f6a5-4dbd-a912-39f838bbc51f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0050-be72a199bb1193ed.gif",
          "verifiedAt": "2026-10-07T23:37:14.060Z"
        },
        "webp": {
          "sha256": "90e2cb5c7ab32e85852426d612c5344f4cf275a1bc2477c798792c9681599ccc",
          "bytes": 473822,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0050-90e2cb5c7ab32e85.webp?alt=media&token=06dd188a-17b3-45fa-a4b1-4853b435f1aa",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0050-90e2cb5c7ab32e85.webp",
          "verifiedAt": "2026-10-07T23:37:16.750Z"
        },
        "poster": {
          "sha256": "2c9a80cc454639974da424a9fa7436c44ad0b5df878a21fe42e960642815375d",
          "bytes": 135102,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0050-2c9a80cc45463997.png?alt=media&token=94705743-02b3-45e0-924f-98a7b0513b31",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0050-2c9a80cc45463997.png",
          "verifiedAt": "2026-10-07T23:37:15.152Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0328",
      "slug": "incline-dumbbell-scapular-raise",
      "name": "Incline dumbbell scapular raise",
      "category": "Dumbbell accessories",
      "target": "serratus anterior",
      "bodyPart": "chest",
      "equipment": "dumbbell",
      "requiredEquipment": [
        "dumbbell",
        "adjustable-bench"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie back on a stable incline bench with both feet planted and hold two light dumbbells above your upper chest.",
        "Keep your elbows comfortably straight, your wrists neutral and your head and back supported.",
        "Reach both weights upward a small distance by moving your shoulder blades forward, without bending your elbows or lifting your torso.",
        "Lower the shoulder blades under control to the starting position. Keep this a small shoulder-blade movement rather than a dumbbell press."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0328-468631695c27.gif?alt=media&token=f1e74e8f-64a6-4ead-bfe8-bdf4c70b18dc",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0328-7e8d99bf19fe.png?alt=media&token=5a59b683-83b1-4f51-ad0d-e10a9b1d2a76",
      "aliases": [
        "dumbbell incline shoulder raise"
      ],
      "legacyIds": [
        "0328"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-dumbbell-scapular-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "dc6b4a61f36c3742fffb94a7dc912fccdd572f284da657cb739e1e1fa9b63e85",
          "bytes": 229251,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0328-dc6b4a61f36c3742.gif?alt=media&token=cbf468fa-e04d-442d-85e3-bc3d981a00ed",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0328-dc6b4a61f36c3742.gif",
          "verifiedAt": "2026-10-07T23:37:16.969Z"
        },
        "webp": {
          "sha256": "ed63c0083f0446d5aeddc8a386d3c49785368b3de986753bd0952c151032d06c",
          "bytes": 358234,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0328-ed63c0083f0446d5.webp?alt=media&token=ae6033f8-eada-4327-bedd-d8f298fbb49b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0328-ed63c0083f0446d5.webp",
          "verifiedAt": "2026-10-07T23:37:17.144Z"
        },
        "poster": {
          "sha256": "b95dca7b82e09f12212ce6900bbf057f9c9dd7fff439fe17c02bfd67c635d1e1",
          "bytes": 106829,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0328-b95dca7b82e09f12.png?alt=media&token=c70c2aaf-8bc2-4469-bfaa-cba627135c48",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0328-b95dca7b82e09f12.png",
          "verifiedAt": "2026-10-07T23:37:17.937Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1010",
      "slug": "band-stiff-leg-deadlift",
      "name": "Band stiff-leg deadlift",
      "category": "Bands",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand securely on the middle of a long resistance band with your feet about hip-width apart. Hold one end in each hand.",
        "Keep your knees softly unlocked with only a small bend and brace your trunk.",
        "Push your hips backward and hinge forward while keeping your back long and your arms hanging down. Stop within a range where your spine stays controlled.",
        "Press through your feet and bring your hips forward to stand tall. Keep the band secure and avoid leaning backward at the top."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1010-070a53d55e69.gif?alt=media&token=f043fb4f-8dfd-43a4-98ec-ebdb76294c97",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1010-6a771cd59df4.png?alt=media&token=ae5ca898-f76a-4ffb-af41-164b1de02a63",
      "aliases": [
        "band straight leg deadlift"
      ],
      "legacyIds": [
        "1010"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-stiff-leg-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "49e63c2b7fb3e20e46adc83c96e8bdc92549b63caa894f9e167d159f63714e1c",
          "bytes": 174503,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1010-49e63c2b7fb3e20e.gif?alt=media&token=38ec60e4-4097-4665-b39b-93173ca50d6f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1010-49e63c2b7fb3e20e.gif",
          "verifiedAt": "2026-10-07T23:37:18.529Z"
        },
        "webp": {
          "sha256": "34d4105eb62ab999f9a90c3784c13cb995779bcdd54a53bce2b51fba3b0286a2",
          "bytes": 275530,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1010-34d4105eb62ab999.webp?alt=media&token=5c675ae9-f56a-4f00-91e9-c74038270362",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1010-34d4105eb62ab999.webp",
          "verifiedAt": "2026-10-07T23:37:19.623Z"
        },
        "poster": {
          "sha256": "92af5afb15fdcc9fa26590487078a41f2fe4ef54ddfb1854654b909b52154415",
          "bytes": 83135,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1010-92af5afb15fdcc9f.png?alt=media&token=07facee5-8f39-4c4a-beb7-6a042a6d6db2",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1010-92af5afb15fdcc9f.png",
          "verifiedAt": "2026-10-07T23:37:18.808Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0116",
      "slug": "barbell-stiff-leg-deadlift",
      "name": "Barbell stiff-leg deadlift",
      "category": "Barbell foundations",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with your feet about hip-width apart, holding a light barbell in front of your thighs with an overhand grip.",
        "Brace your trunk and keep a small, comfortable bend in your knees without locking them.",
        "Hinge at your hips, moving them backward while lowering the bar close to your legs. Keep your arms straight and your spine long.",
        "Stop before your back rounds, then bring your hips forward to stand tall. The bar does not need to reach the floor."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0116-396ee95a778f.gif?alt=media&token=d4631f15-afaf-4887-b5f5-7f02ce2a0176",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0116-8e7f77528351.png?alt=media&token=ff0e23ed-8ac9-42f5-95cc-b93773faf307",
      "aliases": [
        "barbell straight leg deadlift"
      ],
      "legacyIds": [
        "0116"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-stiff-leg-deadlift/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6abc29a489ebfd64fc18726d474d17d9086f1f513f51efb307ff308f2146044e",
          "bytes": 240114,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0116-6abc29a489ebfd64.gif?alt=media&token=42d26e43-4b07-4f1b-9825-741f111a3068",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0116-6abc29a489ebfd64.gif",
          "verifiedAt": "2026-10-07T23:37:20.399Z"
        },
        "webp": {
          "sha256": "5e33f6a1dab0aa4c5abd81f3af631c0a3df7ae204163b07437100e47eb9e0300",
          "bytes": 388578,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0116-5e33f6a1dab0aa4c.webp?alt=media&token=89afc9b3-66fd-4e31-950f-5bc5016d570d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0116-5e33f6a1dab0aa4c.webp",
          "verifiedAt": "2026-10-07T23:37:21.878Z"
        },
        "poster": {
          "sha256": "eec29d73f5e53d1f1d81143acfde29c114de643a26d2fb42140a608f96883c20",
          "bytes": 110026,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0116-eec29d73f5e53d1f.png?alt=media&token=0c598c9e-705b-4893-9dbe-fcf4af7bc622",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0116-eec29d73f5e53d1f.png",
          "verifiedAt": "2026-10-07T23:37:20.585Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1017",
      "slug": "low-anchor-band-y-raise",
      "name": "Low-anchor band Y-raise",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Attach a light resistance band securely to a rated low anchor in front of you and hold one end in each hand. Stand with your feet planted and your trunk upright.",
        "Keep a soft bend in your elbows and your shoulders relaxed.",
        "Raise both arms forward and outward into a comfortable Y shape without leaning back or forcing your shoulders.",
        "Lower both hands slowly along the same path, maintaining control of the band."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1017-ffe6246d9cbf.gif?alt=media&token=9c96d9f1-fb2d-403a-8f35-0c4640243711",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1017-9192c32acef6.png?alt=media&token=6b60d089-83ba-40e9-946f-39f2deba8a7f",
      "aliases": [
        "band y-raise"
      ],
      "legacyIds": [
        "1017"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/low-anchor-band-y-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c14fe2a457d63847ce481fccec631eb9977b86fe7107836fb0c7fea71bd4cdeb",
          "bytes": 191651,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1017-c14fe2a457d63847.gif?alt=media&token=a72bf222-ac64-4c73-8e62-9862d8a8ba5a",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1017-c14fe2a457d63847.gif",
          "verifiedAt": "2026-10-07T23:37:22.299Z"
        },
        "webp": {
          "sha256": "6cfec6cb0b9983696adc79d805f189b96b957dfacbc96dbeeedbe6da5734441e",
          "bytes": 311642,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1017-6cfec6cb0b998369.webp?alt=media&token=2e155127-6f30-4e73-a453-3573eca348a9",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1017-6cfec6cb0b998369.webp",
          "verifiedAt": "2026-10-07T23:37:22.908Z"
        },
        "poster": {
          "sha256": "122191774058e23e4d680d6bb02a852842d13795b427b30cc0993fb8699c96db",
          "bytes": 83112,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1017-122191774058e23e.png?alt=media&token=d59868eb-5948-41cb-afa5-1e2aa231cef3",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1017-122191774058e23e.png",
          "verifiedAt": "2026-10-07T23:37:22.869Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0020",
      "slug": "two-foot-balance-board-hold",
      "name": "Two-foot balance-board hold",
      "category": "Balance",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "balance board",
      "requiredEquipment": [
        "balance-board"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Place a suitable balance board on a flat, clear, non-slip surface near a stable support you can reach.",
        "Step onto the board carefully and place both feet about hip-width apart. Keep your knees softly bent.",
        "Keep your trunk upright and hold a controlled balanced position, using light support as needed. Do not force the board to tip sharply.",
        "Step down carefully when finished. Start on a more stable surface if you cannot maintain control."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0020-b93e364ceeaa.gif?alt=media&token=c700709c-6fd9-46d5-a25d-7099070c11dd",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0020-96aa1f34ec3e.png?alt=media&token=285edfce-5555-4c98-9f2e-6783b7873cfb",
      "aliases": [
        "balance board"
      ],
      "legacyIds": [
        "0020"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/two-foot-balance-board-hold/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "102c4a6b845d5b704e86deaae0355495e10ad8e13fc73b8bf1efa1b661979116",
          "bytes": 32223,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0020-102c4a6b845d5b70.gif?alt=media&token=cf7d4aaf-5642-4dcf-b069-b51cb2922e75",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0020-102c4a6b845d5b70.gif",
          "verifiedAt": "2026-10-07T23:37:23.033Z"
        },
        "webp": {
          "sha256": "4b18e3d10eccc3bce05b1c95a89c60e8dcf417abf07410e314391c3c560a2078",
          "bytes": 50032,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0020-4b18e3d10eccc3bc.webp?alt=media&token=b6bd4534-363a-4cde-b3a8-dfbf4410208d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0020-4b18e3d10eccc3bc.webp",
          "verifiedAt": "2026-10-07T23:37:23.504Z"
        },
        "poster": {
          "sha256": "4c661037aaedc083167da526622180977ac871ccf3d2122fdae75e0252a47f47",
          "bytes": 92318,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0020-4c661037aaedc083.png?alt=media&token=8c542f50-f33b-4bf6-bdf2-43ef54296202",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0020-4c661037aaedc083.png",
          "verifiedAt": "2026-10-07T23:37:23.669Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0716",
      "slug": "standing-neck-side-press-isometric",
      "name": "Standing neck side-press isometric",
      "category": "Isometric accessories",
      "target": "levator scapulae",
      "bodyPart": "neck",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand comfortably with your shoulders relaxed, your neck upright and your eyes looking ahead.",
        "Place one palm gently against the same side of your head, above your ear. Keep your other arm relaxed.",
        "Press your head gently into your hand while your hand resists, so your head stays still. Use light, comfortable effort and breathe normally.",
        "Release completely before repeating on the other side. Do not pull your head sideways or force the pressure."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0716-a4e3771a1e65.gif?alt=media&token=613f068c-a985-4654-8ad7-c656851b3828",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0716-0a4badc817ec.png?alt=media&token=08719054-04bb-4503-b03c-feee12524bbd",
      "aliases": [
        "side push neck stretch"
      ],
      "legacyIds": [
        "0716"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-neck-side-press-isometric/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ca0b4c19c99603a8e84875374dd13e9a7b7fd6bf663b908a06b631bd624344db",
          "bytes": 30068,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0716-ca0b4c19c99603a8.gif?alt=media&token=28d2e5a3-388a-47be-9018-525fb38124f2",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0716-ca0b4c19c99603a8.gif",
          "verifiedAt": "2026-10-07T23:37:23.847Z"
        },
        "webp": {
          "sha256": "3a45356b57cd4471460e7fbae0bc4e9843ae7cf822bb512688447a938f4d1403",
          "bytes": 44298,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0716-3a45356b57cd4471.webp?alt=media&token=2242bded-0d02-4f1b-a9d4-11fd6d13763e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0716-3a45356b57cd4471.webp",
          "verifiedAt": "2026-10-07T23:37:24.210Z"
        },
        "poster": {
          "sha256": "492c3ed0d42146ef7f9c1c257d0f8be3534c771d2094384b381948c636a36fd5",
          "bytes": 79146,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0716-492c3ed0d42146ef.png?alt=media&token=ca93360c-aac3-4254-a857-79a99d7bc4f1",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0716-492c3ed0d42146ef.png",
          "verifiedAt": "2026-10-07T23:37:24.734Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1560",
      "slug": "seated-stability-ball-hamstring-stretch",
      "name": "Seated stability-ball hamstring stretch",
      "category": "Stretching",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "stability ball",
      "requiredEquipment": [
        "stability-ball"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit securely on a suitable stability ball on a non-slip surface with one foot flat on the floor.",
        "Extend the other leg forward with its heel on the floor, toes pointing upward and knee comfortably straight.",
        "Keep your back long and lean forward slightly from your hips until you feel a mild stretch behind the extended thigh. Rest your hands lightly on your thighs without pressing on the knee.",
        "Hold without bouncing, return upright, then change legs. Keep the ball and your seated support controlled throughout."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1560-f6ea6f72c38f.gif?alt=media&token=cb0e2836-2d2c-40f1-9c36-7934ab400f7a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1560-07a05217f7bf.png?alt=media&token=0d6f141c-3ffe-43fa-b406-22b745b70c18",
      "aliases": [
        "exercise ball seated hamstring stretch"
      ],
      "legacyIds": [
        "1560"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-stability-ball-hamstring-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "34365ad64537a7502da61be01bbb2e1ab735286fe288e7ba0316853d2787f3c8",
          "bytes": 41812,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1560-34365ad64537a750.gif?alt=media&token=11637f95-361f-457f-b4f7-df24e08f4f33",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1560-34365ad64537a750.gif",
          "verifiedAt": "2026-10-07T23:37:24.708Z"
        },
        "webp": {
          "sha256": "31a6525f86e236690fac6a5cd16a6886532c34ae0d81b2b14213a35ee56c7b25",
          "bytes": 63722,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1560-31a6525f86e23669.webp?alt=media&token=f021ecd8-4103-4382-8683-55d7e8b68c6c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1560-31a6525f86e23669.webp",
          "verifiedAt": "2026-10-07T23:37:25.074Z"
        },
        "poster": {
          "sha256": "76bddb56771ab13474b85d61bfbbea812df62a11ab7c352f7303c29e67f5b3cd",
          "bytes": 123081,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1560-76bddb56771ab134.png?alt=media&token=ea15ead4-0301-4bd5-9e8f-9d7ca93800a9",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1560-76bddb56771ab134.png",
          "verifiedAt": "2026-10-07T23:37:25.970Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0548",
      "slug": "kettlebell-sumo-high-pull",
      "name": "Kettlebell sumo high pull",
      "category": "Kettlebells",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "kettlebell"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand in a comfortable wide stance with your toes slightly turned out and grip one kettlebell handle with both hands between your legs.",
        "Bend your knees and hips while keeping your chest lifted and your back long.",
        "Drive through your feet to stand, then guide the kettlebell upward close to your body with your elbows moving outward. Stop within a comfortable range around upper-chest height.",
        "Lower the kettlebell with control, then bend your hips and knees to reset. Keep both hands on the handle and avoid swinging the weight away from your body."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0548-e6c7f3eac85e.gif?alt=media&token=f5812165-078c-4c26-9743-d4255078d231",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0548-c529d2fa36a7.png?alt=media&token=15dbdcd1-6d88-4e9e-8809-280fa729edcd",
      "aliases": [
        "kettlebell sumo high pull"
      ],
      "legacyIds": [
        "0548"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/kettlebell-sumo-high-pull/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c496facb7fe01c5aee4daaff0f7bf03dde4083771eea165a90fcb50811071f38",
          "bytes": 215177,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0548-c496facb7fe01c5a.gif?alt=media&token=74fcc16f-3848-4eeb-9dcb-ae73f2467788",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0548-c496facb7fe01c5a.gif",
          "verifiedAt": "2026-10-07T23:37:26.295Z"
        },
        "webp": {
          "sha256": "3b95da31978127790775fcf643df6c6705370d1ad16aca3eafddc0a48e20b61e",
          "bytes": 332764,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0548-3b95da3197812779.webp?alt=media&token=23a549b9-2902-45ec-a8d9-af3362c6c98d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0548-3b95da3197812779.webp",
          "verifiedAt": "2026-10-07T23:37:27.991Z"
        },
        "poster": {
          "sha256": "2929128d5c4afed961e735a23a03a1fd6057058d191801436757d8a15866395f",
          "bytes": 97229,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0548-2929128d5c4afed9.png?alt=media&token=fb660ee4-fe22-46ff-b60f-91057b1a608f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0548-2929128d5c4afed9.png",
          "verifiedAt": "2026-10-07T23:37:26.945Z"
        }
      }
    },
    {
      "id": "trainai-legacy-3220",
      "slug": "astride-jumps-with-shoulder-height-arms",
      "name": "Astride jumps with shoulder-height arms",
      "category": "Cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Stand with your feet close together and your arms beside your body on a clear, suitable exercise surface.",
        "Make a small jump to bring your feet apart while raising both arms out to shoulder height.",
        "Land softly with your knees slightly bent, then jump your feet back together as your arms lower.",
        "Repeat with controlled, light landings. Keep your arms around shoulder height rather than lifting them overhead."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3220-b346fa03ac1b.gif?alt=media&token=dbaadfad-73ae-4140-9528-09f43cb7c263",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3220-b4297c6e5463.png?alt=media&token=fe2ef0aa-2edd-457f-ae54-0a180819cbe6",
      "aliases": [
        "astride jumps"
      ],
      "legacyIds": [
        "3220"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/astride-jumps-with-shoulder-height-arms/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1420,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5eab24f6a514d51bd3b4f94a62ca5a41c7c9ab2fe2228cdb7fee841f92acb1da",
          "bytes": 225794,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3220-5eab24f6a514d51b.gif?alt=media&token=01fc59c3-f389-4d5c-a02b-bb9c1ba1c333",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3220-5eab24f6a514d51b.gif",
          "verifiedAt": "2026-10-07T23:37:27.640Z"
        },
        "webp": {
          "sha256": "fbdf16c40e120c8242e7bb91fb0a73af56c810d4fdbe27379bb50381108c43f8",
          "bytes": 353048,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3220-fbdf16c40e120c82.webp?alt=media&token=47379272-2b9d-480c-a36e-a242a31ab32f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3220-fbdf16c40e120c82.webp",
          "verifiedAt": "2026-10-07T23:37:28.999Z"
        },
        "poster": {
          "sha256": "ec1c768e89e59268dbc393501d4b523a4c68e6f695fb99bd7597851807ca22fc",
          "bytes": 77818,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3220-ec1c768e89e59268.png?alt=media&token=ea6ed2ad-4477-476b-b3f9-f45c90eb4198",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3220-ec1c768e89e59268.png",
          "verifiedAt": "2026-10-07T23:37:28.437Z"
        }
      }
    },
    {
      "id": "trainai-legacy-3636",
      "slug": "wall-supported-high-knees",
      "name": "Wall-supported high knees",
      "category": "Cardio",
      "target": "cardiovascular system",
      "bodyPart": "cardio",
      "equipment": "body weight",
      "requiredEquipment": [
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "duration",
      "instructions": [
        "Place both palms against a stable wall around shoulder height and step back into a slight forward lean.",
        "Brace your trunk and keep your hands supported as you raise one knee toward hip height through a comfortable range.",
        "Return that foot to the floor under control, then raise the opposite knee. The demonstration shows one representative knee drive.",
        "Alternate sides at a pace you can control without rocking your trunk or moving your hands along the wall."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3636-d1b50bec922d.gif?alt=media&token=ce1ada98-39b5-4e42-a6b1-1f0e5285ba94",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3636-2ad74d4e83b7.png?alt=media&token=cb54ab37-325e-4afd-a906-2190b348ebba",
      "aliases": [
        "high knee against wall"
      ],
      "legacyIds": [
        "3636"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/wall-supported-high-knees/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 950,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "2f0423ecd2bac1f242e1471881c41ad1cfc9b136eadd90b21a9f417e79e9a0c6",
          "bytes": 123206,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3636-2f0423ecd2bac1f2.gif?alt=media&token=7ad22db7-89df-4446-ac42-265b0e26cbce",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3636-2f0423ecd2bac1f2.gif",
          "verifiedAt": "2026-10-07T23:37:28.844Z"
        },
        "webp": {
          "sha256": "c02e4f02f97e421d3835798e1ac11a9f0fce49acba03a9747e6a3dec41c2877b",
          "bytes": 185504,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3636-c02e4f02f97e421d.webp?alt=media&token=aa1b782b-aa63-4f03-84ee-c13e2d33afa8",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3636-c02e4f02f97e421d.webp",
          "verifiedAt": "2026-10-07T23:37:29.698Z"
        },
        "poster": {
          "sha256": "57edf4cb9c45fdcfe74d10e426a0279537a0e9761c4ecc41f38517d5d2f4ac50",
          "bytes": 86296,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3636-57edf4cb9c45fdcf.png?alt=media&token=924ccbf2-dd3e-403e-a407-194f307495ba",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3636-57edf4cb9c45fdcf.png",
          "verifiedAt": "2026-10-07T23:37:29.542Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0024",
      "slug": "barbell-front-squat-to-bench",
      "name": "Barbell front squat to bench",
      "category": "Barbell foundations",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Place a stable bench behind you at a suitable squat depth and set up a light barbell in a rack.",
        "Support the bar across the fronts of your shoulders using a secure front-rack grip. Keep your elbows forward and your trunk braced.",
        "Squat down under control with your feet planted and knees following your toes until your hips lightly touch the bench.",
        "Keep tension through your trunk and legs, then stand smoothly. Do not drop onto the bench, rock backward or force your knees past straight."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0024-cf11c79e2ac7.gif?alt=media&token=def70d02-3b28-4e16-9524-cb89d5b60395",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0024-fcdf15719d7a.png?alt=media&token=67318ac5-6bea-4b92-b86d-778de541c180",
      "aliases": [
        "barbell bench front squat"
      ],
      "legacyIds": [
        "0024"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-front-squat-to-bench/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7134dc4b507ef3124a6c5d18d669082e7a8a2269f26a818fb97f545e2f987101",
          "bytes": 229660,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0024-7134dc4b507ef312.gif?alt=media&token=caf5d348-d914-42b7-ad29-345b79cc15f6",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0024-7134dc4b507ef312.gif",
          "verifiedAt": "2026-10-07T23:37:30.678Z"
        },
        "webp": {
          "sha256": "63c3616693f88b8724a4e62eff50615d44c767ee68f8528d0398c8ef55c9e1db",
          "bytes": 377704,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0024-63c3616693f88b87.webp?alt=media&token=03bfd3a7-0c68-49f1-b1d8-da0babe054b6",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0024-63c3616693f88b87.webp",
          "verifiedAt": "2026-10-07T23:37:32.442Z"
        },
        "poster": {
          "sha256": "3391492fa54f3d573966b38d9de4de2e2f2361602c71838f9d14ba6b4c624741",
          "bytes": 111339,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0024-3391492fa54f3d57.png?alt=media&token=014207be-0f52-4801-95fa-4e51a4b962d0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0024-3391492fa54f3d57.png",
          "verifiedAt": "2026-10-07T23:37:30.923Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0068",
      "slug": "barbell-rear-foot-elevated-split-squat",
      "name": "Barbell rear-foot-elevated split squat",
      "category": "Barbell accessories",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "bench",
        "rack",
        "safeties"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Support a light barbell securely across your upper back and grip it outside your shoulders. Place the top of your rear foot on a stable low bench.",
        "Set your front foot far enough forward that you can lower comfortably while keeping its heel grounded.",
        "Bend your front knee and lower your hips under control, letting the rear knee move downward without striking the floor.",
        "Press through the front foot to rise without locking the knee forcefully. Keep the bar stable and repeat on the other side after your set."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0068-4b33c48b90cd.gif?alt=media&token=464690be-16d1-45bf-945c-984eb1d9c23d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0068-722bbe22eef7.png?alt=media&token=7d83e918-af15-440f-89dc-147c725712f9",
      "aliases": [
        "barbell one leg squat"
      ],
      "legacyIds": [
        "0068"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-rear-foot-elevated-split-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "f4064f69422600f581a9b14eeb14b18960b772911f53740a73b5543ddb348e61",
          "bytes": 274138,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0068-f4064f69422600f5.gif?alt=media&token=6e6bc485-7f39-4fff-be66-f418ca564d05",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0068-f4064f69422600f5.gif",
          "verifiedAt": "2026-10-07T23:37:32.304Z"
        },
        "webp": {
          "sha256": "d67a09283aaba91b607ba1a768ae48207cb718750dbb127be6dbc5d980d3bdd2",
          "bytes": 446242,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0068-d67a09283aaba91b.webp?alt=media&token=08318124-a198-4e45-91fe-44d1907ff500",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0068-d67a09283aaba91b.webp",
          "verifiedAt": "2026-10-07T23:37:34.617Z"
        },
        "poster": {
          "sha256": "5cc4b08f825021ec55e3228bba171024b7a9c4775a13dfa781715dc9e2bff0bc",
          "bytes": 122319,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0068-5cc4b08f825021ec.png?alt=media&token=f9adacbe-31ac-4d34-8b29-2d8cb043050d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0068-5cc4b08f825021ec.png",
          "verifiedAt": "2026-10-07T23:37:33.362Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0987",
      "slug": "single-hand-band-rear-foot-elevated-split-squat",
      "name": "Single-hand band rear-foot-elevated split squat",
      "category": "Bands",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor",
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a resistance band to a rated low anchor in front of you and hold its handle in one hand beside your hip.",
        "Rest the top of your rear foot on a stable low platform and plant your front foot far enough forward for a comfortable split squat.",
        "Lower your hips by bending the front knee, keeping the front heel down, your trunk controlled and the band handle beside you.",
        "Push through the front foot to rise smoothly. Keep the rear foot supported and repeat on the other side after completing your repetitions."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0987-3cba393d7756.gif?alt=media&token=55423fa1-2a68-44f4-b569-c6d0972e4228",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0987-ab851b1f229d.png?alt=media&token=2b827e34-7cd5-47ff-abee-5d5cb89d5fc9",
      "aliases": [
        "band one arm single leg split squat"
      ],
      "legacyIds": [
        "0987"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-hand-band-rear-foot-elevated-split-squat/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "640d2049215b1f768ee956605f3e3ce60585b079ea985f2e3050d9be0191a576",
          "bytes": 224712,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0987-640d2049215b1f76.gif?alt=media&token=e3d177bf-c1b8-4104-9e4b-9b3d4d030d6f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0987-640d2049215b1f76.gif",
          "verifiedAt": "2026-10-07T23:37:34.582Z"
        },
        "webp": {
          "sha256": "2bd6fe511c5dc50f0ba119bf88537c37de74f8632f8b4a27f79a884dba1ff003",
          "bytes": 365786,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0987-2bd6fe511c5dc50f.webp?alt=media&token=6c32b026-1e29-47c0-8eab-97f9cac21eec",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0987-2bd6fe511c5dc50f.webp",
          "verifiedAt": "2026-10-07T23:37:35.820Z"
        },
        "poster": {
          "sha256": "e29d37be5c147aa60c9a9685ca05c16b52bce1252b3e2b6e5f4c05a6bef7065d",
          "bytes": 105260,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0987-e29d37be5c147aa6.png?alt=media&token=0e41d698-c94d-4774-b0f5-9b0241f824c8",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0987-e29d37be5c147aa6.png",
          "verifiedAt": "2026-10-07T23:37:35.849Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1008",
      "slug": "band-step-up",
      "name": "Band step-up",
      "category": "Bands",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "stable-step"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Place one foot fully on a stable low step, securing a long resistance band beneath that foot. Hold the band handle near the shoulder on that side.",
        "Brace your trunk and press through the foot on the step to lift your body. Keep the knee aligned with the foot.",
        "Finish standing tall on the step without forcing the working knee past straight. Use the other leg only as needed for balance.",
        "Lower the trailing foot back to the floor slowly while keeping the leading foot and band secure. Complete your repetitions, then change sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1008-898830fe8531.gif?alt=media&token=f33563c5-1759-417d-9f82-b4a726cb8205",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1008-46f96794c778.png?alt=media&token=7f64f9c0-0492-416d-8ad7-bda77d901955",
      "aliases": [
        "band step-up"
      ],
      "legacyIds": [
        "1008"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-step-up/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6712bfa0980802b3026ea439ea6d75e7c04d469467810fd2620a5be5578ef69f",
          "bytes": 166491,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1008-6712bfa0980802b3.gif?alt=media&token=47e04bd7-f6a3-41b6-ae5c-3be2eb252d45",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1008-6712bfa0980802b3.gif",
          "verifiedAt": "2026-10-07T23:37:35.828Z"
        },
        "webp": {
          "sha256": "8169d5eedbd4ef5fe434ef20dac433470412dd24244d6e2849790367bb41c566",
          "bytes": 289058,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1008-8169d5eedbd4ef5f.webp?alt=media&token=354f1031-6ecb-4c38-b81e-dd23042538fa",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1008-8169d5eedbd4ef5f.webp",
          "verifiedAt": "2026-10-07T23:37:38.197Z"
        },
        "poster": {
          "sha256": "24a00e52737b57ad2e7e67332fdcc12ed2f43d012c197c49eff41855a69d805c",
          "bytes": 89212,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1008-24a00e52737b57ad.png?alt=media&token=57e73954-361c-4a0a-a5e5-6f504df35fc7",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1008-24a00e52737b57ad.png",
          "verifiedAt": "2026-10-07T23:37:37.094Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0968",
      "slug": "alternating-band-biceps-curl",
      "name": "Alternating band biceps curl",
      "category": "Bands",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand securely on the middle of a long resistance band and hold an end in each hand with your palms facing forward.",
        "Keep your upper arms beside your body and curl one hand toward its shoulder without leaning or lifting the elbow.",
        "Lower that hand slowly, then curl the other arm while the first stays down.",
        "Continue alternating arms with your feet planted, wrists comfortable and both hands holding the band securely."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0968-a58daf5b8ee7.gif?alt=media&token=55403b78-43d1-4a3e-910a-aa551db3d0b2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0968-38e4b502596c.png?alt=media&token=b48a3c9b-541c-4dc0-8208-0dc56bf79ad5",
      "aliases": [
        "band alternating biceps curl"
      ],
      "legacyIds": [
        "0968"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/alternating-band-biceps-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 1900,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "51d36ea34b5c54f7865584261c3629ee30253a00f8ecda524b1ed1c1902f723a",
          "bytes": 260011,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0968-51d36ea34b5c54f7.gif?alt=media&token=18dfbc6a-a1b4-4903-a41f-00c6e2ec46a1",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0968-51d36ea34b5c54f7.gif",
          "verifiedAt": "2026-10-07T23:37:38.612Z"
        },
        "webp": {
          "sha256": "7a6717c61838c797b6f9499d336006f8ab204e56dd12c715386b513f904698fe",
          "bytes": 411072,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0968-7a6717c61838c797.webp?alt=media&token=9caadc85-36af-4971-9a77-9646cb0ddf3e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0968-7a6717c61838c797.webp",
          "verifiedAt": "2026-10-07T23:37:39.285Z"
        },
        "poster": {
          "sha256": "900033104a498b4ffb5d65de837bf5780af92101d510cef14b1cae77852548ee",
          "bytes": 92732,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0968-900033104a498b4f.png?alt=media&token=d1c82250-5c5b-4e79-a816-0ced555712e6",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0968-900033104a498b4f.png",
          "verifiedAt": "2026-10-07T23:37:39.132Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0989",
      "slug": "floor-seated-single-arm-rotating-band-chest-press",
      "name": "Floor-seated single-arm rotating band chest press",
      "category": "Bands",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a light resistance band to a rated anchor behind you around seated chest height. Sit on the floor with your legs extended comfortably and your heels supported.",
        "Hold the handle beside your chest with one hand and keep your other hand on your hip. Sit tall and brace your abdomen.",
        "Press the working hand forward while allowing a small controlled turn through your ribcage. Keep your pelvis and legs steady.",
        "Return your hand and chest slowly to the start. Complete the repetitions, then change sides without letting the band pull you backward."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0989-6833f8aeb357.gif?alt=media&token=e6ae800f-8c9d-42c5-87a8-e6542632b11c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0989-4d379fdef263.png?alt=media&token=dc017d8e-1c0a-44be-8444-867912a3f839",
      "aliases": [
        "band one arm twisting chest press"
      ],
      "legacyIds": [
        "0989"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/floor-seated-single-arm-rotating-band-chest-press/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "5cd2b3bf3f2010c2441be1a1b3795dc19147332750b8d3a7c1f68e003378f254",
          "bytes": 256155,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0989-5cd2b3bf3f2010c2.gif?alt=media&token=e1f52987-970f-45c7-bc27-278ca6ebec00",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0989-5cd2b3bf3f2010c2.gif",
          "verifiedAt": "2026-10-07T23:37:40.116Z"
        },
        "webp": {
          "sha256": "f646c93176c7741f93b9db0fe5cf5ba93faba7449162c7efc20c1f3ee1e29f3a",
          "bytes": 412310,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0989-f646c93176c7741f.webp?alt=media&token=8a63008c-4af2-4802-871b-177e6018c1da",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0989-f646c93176c7741f.webp",
          "verifiedAt": "2026-10-07T23:37:41.797Z"
        },
        "poster": {
          "sha256": "db878fa401d3fb6938535d993071916a64260e77cc451cbade1b82369496baab",
          "bytes": 121445,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0989-db878fa401d3fb69.png?alt=media&token=85a2ca11-38b0-46dc-8b7a-3298e8c888c6",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0989-db878fa401d3fb69.png",
          "verifiedAt": "2026-10-07T23:37:40.341Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2208",
      "slug": "kneeling-foam-roller-lat-stretch",
      "name": "Kneeling foam-roller lat stretch",
      "category": "Stretching",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Kneel with a foam roller crosswise in front of you and rest both palms on it.",
        "Sit your hips back gently while reaching your hands forward and lowering your chest between your arms.",
        "Stop at a mild comfortable stretch and breathe normally. Keep your lower back comfortable and do not bounce.",
        "Return slowly by bringing the roller closer and raising your chest."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2208-f28623140207.gif?alt=media&token=358048b9-8b25-42b9-b4b5-4a2564d721f4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2208-b042bcae97fc.png?alt=media&token=00587b9a-7d57-4781-ab6b-371f090e6246",
      "aliases": [
        "roller back stretch"
      ],
      "legacyIds": [
        "2208"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/kneeling-foam-roller-lat-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6a5250f615649a643eea46e1c3300013869d1215a2c761e0478e832923fc9013",
          "bytes": 31050,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2208-6a5250f615649a64.gif?alt=media&token=36fa6dc2-9adb-4dfc-9379-10f06d95d46d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2208-6a5250f615649a64.gif",
          "verifiedAt": "2026-10-07T23:37:40.691Z"
        },
        "webp": {
          "sha256": "9ed3d9218f6bd89dac783ee3055bc5d64a99618195e065b933bc098f99c50832",
          "bytes": 43602,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2208-9ed3d9218f6bd89d.webp?alt=media&token=5e236ec3-d53a-4ebb-8fb3-4704d75906c4",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2208-9ed3d9218f6bd89d.webp",
          "verifiedAt": "2026-10-07T23:37:41.209Z"
        },
        "poster": {
          "sha256": "5b98d7fd73b021948014e423f919243bfd4e073398e82e6a52bbbdb3d0bead6c",
          "bytes": 85174,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2208-5b98d7fd73b02194.png?alt=media&token=323d7083-a2ab-452f-9be6-1ed3799eb287",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2208-5b98d7fd73b02194.png",
          "verifiedAt": "2026-10-07T23:37:41.682Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2204",
      "slug": "foam-roller-body-saw",
      "name": "Foam-roller body saw",
      "category": "Core equipment",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Begin in a forearm-supported plank with a foam roller under the fronts of your thighs.",
        "Brace your abdomen and maintain a straight, controlled trunk.",
        "Shift your body a short distance forward and backward over the roller without sagging through your lower back.",
        "Keep the range small and stop if you cannot maintain your plank position."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2204-f0567c6adeb7.gif?alt=media&token=bf98391e-cc20-47c9-b710-8da434fabf67",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2204-c83cd455882c.png?alt=media&token=ff236e99-3e21-47be-94cc-c1b649dba708",
      "aliases": [
        "roller body saw"
      ],
      "legacyIds": [
        "2204"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/foam-roller-body-saw/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "24212108a678fa4d91b79e1d15bc88baa682c8a57e550a03e554c7b16329e8e9",
          "bytes": 128888,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2204-24212108a678fa4d.gif?alt=media&token=be78af2f-2c65-4151-81cf-8d0773a28d80",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2204-24212108a678fa4d.gif",
          "verifiedAt": "2026-10-07T23:37:42.180Z"
        },
        "webp": {
          "sha256": "615880c16a8db1172e36e117856bec883164775a8fc29efa9348291cd5ec7da3",
          "bytes": 210250,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2204-615880c16a8db117.webp?alt=media&token=2d0e0132-d828-45fa-b4d5-e5ab61b0f0f7",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2204-615880c16a8db117.webp",
          "verifiedAt": "2026-10-07T23:37:43.560Z"
        },
        "poster": {
          "sha256": "e0779cc31e8c5844d3dc737e5647973e8b28e1e483bcbe61e448f220794151d5",
          "bytes": 62252,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2204-e0779cc31e8c5844.png?alt=media&token=856dced4-7465-4b90-b52f-c54e24e31beb",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2204-e0779cc31e8c5844.png",
          "verifiedAt": "2026-10-07T23:37:42.590Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2205",
      "slug": "supported-outer-thigh-foam-roll",
      "name": "Supported outer-thigh foam roll",
      "category": "Recovery",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie partly on your side with the foam roller beneath the outer upper thigh, below the hip joint. Keep the lower leg long.",
        "Bend your top leg across the front and plant that foot on the floor. Support yourself on your lower forearm and top palm.",
        "Use your supporting limbs to control pressure as you shift gently over a short section of the outer thigh. Avoid the hip joint and knee.",
        "Move slowly, then change sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2205-94abafb0dc73.gif?alt=media&token=91e855f2-08c3-4b9b-9bf5-6598e3c763d4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2205-b8fcc88a5303.png?alt=media&token=15bc7d24-30b0-4030-a0bf-a134e8aec6cc",
      "aliases": [
        "roller hip lat stretch"
      ],
      "legacyIds": [
        "2205"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-outer-thigh-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "52babc6f3d3e8b3418c764de1c5449b91f5e0129ae4e0d79b389ac6a612ef886",
          "bytes": 172429,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2205-52babc6f3d3e8b34.gif?alt=media&token=3b2a3812-5e4d-4731-bc08-1c2b44661374",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2205-52babc6f3d3e8b34.gif",
          "verifiedAt": "2026-10-07T23:37:43.247Z"
        },
        "webp": {
          "sha256": "8a1da4c0a1fb231ea1d0a1475f466171e50db75cec36990729e3431492e1f25d",
          "bytes": 268208,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2205-8a1da4c0a1fb231e.webp?alt=media&token=410eeaf8-432a-4472-ae6b-07c9143b02e0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2205-8a1da4c0a1fb231e.webp",
          "verifiedAt": "2026-10-07T23:37:44.210Z"
        },
        "poster": {
          "sha256": "9eb68ba9a0bb79f45e0722780bb0dbcc85ea556aa45544a66ffbcb3cb209ca9a",
          "bytes": 75256,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2205-9eb68ba9a0bb79f4.png?alt=media&token=b0a868e7-c39a-4da7-9492-051509a02731",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2205-9eb68ba9a0bb79f4.png",
          "verifiedAt": "2026-10-07T23:37:44.023Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2202",
      "slug": "inner-thigh-foam-roll",
      "name": "Inner-thigh foam roll",
      "category": "Recovery",
      "target": "adductors",
      "bodyPart": "upper legs",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie face down supported on your forearms, with one leg extended behind you.",
        "Open the other hip out to the side, bend that knee and place a foam roller beneath the inside of that thigh.",
        "Shift gently over a short section of the inner thigh, keeping pressure comfortable and staying away from the groin and knee joint.",
        "Move slowly, then change sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2202-3322deea3669.gif?alt=media&token=4c81b381-f708-47bd-ad42-cd6b0df64c31",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2202-3e6386f2b5a5.png?alt=media&token=6519a520-2c2f-49ce-9457-0d91dcd5b655",
      "aliases": [
        "roller hip stretch"
      ],
      "legacyIds": [
        "2202"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/inner-thigh-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b12285ae1f8cdaf547a201094afa2c46307c0422ec71b5ef4970a27ddab6137e",
          "bytes": 219386,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2202-b12285ae1f8cdaf5.gif?alt=media&token=e2a83067-6b49-4123-9ce4-9ce071e85a41",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2202-b12285ae1f8cdaf5.gif",
          "verifiedAt": "2026-10-07T23:37:44.804Z"
        },
        "webp": {
          "sha256": "a771a63990973d07f1d56970c0661ef49656f88c1aa895a2cc7ae7ba69493769",
          "bytes": 359408,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2202-a771a63990973d07.webp?alt=media&token=3678927b-f9fb-470c-9c0e-de9760f1e91a",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2202-a771a63990973d07.webp",
          "verifiedAt": "2026-10-07T23:37:47.094Z"
        },
        "poster": {
          "sha256": "4eb771710336dcddb0ae2c6a97cc36a19fe8c17475021f42b9a67a0ff41fcc43",
          "bytes": 104450,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2202-4eb771710336dcdd.png?alt=media&token=0ca05821-4b8a-4146-8617-d5c184e6e1ec",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2202-4eb771710336dcdd.png",
          "verifiedAt": "2026-10-07T23:37:45.460Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2207",
      "slug": "stacked-leg-outer-thigh-foam-roll",
      "name": "Stacked-leg outer-thigh foam roll",
      "category": "Recovery",
      "target": "quads",
      "bodyPart": "upper legs",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie on your side with a foam roller beneath the outer part of your upper thigh, below the hip joint. Keep both legs long and stacked.",
        "Support yourself on your lower forearm and place your top hand on the floor in front of your chest.",
        "Shift a short distance over the soft tissue of the outer thigh with comfortable pressure. Stay away from the hip joint and knee.",
        "Roll slowly, then change sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2207-539c42c45b86.gif?alt=media&token=13b2c705-b7e4-4e31-a87c-617fe8ebae61",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2207-90dd6648b83c.png?alt=media&token=24d8b1a9-a275-4aaf-8cda-0fd5de8a66b0",
      "aliases": [
        "roller side lat stretch"
      ],
      "legacyIds": [
        "2207"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/stacked-leg-outer-thigh-foam-roll/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8e3a96283fc1236c95a086dbc8e58470edd81fab535a73fd37fcb624090bcb78",
          "bytes": 166000,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2207-8e3a96283fc1236c.gif?alt=media&token=00d16e55-4207-4eb6-89e0-1625bdddc788",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2207-8e3a96283fc1236c.gif",
          "verifiedAt": "2026-10-07T23:37:46.614Z"
        },
        "webp": {
          "sha256": "f1ec8e9b6447512960994da4e4923ebdd291f49a98990f3f3eaf37dc84d3557a",
          "bytes": 267944,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2207-f1ec8e9b64475129.webp?alt=media&token=95ad8795-b9dd-4684-8425-403a6f868132",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2207-f1ec8e9b64475129.webp",
          "verifiedAt": "2026-10-07T23:37:47.369Z"
        },
        "poster": {
          "sha256": "042434fa162da8ba42de83cede503ccefce64f4ad6c831cdaccf4a63b2cb80f7",
          "bytes": 77549,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2207-042434fa162da8ba.png?alt=media&token=9b8a42f1-e836-4c8c-bed8-2ed8e282e553",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2207-042434fa162da8ba.png",
          "verifiedAt": "2026-10-07T23:37:47.875Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0019",
      "slug": "kneeling-machine-assisted-triceps-dip",
      "name": "Kneeling machine-assisted triceps dip",
      "category": "Machines",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "assisted dip machine",
      "requiredEquipment": [
        "assisted-dip-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set a suitable counterweight on an assisted-dip machine and take a secure grip on its fixed parallel handles.",
        "Place both knees on the assistance pad and begin with your arms extended comfortably and trunk upright.",
        "Bend your elbows to lower through a comfortable range as the pad follows your knees. Keep your shoulders controlled.",
        "Press through the handles to rise. Keep both knees on the pad and use the machine's steps to dismount safely."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0019-00048f166e79.gif?alt=media&token=a37e314f-7f59-41dc-ac4c-29814f3099e2",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0019-54a69b583119.png?alt=media&token=f58b6a89-76e5-40ee-accf-f08fe373d8a1",
      "aliases": [
        "assisted triceps dip (kneeling)"
      ],
      "legacyIds": [
        "0019"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/kneeling-machine-assisted-triceps-dip/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7126b6f23fae722b1aa99139b3eb65a28001bf53b62ac670d9e20baa02c04fdd",
          "bytes": 291438,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0019-7126b6f23fae722b.gif?alt=media&token=413e79f9-d10e-4b74-925c-59aa6e9b4569",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0019-7126b6f23fae722b.gif",
          "verifiedAt": "2026-10-07T23:37:49.221Z"
        },
        "webp": {
          "sha256": "4a1c50941f9cbacbdbe0d7d2d18ef8d1aad37634598a821e2fad18f5f480a933",
          "bytes": 461372,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0019-4a1c50941f9cbacb.webp?alt=media&token=6bfeb72d-1a12-4b77-bdbc-c80e37a33ba6",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0019-4a1c50941f9cbacb.webp",
          "verifiedAt": "2026-10-07T23:37:51.992Z"
        },
        "poster": {
          "sha256": "8ea60f1f9079cc569ec42acd881f0590d5f2d86e4b3a62d7357bd9432462462b",
          "bytes": 142846,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0019-8ea60f1f9079cc56.png?alt=media&token=073b90f1-50c1-4023-ab46-92ea95cc50ff",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0019-8ea60f1f9079cc56.png",
          "verifiedAt": "2026-10-07T23:37:49.338Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0975",
      "slug": "band-close-grip-push-up",
      "name": "Band close-grip push-up",
      "category": "Bands",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Place a resistance band across your upper back below your neck and secure its ends beneath your palms.",
        "Set your hands narrowly beneath your chest and extend your legs into a braced plank with toes on the floor.",
        "Bend your elbows back close to your ribs and lower your chest toward your hands while keeping your body in one line.",
        "Press up smoothly against the band. Keep your palms and toes planted and stop before your hips sag."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0975-7378ac584f6b.gif?alt=media&token=c36405b2-f8cb-413c-acab-51b36ee12485",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0975-7ccf8fb17d5d.png?alt=media&token=5e780c59-2a7a-4abb-be8f-27ce50450e23",
      "aliases": [
        "band close-grip push-up"
      ],
      "legacyIds": [
        "0975"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/band-close-grip-push-up/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a5c106a4fada3028a0efe88b67f1b1ab5e0964fd335d54840f2fa77cbedd1952",
          "bytes": 209825,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0975-a5c106a4fada3028.gif?alt=media&token=e339b266-1431-4020-b991-e800010576d0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0975-a5c106a4fada3028.gif",
          "verifiedAt": "2026-10-07T23:37:52.051Z"
        },
        "webp": {
          "sha256": "b35249ba25e971351f533e4f4ed7f641fa2e03fd288e55cb33c0bb8aaa132dee",
          "bytes": 379754,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0975-b35249ba25e97135.webp?alt=media&token=fea29adb-b33e-438a-a0f6-3123eba797cd",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0975-b35249ba25e97135.webp",
          "verifiedAt": "2026-10-07T23:37:52.777Z"
        },
        "poster": {
          "sha256": "e7042c30eac847f7aba76421793ee6babfe6d0c2bfb2bdf4fd7a192fa05eacb6",
          "bytes": 118734,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0975-e7042c30eac847f7.png?alt=media&token=6bad98e3-6d7b-459a-b7e3-1d71a00f49c9",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0975-e7042c30eac847f7.png",
          "verifiedAt": "2026-10-07T23:37:55.414Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1439",
      "slug": "shoulder-pad-machine-shrug",
      "name": "Shoulder-pad machine shrug",
      "category": "Machines",
      "target": "traps",
      "bodyPart": "back",
      "equipment": "lever shrug machine",
      "requiredEquipment": [
        "shoulder-pad-shrug-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the machine so the pads rest comfortably on your shoulders and stand with your feet flat on its platform.",
        "Hold the handles lightly to steady yourself, keeping your knees softly extended and your trunk upright.",
        "Raise both shoulders toward your ears through a small comfortable range, lifting the pads without using your legs.",
        "Lower your shoulders slowly. Keep your feet planted and avoid rolling your shoulders or pushing with your arms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1439-ceeabe5a19fa.gif?alt=media&token=ad1d84c8-2ba4-486d-9c96-3ecfe2f1fb7a",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1439-8417a2fc2a34.png?alt=media&token=cf78e0b4-05be-4ddf-a8b2-2ea5ff44ddf5",
      "aliases": [
        "lever gripless shrug"
      ],
      "legacyIds": [
        "1439"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/shoulder-pad-machine-shrug/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fdfe82fd25dcd636e1e92044c677e9afa44e0e85b089cdd6b4046b097fc691c8",
          "bytes": 293821,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1439-fdfe82fd25dcd636.gif?alt=media&token=0ac219c8-348e-47ea-998a-9e3d8ef4df33",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1439-fdfe82fd25dcd636.gif",
          "verifiedAt": "2026-10-07T23:37:56.839Z"
        },
        "webp": {
          "sha256": "f8bfa0423f3fd1ffb0fe66bde3c805851e649b982cca5e804df52fc0e5464bd6",
          "bytes": 462948,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1439-f8bfa0423f3fd1ff.webp?alt=media&token=7be67505-5fcb-4803-b034-d058e501cfe2",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1439-f8bfa0423f3fd1ff.webp",
          "verifiedAt": "2026-10-07T23:37:57.125Z"
        },
        "poster": {
          "sha256": "df58b526a96c71e30ab85a25a0d8b11cc25b8679ee02c091db9c3ceabf78e69f",
          "bytes": 144390,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1439-df58b526a96c71e3.png?alt=media&token=9e5d79fa-fbe6-4fc8-aed7-f5c8fa9556aa",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1439-df58b526a96c71e3.png",
          "verifiedAt": "2026-10-07T23:37:57.083Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1314",
      "slug": "stability-ball-back-extension",
      "name": "Stability-ball back extension",
      "category": "Core equipment",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "stability ball",
      "requiredEquipment": [
        "stability-ball"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie face down over a stability ball with your lower abdomen and hips supported. Place your feet wide on the floor for balance.",
        "Rest your hands lightly beside your head without pulling on your neck and lower your chest comfortably over the ball.",
        "Lift your chest until your trunk approaches a straight line with your legs, keeping your feet and hips supported.",
        "Lower slowly. Use a modest range and avoid arching beyond your body line."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1314-818dd8269ff4.gif?alt=media&token=9922211f-6d5e-4b5c-abc0-bcdc6ac8d000",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1314-d70bdd5a6218.png?alt=media&token=60c3cfab-f442-476d-92d7-37f73e50e029",
      "aliases": [
        "back extension on exercise ball"
      ],
      "legacyIds": [
        "1314"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/stability-ball-back-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1220,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a36c0b173a578e1c6a64eeb4512e821393d1c97026154b9ed3446fc7b62b1716",
          "bytes": 147786,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1314-a36c0b173a578e1c.gif?alt=media&token=abbd080e-1d8d-4455-9d66-979d43786804",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1314-a36c0b173a578e1c.gif",
          "verifiedAt": "2026-10-07T23:37:58.353Z"
        },
        "webp": {
          "sha256": "8cbe1bd8b2281af63726325024e9cea0ec59f0a9cc7bbc547ba26f1cdde26d3c",
          "bytes": 250868,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1314-8cbe1bd8b2281af6.webp?alt=media&token=bed244d1-ca41-4e28-8ae8-3773fbb632c1",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1314-8cbe1bd8b2281af6.webp",
          "verifiedAt": "2026-10-07T23:37:59.201Z"
        },
        "poster": {
          "sha256": "830085a3f58695abe63d04a3346e49975f479197a51b10ce700168cbc9f5c614",
          "bytes": 113221,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1314-830085a3f58695ab.png?alt=media&token=71e8b722-a1d0-4b93-b7b3-5f2a4ad04b8b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1314-830085a3f58695ab.png",
          "verifiedAt": "2026-10-07T23:37:58.585Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1336",
      "slug": "stability-ball-back-extension-with-rotation",
      "name": "Stability-ball back extension with rotation",
      "category": "Core equipment",
      "target": "spine",
      "bodyPart": "back",
      "equipment": "stability ball",
      "requiredEquipment": [
        "stability-ball"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie face down with your hips and lower abdomen supported on a stability ball and your feet planted wide for balance.",
        "Keep your arms comfortably beside your body and your pelvis supported on the ball.",
        "Lift your chest toward your body line while turning your ribcage a small distance to one side. Avoid forcing your lower back into an arch.",
        "Return slowly to face downward. Repeat on the other side after completing a controlled repetition; the demonstration shows one side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1336-4c11734e3261.gif?alt=media&token=7cd95876-cf01-4456-8421-6df725df242c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1336-452b8d986d2d.png?alt=media&token=fa280d74-270f-44af-999d-12653aae2cde",
      "aliases": [
        "exercise ball back extension with rotation"
      ],
      "legacyIds": [
        "1336"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/stability-ball-back-extension-with-rotation/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "6bb2c323642d3db4737b4ae71a795387bd7afa3a2761f607f04518bf77917605",
          "bytes": 233583,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1336-6bb2c323642d3db4.gif?alt=media&token=b6e373b2-1a93-4402-88d4-936ccb98fd7d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1336-6bb2c323642d3db4.gif",
          "verifiedAt": "2026-10-07T23:38:00.108Z"
        },
        "webp": {
          "sha256": "b46d80db42682a77f44950676177fa886be9b98dfa6c570ee8bbd360816fb74c",
          "bytes": 395298,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1336-b46d80db42682a77.webp?alt=media&token=86c0c2b2-9abb-4392-bde8-b2aaa9967faf",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1336-b46d80db42682a77.webp",
          "verifiedAt": "2026-10-07T23:38:00.123Z"
        },
        "poster": {
          "sha256": "2a6ece68593f920d785cf1bbbf39114d352fa6d7359bc44dcf40e2245ebe83ef",
          "bytes": 107928,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1336-2a6ece68593f920d.png?alt=media&token=05bad746-0577-4516-937d-1951ff004e2b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1336-2a6ece68593f920d.png",
          "verifiedAt": "2026-10-07T23:38:00.175Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0980",
      "slug": "supported-band-hip-extension",
      "name": "Supported band hip extension",
      "category": "Bands",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "ankle-cuff",
        "rated-anchor",
        "wall"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Attach a light band to a rated low anchor in front of you and secure its other end to a cuff around one ankle.",
        "Lean forward slightly with both palms against a stable wall and balance on the other leg with its knee soft.",
        "Move the cuffed leg gently backward from the hip while keeping that knee comfortably extended and your pelvis facing forward.",
        "Return slowly without arching your lower back. Keep the supporting foot planted and change sides after your set."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0980-82c08f15e35a.gif?alt=media&token=d8eccf4a-33ba-40c1-987d-7cf834b047c1",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0980-f1f205d742b0.png?alt=media&token=8101deb3-1ad0-423e-8d33-69246357fab1",
      "aliases": [
        "band bent-over hip extension"
      ],
      "legacyIds": [
        "0980"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/supported-band-hip-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1220,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "607d437044fcefc8f987b1407a727242d5ebcd6be1fd6308c5151884b3355d65",
          "bytes": 148983,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0980-607d437044fcefc8.gif?alt=media&token=9cc6f6f7-8135-4dcc-a265-d5a072f55b3f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0980-607d437044fcefc8.gif",
          "verifiedAt": "2026-10-07T23:38:01.065Z"
        },
        "webp": {
          "sha256": "fcbce1751ab6cfd7c408048083148c82e16cc49570a490ccf9db3d1dd7872bd7",
          "bytes": 236270,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0980-fcbce1751ab6cfd7.webp?alt=media&token=f18d40c6-eecb-4650-a40e-1ed38bb01972",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0980-fcbce1751ab6cfd7.webp",
          "verifiedAt": "2026-10-07T23:38:01.917Z"
        },
        "poster": {
          "sha256": "394d5e1b18d6ea9233b6c1ffbeec33d9a4845227134e773a60cd6a9c38d19ddf",
          "bytes": 106457,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0980-394d5e1b18d6ea92.png?alt=media&token=e648ee0b-125b-4f35-87ca-6e9f04cd2501",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0980-394d5e1b18d6ea92.png",
          "verifiedAt": "2026-10-07T23:38:01.035Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0999",
      "slug": "single-leg-band-calf-raise-on-step",
      "name": "Single-leg band calf raise on step",
      "category": "Bands",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor",
        "stable-step",
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a light resistance band to a rated low anchor and hold its handle beside your hip. Use your other hand on a stable support.",
        "Place the ball of one foot on a low stable step with the heel free and lift the other foot clear.",
        "Rise onto the working forefoot by lifting your heel, keeping your knee softly extended and your trunk upright.",
        "Lower the heel under control through a comfortable range. Keep the forefoot secure on the step and repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0999-28d3bfdaa821.gif?alt=media&token=26e19f7d-6b64-4d57-ac39-1575bcaa5e8d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0999-856f000d4944.png?alt=media&token=3c8c44cc-0bf3-4f13-b01c-fc2b0a491ee8",
      "aliases": [
        "band single leg calf raise"
      ],
      "legacyIds": [
        "0999"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-leg-band-calf-raise-on-step/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1570,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "9fde8fec3ddc4b92c6c15d1db15e613f1ad5d6f720664ffe8d7b4b8de0578669",
          "bytes": 195652,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0999-9fde8fec3ddc4b92.gif?alt=media&token=3c1a05d4-7192-4c61-b3f2-09c06d2a45cf",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0999-9fde8fec3ddc4b92.gif",
          "verifiedAt": "2026-10-07T23:38:02.090Z"
        },
        "webp": {
          "sha256": "4fe9641852743e766b3a0d7aeb6f9c7a8d1968921f8f493071ca5d14a140355d",
          "bytes": 318888,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0999-4fe9641852743e76.webp?alt=media&token=d284ee0f-1025-417b-83eb-5cddaa174307",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0999-4fe9641852743e76.webp",
          "verifiedAt": "2026-10-07T23:38:02.534Z"
        },
        "poster": {
          "sha256": "c7d34d280a33f2c1c0177df54eaa6a211b657d978123bf25dc606eda84cce815",
          "bytes": 96676,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0999-c7d34d280a33f2c1.png?alt=media&token=65ed68ea-6abc-4b8b-af1c-4226d122327c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0999-c7d34d280a33f2c1.png",
          "verifiedAt": "2026-10-07T23:38:03.095Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0007",
      "slug": "seated-single-arm-cable-pulldown",
      "name": "Seated single-arm cable pulldown",
      "category": "Cables",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "cable",
      "requiredEquipment": [
        "cable-machine",
        "bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit upright on a stable bench below a high cable pulley with both feet supported.",
        "Hold the single handle overhead in one hand and rest your other hand beside your hip.",
        "Draw the working elbow down toward your ribs, bringing the handle toward your upper chest without leaning or twisting.",
        "Extend the arm upward slowly. Complete the repetitions and change sides; the demonstration shows one arm."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0007-d7f001928c58.gif?alt=media&token=4c3162e0-e02f-44a9-ad1d-5f40ceaa5198",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0007-c6589f6dbacc.png?alt=media&token=ec639e5f-fc4b-43f3-b9b9-31742c0a629f",
      "aliases": [
        "alternate lateral pulldown"
      ],
      "legacyIds": [
        "0007"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-single-arm-cable-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "3ae96a7fa26b5c8e466bab0d4d9759d8d43d89f8e6b2dda36d7f3d177fae3ed3",
          "bytes": 219491,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0007-3ae96a7fa26b5c8e.gif?alt=media&token=c765ec02-56aa-4ef2-b4ff-7312e19d6475",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0007-3ae96a7fa26b5c8e.gif",
          "verifiedAt": "2026-10-07T23:38:03.622Z"
        },
        "webp": {
          "sha256": "2a9a7142682cfa6c4c3821a133781cb080bb6c21a71d78d6ca6a690cda9fa0ec",
          "bytes": 365738,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0007-2a9a7142682cfa6c.webp?alt=media&token=fcd17e7f-5e36-4cc2-b683-1f6678b58034",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0007-2a9a7142682cfa6c.webp",
          "verifiedAt": "2026-10-07T23:38:05.028Z"
        },
        "poster": {
          "sha256": "4d3e55132601e35b6ace39880b07f6d0773bf62930f155a57cb224107d6424ac",
          "bytes": 112418,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0007-4d3e55132601e35b.png?alt=media&token=0e3a12ab-38f5-41fb-b8b4-fbc617a17e71",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0007-4d3e55132601e35b.png",
          "verifiedAt": "2026-10-07T23:38:04.510Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2364",
      "slug": "machine-assisted-chest-dip",
      "name": "Machine-assisted chest dip",
      "category": "Machines",
      "target": "pectorals",
      "bodyPart": "chest",
      "equipment": "assisted dip machine",
      "requiredEquipment": [
        "assisted-dip-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set the assistance weight and grip the machine's parallel handles securely. Place both knees on the moving assistance pad.",
        "Lean your trunk slightly forward while keeping your shoulders controlled.",
        "Bend your elbows and lower your chest between the handles through a comfortable range as the pad follows your knees.",
        "Press back up smoothly while maintaining the forward lean and knee support. Use the machine's steps when dismounting."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2364-df0b43ef8ddf.gif?alt=media&token=9694fd4a-95d1-4521-9256-e262b46b3d1e",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2364-b0669e5777ef.png?alt=media&token=34cef5dc-84ad-43bc-b169-a46caa017ffd",
      "aliases": [
        "assisted chest dip"
      ],
      "legacyIds": [
        "2364"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/machine-assisted-chest-dip/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "aeba96e470cd14da8d525bddeed32118b3504d49dd65a1b17c6dfc78c84568fb",
          "bytes": 259223,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2364-aeba96e470cd14da.gif?alt=media&token=4230d4a7-25a4-441a-8694-faaafb67ad33",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2364-aeba96e470cd14da.gif",
          "verifiedAt": "2026-10-07T23:38:05.549Z"
        },
        "webp": {
          "sha256": "ee6e4fafa7c9de3d954dffbb7136e041d22adac3c45b255de417c24dfdc98dc5",
          "bytes": 397944,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2364-ee6e4fafa7c9de3d.webp?alt=media&token=ba18ff84-0ece-4e68-b4c5-6b6b02ed2ff0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2364-ee6e4fafa7c9de3d.webp",
          "verifiedAt": "2026-10-07T23:38:07.347Z"
        },
        "poster": {
          "sha256": "1715c320c0031ba5e188c6b204325dcf3b682b90f943f11f6e6fa766e6a27a1b",
          "bytes": 123387,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2364-1715c320c0031ba5.png?alt=media&token=0c6001b1-4930-43ae-9146-c96fc35b1875",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2364-1715c320c0031ba5.png",
          "verifiedAt": "2026-10-07T23:38:05.995Z"
        }
      }
    },
    {
      "id": "trainai-legacy-3193",
      "slug": "glute-ham-raise",
      "name": "Glute-ham raise",
      "category": "Machines",
      "target": "hamstrings",
      "bodyPart": "upper legs",
      "equipment": "glute ham raise machine",
      "requiredEquipment": [
        "glute-ham-developer"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust the glute-ham developer so your knees and thighs are supported and your ankles are secured between the rear rollers.",
        "Start upright with your hips extended and your arms crossed over your chest.",
        "Extend your knees slowly to lower your trunk and thighs forward together, keeping your hips in line. Use only a range you can control.",
        "Bend your knees to return toward upright without folding at your hips or arching your back. Use assistance if needed."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3193-d1297eb2eff3.gif?alt=media&token=e508d87d-eff1-45e7-a800-cdcb481fb978",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3193-ea8081921aed.png?alt=media&token=d71aa268-e71c-4239-82c6-76d8db0f2f18",
      "aliases": [
        "glute-ham raise"
      ],
      "legacyIds": [
        "3193"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/glute-ham-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e8890a443bef538d754e2438c0bddc2be3185d1b2f2b25d9b1aa790dacf865ed",
          "bytes": 158569,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3193-e8890a443bef538d.gif?alt=media&token=f0916035-7aeb-4fbb-884c-dbd2e577bde1",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3193-e8890a443bef538d.gif",
          "verifiedAt": "2026-10-07T23:38:06.700Z"
        },
        "webp": {
          "sha256": "db1c8c49c6a1ab587836ce4f2b7ea83520cd89e5539b8785c4850506e0db939e",
          "bytes": 260852,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3193-db1c8c49c6a1ab58.webp?alt=media&token=f7654afd-e351-4f16-b40b-2d7906de16d3",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3193-db1c8c49c6a1ab58.webp",
          "verifiedAt": "2026-10-07T23:38:07.533Z"
        },
        "poster": {
          "sha256": "07bac258b5e50e39079b97e0788eef17d591b5287c3ed3aae983a33e7c564448",
          "bytes": 78476,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3193-07bac258b5e50e39.png?alt=media&token=3295897e-67bd-4b51-ac3d-b283a7706d9e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3193-07bac258b5e50e39.png",
          "verifiedAt": "2026-10-07T23:38:07.757Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0002",
      "slug": "side-bend-on-45-degree-bench",
      "name": "Side bend on 45-degree bench",
      "category": "Core equipment",
      "target": "obliques",
      "bodyPart": "waist",
      "equipment": "hyperextension bench",
      "requiredEquipment": [
        "hyperextension-bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set yourself sideways on a 45-degree back-extension bench with your outer hip supported and your feet secured on the footplate beneath the ankle rollers.",
        "Keep your legs long and rest your hands lightly beside your head without pulling on your neck.",
        "Bend your trunk sideways through a small comfortable range while your hips and feet remain supported.",
        "Return to your straight diagonal body line under control. Change sides after your set."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0002-2fa1d2fff3f1.gif?alt=media&token=ff041c98-1b2b-49f8-84f5-bffbb603ed74",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0002-0a82a46ca0e8.png?alt=media&token=498b5b1a-c59e-4599-88b8-ae6520a23d8f",
      "aliases": [
        "45° side bend"
      ],
      "legacyIds": [
        "0002"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/side-bend-on-45-degree-bench/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "46c2ecc2f551adb9cadad2917b4770a178c2c9b9a7c50028e992068571517703",
          "bytes": 223734,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0002-46c2ecc2f551adb9.gif?alt=media&token=c7053116-fc7a-41da-b1ab-3c4ab6a1eaa3",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0002-46c2ecc2f551adb9.gif",
          "verifiedAt": "2026-10-07T23:38:08.904Z"
        },
        "webp": {
          "sha256": "be7c5c8028e2c133c01452fc10181b67e3848d112cdada4a1e03b26b26cbea8a",
          "bytes": 394814,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0002-be7c5c8028e2c133.webp?alt=media&token=e8056dc2-ef5c-4c0c-9fda-8eacec8e7443",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0002-be7c5c8028e2c133.webp",
          "verifiedAt": "2026-10-07T23:38:10.023Z"
        },
        "poster": {
          "sha256": "21dbd8eefa126509ee44c961593889f96c06c1b3cfe643521e8a25280b294825",
          "bytes": 115186,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0002-21dbd8eefa126509.png?alt=media&token=e6ed80f8-7e94-4195-913b-2f73a573a3ec",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0002-21dbd8eefa126509.png",
          "verifiedAt": "2026-10-07T23:38:08.727Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2333",
      "slug": "ab-strap-straight-leg-raise",
      "name": "Ab-strap straight-leg raise",
      "category": "Core equipment",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "ab straps",
      "requiredEquipment": [
        "ab-straps",
        "pull-up-bar"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure rated abdominal support straps to a stable pull-up bar and place your upper arms fully into the slings.",
        "Grip the straps, brace your trunk and begin with your legs hanging long below you.",
        "Raise both legs forward toward hip height while keeping your knees comfortably extended and your upper arms supported.",
        "Lower slowly without swinging. Use a smaller range if you cannot keep your trunk controlled."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2333-f0200df1713c.gif?alt=media&token=f9ac0346-4a6d-4e44-bf6f-1fd171c01bdb",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2333-24c65571936c.png?alt=media&token=76ecf9d5-0b23-4969-94b5-39ef8f65ecca",
      "aliases": [
        "arm slingers hanging straight legs"
      ],
      "legacyIds": [
        "2333"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/ab-strap-straight-leg-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "709dcd160d3999bea91c3fb51d778ee9cb24659edd2727e939c4976f4ea12951",
          "bytes": 237156,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2333-709dcd160d3999be.gif?alt=media&token=be6ff736-d903-4a51-8ae0-bcd5a1d61dee",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2333-709dcd160d3999be.gif",
          "verifiedAt": "2026-10-07T23:38:10.639Z"
        },
        "webp": {
          "sha256": "c288856359b73473c4234d0a099bbdf2944c7517f4dafa64c315c4b4ca007a1a",
          "bytes": 362504,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2333-c288856359b73473.webp?alt=media&token=0400453a-87a2-4fc7-a558-f8bef3c7ad4b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2333-c288856359b73473.webp",
          "verifiedAt": "2026-10-07T23:38:11.585Z"
        },
        "poster": {
          "sha256": "c032a84c977f208f368d1fc9f74621a7adb487426ef45385ebc7acc91d4df332",
          "bytes": 116507,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2333-c032a84c977f208f.png?alt=media&token=3e730f41-5785-4612-8b9e-151e62d38d69",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2333-c032a84c977f208f.png",
          "verifiedAt": "2026-10-07T23:38:11.083Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1000",
      "slug": "single-leg-band-reverse-calf-raise",
      "name": "Single-leg band reverse calf raise",
      "category": "Bands",
      "target": "tibialis anterior",
      "bodyPart": "lower legs",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "stable-step",
        "stable-support"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a light resistance band beneath a stable low step and hold its handle at your hip. Use your other hand on a stable support.",
        "Place the heel of one foot securely near the step's front edge with the forefoot free, and lift your other foot.",
        "Keeping the heel supported, raise your toes toward your shin through a small comfortable ankle movement.",
        "Lower your toes slowly without shifting your heel or bending your knee. Repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1000-b62c4ed7941b.gif?alt=media&token=930f11f2-41de-404c-992e-a993397415f3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1000-5b7b7e3a42c6.png?alt=media&token=92738d83-63de-4af3-9e76-9f3d0fc2ff33",
      "aliases": [
        "band single leg reverse calf raise"
      ],
      "legacyIds": [
        "1000"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-leg-band-reverse-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "e557b6c73a93238948323fb57e69acdba3a79b162bec71ed63d5247fd36491aa",
          "bytes": 213089,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1000-e557b6c73a932389.gif?alt=media&token=79aaad0d-a037-42c5-b7d5-7f7bc8b16774",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1000-e557b6c73a932389.gif",
          "verifiedAt": "2026-10-07T23:38:12.360Z"
        },
        "webp": {
          "sha256": "36f7b2651d484b71b733c3978ad89769e33fd6d7fe7ea5e2a0b97a11db7c4b17",
          "bytes": 324382,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1000-36f7b2651d484b71.webp?alt=media&token=5df726bd-9330-45f0-ba8c-3fa2f092adaf",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1000-36f7b2651d484b71.webp",
          "verifiedAt": "2026-10-07T23:38:12.930Z"
        },
        "poster": {
          "sha256": "6eb6e1e8c3d44b492d384b1e3884cc1268753610446f041a59554c3f08b36e51",
          "bytes": 96628,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1000-6eb6e1e8c3d44b49.png?alt=media&token=3c4e853a-fe94-4f67-9aa5-bcca385ede38",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1000-6eb6e1e8c3d44b49.png",
          "verifiedAt": "2026-10-07T23:38:12.789Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1755",
      "slug": "weighted-parallel-bar-dip",
      "name": "Weighted parallel-bar dip",
      "category": "Weighted bodyweight",
      "target": "triceps",
      "bodyPart": "upper arms",
      "equipment": "weighted",
      "requiredEquipment": [
        "parallel-bars",
        "dip-belt",
        "plates"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a manageable load to a rated dip belt and grip stable parallel bars. Keep the hanging plate clear of the frame and floor.",
        "Support yourself with your arms extended comfortably and your feet lifted, keeping the load still beneath your hips.",
        "Bend your elbows to lower through a comfortable range, controlling your shoulders and the hanging weight.",
        "Press back up smoothly without bouncing, swinging the plate or forcing your elbows past straight."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1755-f5c4b3571e80.gif?alt=media&token=2c36db05-004b-4e21-a2f7-a0f5d95ef757",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1755-ac0de411328a.png?alt=media&token=494c09ac-7d7c-4383-a798-9158edeeb1d7",
      "aliases": [
        "weighted tricep dips"
      ],
      "legacyIds": [
        "1755"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/weighted-parallel-bar-dip/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "73ced3c3f6be4d3b72566bb02fe284da2deb2d5956fa031b5a88ab8e4d2fb12c",
          "bytes": 240211,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1755-73ced3c3f6be4d3b.gif?alt=media&token=04de28e6-7842-4ab6-802c-f5779c17aa65",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1755-73ced3c3f6be4d3b.gif",
          "verifiedAt": "2026-10-07T23:38:13.633Z"
        },
        "webp": {
          "sha256": "8403bc68c90e2cb1b07fa73ca6e11619e8416cd15e5b1aa3f7dd1a3d277d21ac",
          "bytes": 365864,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1755-8403bc68c90e2cb1.webp?alt=media&token=481ec477-da85-4a37-b0b1-1bc76d958572",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1755-8403bc68c90e2cb1.webp",
          "verifiedAt": "2026-10-07T23:38:16.081Z"
        },
        "poster": {
          "sha256": "f05a405d8e0a58d604633d84804eed3fbb4636002f0fb9dc6d129b1bcd469dc3",
          "bytes": 105994,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1755-f05a405d8e0a58d6.png?alt=media&token=b526a93d-97c8-4aa1-b828-c78cad322818",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1755-f05a405d8e0a58d6.png",
          "verifiedAt": "2026-10-07T23:38:13.829Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0011",
      "slug": "partner-assisted-hanging-knee-raise",
      "name": "Partner-assisted hanging knee raise",
      "category": "Partner exercises",
      "target": "abs",
      "bodyPart": "waist",
      "equipment": "assisted",
      "requiredEquipment": [
        "pull-up-bar",
        "partner"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Grip a stable pull-up bar with both hands and hang with your shoulders controlled.",
        "Have a partner stand beside you and provide light support beneath your lower legs as needed.",
        "Bend your knees and bring them toward hip height without swinging, allowing the partner's hands to follow the movement.",
        "Lower slowly while keeping your grip secure. The partner should assist gently rather than pull or force the range."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0011-85f80e00082c.gif?alt=media&token=07866f05-8898-4f17-ba53-bb3675654e51",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0011-a03eaaabdec9.png?alt=media&token=e1691b99-a47d-457c-a5fa-d390ae77b6dd",
      "aliases": [
        "assisted hanging knee raise"
      ],
      "legacyIds": [
        "0011"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/partner-assisted-hanging-knee-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "abd51dad99accc231af7489480d21c7feb618feee8dc8dd24c9aad098b3d07c7",
          "bytes": 251658,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0011-abd51dad99accc23.gif?alt=media&token=cc01b05f-2e0f-4af0-9756-ff58e105b16c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0011-abd51dad99accc23.gif",
          "verifiedAt": "2026-10-07T23:38:15.021Z"
        },
        "webp": {
          "sha256": "b1cd01314bc965d769f53a05234474f73b3b1d1e43e5e470ce519953abe57525",
          "bytes": 390522,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0011-b1cd01314bc965d7.webp?alt=media&token=102db29e-aed3-4f1a-ac7d-24dbeb83e66d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0011-b1cd01314bc965d7.webp",
          "verifiedAt": "2026-10-07T23:38:15.681Z"
        },
        "poster": {
          "sha256": "4d74febe99725766b989701f9137a46eb41743d07656a7fff914faacb0c1eceb",
          "bytes": 129370,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0011-4d74febe99725766.png?alt=media&token=6fb019a0-05be-4952-98bc-c32b633c91e2",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0011-4d74febe99725766.png",
          "verifiedAt": "2026-10-07T23:38:16.928Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1708",
      "slug": "partner-assisted-supine-calf-stretch",
      "name": "Partner-assisted supine calf stretch",
      "category": "Stretching",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "assisted",
      "requiredEquipment": [
        "partner"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Lie on your back with one knee bent and that foot resting on the floor.",
        "Raise the other leg to a comfortable angle with the knee softly extended. Have a partner support your heel and forefoot.",
        "The partner gently guides your toes toward your shin until you feel a mild calf stretch, without bending your toes or forcing your knee.",
        "Hold while breathing normally, then release the pressure slowly and switch legs."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1708-c6df83b45cf5.gif?alt=media&token=0b3919f6-9069-4a78-8ec7-320cfa61d15d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1708-a81091f16338.png?alt=media&token=dac5e147-f586-461c-879e-e1b0bbca0c6a",
      "aliases": [
        "assisted lying calves stretch"
      ],
      "legacyIds": [
        "1708"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/partner-assisted-supine-calf-stretch/",
      "mediaKind": "static-hold",
      "frames": 1,
      "durationMs": 0,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "33455fceb30644993e2a2a3943fe3808e21c4d2aab3c08caccfeab4e7787649d",
          "bytes": 48832,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1708-33455fceb3064499.gif?alt=media&token=823a1eab-8981-4790-8fa3-3c839c88293a",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1708-33455fceb3064499.gif",
          "verifiedAt": "2026-10-07T23:38:16.376Z"
        },
        "webp": {
          "sha256": "687a0009fc0077bc22bb2e495c1d0965deec6ebe95f6745e1d4e3324c939dc0f",
          "bytes": 74422,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1708-687a0009fc0077bc.webp?alt=media&token=bc5c6e2c-5d64-41f2-b024-d9d5aed9b440",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1708-687a0009fc0077bc.webp",
          "verifiedAt": "2026-10-07T23:38:17.646Z"
        },
        "poster": {
          "sha256": "a829ff7f6176e370f51f5b61dae783f78185dd88b226dc1c93b74ee2298c1fa4",
          "bytes": 129309,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1708-a829ff7f6176e370.png?alt=media&token=a2976a51-4586-4b9d-9ffd-0695062933d6",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1708-a829ff7f6176e370.png",
          "verifiedAt": "2026-10-07T23:38:17.686Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1383",
      "slug": "hack-sled-calf-raise",
      "name": "Hack-sled calf raise",
      "category": "Machines",
      "target": "calves",
      "bodyPart": "lower legs",
      "equipment": "sled machine",
      "requiredEquipment": [
        "hack-squat-machine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set up in an inclined hack-squat machine with your back on the sled pad, shoulders under its pads and hands holding the handles.",
        "Place the balls of your feet securely near the lower edge of the footplate so your heels can move, and keep your knees softly extended.",
        "Release the safety catches when securely positioned, then lift your heels to move the sled a short distance up the rails.",
        "Lower the heels under control without slipping or locking your knees. Re-engage the catches before leaving the machine."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1383-11889a89e034.gif?alt=media&token=1bf0cd06-1ca7-4bb5-931a-1183c34f740d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1383-612a84df6745.png?alt=media&token=d59c3ba7-649d-467b-b917-953415ab3bcb",
      "aliases": [
        "hack calf raise"
      ],
      "legacyIds": [
        "1383"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/hack-sled-calf-raise/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "7facf5146f9801ad7e26345f0e1833d32b58b576ce1444892b8ce20cd722d46d",
          "bytes": 331767,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1383-7facf5146f9801ad.gif?alt=media&token=d69be9aa-c8d5-4eb7-bb19-5855833473c0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1383-7facf5146f9801ad.gif",
          "verifiedAt": "2026-10-07T23:38:19.424Z"
        },
        "webp": {
          "sha256": "3017e98fcd3d22d07a5b128aed8baa0a412f78849badf0aaf907d352e7e58679",
          "bytes": 516122,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1383-3017e98fcd3d22d0.webp?alt=media&token=e4b24336-03ed-430d-a22b-df5c4ed0d3df",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1383-3017e98fcd3d22d0.webp",
          "verifiedAt": "2026-10-07T23:38:20.389Z"
        },
        "poster": {
          "sha256": "baa425131da8a8aa406292c23901e20a9892009d21122f77022c769c36aa4825",
          "bytes": 153850,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1383-baa425131da8a8aa.png?alt=media&token=0df4601a-05e6-4e8d-8b0a-57d18e1b9702",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1383-baa425131da8a8aa.png",
          "verifiedAt": "2026-10-07T23:38:18.957Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0518",
      "slug": "alternating-kettlebell-hang-clean",
      "name": "Alternating kettlebell hang clean",
      "category": "Kettlebells",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "kettlebell",
      "requiredEquipment": [
        "two-kettlebells"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with a light kettlebell in each hand in front of your thighs and your feet planted about hip-width apart.",
        "Use a small hip hinge and controlled hip drive to bring one bell close to your body, guiding it around your forearm into the front-rack position.",
        "Lower that bell back to the hang under control while the other arm continues to hold its bell down.",
        "Repeat with the opposite arm. Keep each grip secure and avoid letting the bell strike your wrist or swing away from your body."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0518-f7ae28d5c876.gif?alt=media&token=ba8b597a-4fee-4c3b-a3cc-67cb008689e4",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0518-2e89dc9493b3.png?alt=media&token=a9096641-b683-4467-af44-9c65d4f42605",
      "aliases": [
        "kettlebell alternating hang clean"
      ],
      "legacyIds": [
        "0518"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/alternating-kettlebell-hang-clean/",
      "mediaKind": "animated-demonstration",
      "frames": 8,
      "durationMs": 2220,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "c72857d88eb9486b6e10cd2300a9dff89ecfe08bab22aaff3807879b7b0d339a",
          "bytes": 255418,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0518-c72857d88eb9486b.gif?alt=media&token=fe0f53ee-65f5-4c9c-bd4a-4b760db09f3e",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0518-c72857d88eb9486b.gif",
          "verifiedAt": "2026-10-07T23:38:20.479Z"
        },
        "webp": {
          "sha256": "843c8ad83f1498f983c41132a137f5151b5e169f92f38c510fda3592da4a8083",
          "bytes": 390492,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0518-843c8ad83f1498f9.webp?alt=media&token=3651681d-f6bc-4d4f-a373-033d113da7e9",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0518-843c8ad83f1498f9.webp",
          "verifiedAt": "2026-10-07T23:38:21.927Z"
        },
        "poster": {
          "sha256": "17e747de400501bad81b26724b159e8f29e631a3214b5616bc5a3a92b3a3b380",
          "bytes": 88658,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0518-17e747de400501ba.png?alt=media&token=f1b0af3b-e2fe-4835-b101-0966e5bb81bb",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0518-17e747de400501ba.png",
          "verifiedAt": "2026-10-07T23:38:21.204Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1411",
      "slug": "kneeling-barbell-wrist-extension",
      "name": "Kneeling barbell wrist extension",
      "category": "Barbell accessories",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Kneel beside a stable bench and rest both forearms on the pad with your wrists just beyond its edge.",
        "Hold a light bar with your palms facing down. Keep your fingers wrapped around it and your forearms supported.",
        "Lift the backs of your hands through a small comfortable range by extending your wrists.",
        "Lower the bar slowly. Keep your elbows, shoulders and body still rather than lifting your forearms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1411-2dfd5d31862e.gif?alt=media&token=9a5f966e-109d-4a76-8bfe-34d980b8ab43",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1411-a1f5f6162b8f.png?alt=media&token=a95ba51d-fc01-468f-8705-3b9485acd775",
      "aliases": [
        "barbell palms down wrist curl over a bench"
      ],
      "legacyIds": [
        "1411"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/kneeling-barbell-wrist-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "4c19c6827d709ef79b527e0d12e3c662a292b4350907a7b6c3ed286e318b757c",
          "bytes": 275423,
          "mimeType": "image/gif",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1411-4c19c6827d709ef7.gif?alt=media&token=bef5856a-a31b-4644-a37d-422a16020b35",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1411-4c19c6827d709ef7.gif",
          "verifiedAt": "2026-10-07T23:38:22.107Z"
        },
        "webp": {
          "sha256": "6a2849e1c7124e349cdf7b1e393ee49015f5ce4efa5fc6b5b30cebe3465a5f74",
          "bytes": 441156,
          "mimeType": "image/webp",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1411-6a2849e1c7124e34.webp?alt=media&token=0a14d797-f8a3-488f-a2cf-b159cbefd304",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1411-6a2849e1c7124e34.webp",
          "verifiedAt": "2026-10-07T23:38:24.334Z"
        },
        "poster": {
          "sha256": "97ceff092ae885791f67267dd0312f18d0d57ca45251313fa43f5ee16d037b20",
          "bytes": 133999,
          "mimeType": "image/png",
          "width": 448,
          "height": 448,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1411-97ceff092ae88579.png?alt=media&token=787f1660-77ff-4bc7-bf84-93ebafec4722",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1411-97ceff092ae88579.png",
          "verifiedAt": "2026-10-07T23:38:23.140Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1412",
      "slug": "kneeling-barbell-wrist-curl",
      "name": "Kneeling barbell wrist curl",
      "category": "Barbell accessories",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Kneel beside a stable bench and rest both forearms on the pad with your wrists just beyond its edge.",
        "Hold a light bar with your palms facing up. Keep your fingers wrapped around it and your forearms supported.",
        "Curl your palms upward through a small comfortable range by bending your wrists.",
        "Lower the bar slowly. Keep your elbows, shoulders and body still rather than lifting your forearms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1412-94bb76a44974.gif?alt=media&token=02e9e08f-a778-4d83-8a7f-6151afc057cf",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1412-736d6820e3ba.png?alt=media&token=c1d29dff-a4ec-43e6-bdf5-67dab02a914a",
      "aliases": [
        "barbell palms up wrist curl over a bench"
      ],
      "legacyIds": [
        "1412"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/kneeling-barbell-wrist-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "fd11aedaab400207d6e1887421d6cb8f357c524a4a98936cc13ec7cf88a92d7e",
          "bytes": 288550,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1412-fd11aedaab400207.gif?alt=media&token=74b985b3-b06d-45f7-8d50-89264a0f2bfe",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1412-fd11aedaab400207.gif",
          "verifiedAt": "2026-10-07T23:38:23.488Z"
        },
        "webp": {
          "sha256": "3135b3da421f5c49edd2aba6234f4e9cbfd4b5f586ae8677fe703ddb6c93317c",
          "bytes": 493966,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1412-3135b3da421f5c49.webp?alt=media&token=d8ad4505-4251-4840-b3fd-36f1e40d6f50",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1412-3135b3da421f5c49.webp",
          "verifiedAt": "2026-10-07T23:38:26.010Z"
        },
        "poster": {
          "sha256": "8e17d9bea67bfbc3b2ae6a639ea62f1011b37f7c09019d357f0cab76016306b2",
          "bytes": 153101,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1412-8e17d9bea67bfbc3.png?alt=media&token=452749cc-899a-4d60-b197-bea263b76480",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1412-8e17d9bea67bfbc3.png",
          "verifiedAt": "2026-10-07T23:38:24.863Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0079",
      "slug": "seated-barbell-wrist-extension",
      "name": "Seated barbell wrist extension",
      "category": "Barbell accessories",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable bench with your feet planted. Rest both forearms on your thighs with your wrists just beyond your knees.",
        "Hold a light bar with your palms facing down. Keep your fingers wrapped around it and your forearms supported.",
        "Lift the backs of your hands through a small comfortable range by extending your wrists.",
        "Lower the bar slowly. Keep your elbows, shoulders and body still rather than lifting your forearms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0079-3a15b340a793.gif?alt=media&token=920da1e4-ee6b-428b-869e-e114a946d9b3",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0079-a9c1fe40584d.png?alt=media&token=f066a5ae-2a97-408f-8cf4-1a2b56dc5afc",
      "aliases": [
        "barbell revers wrist curl"
      ],
      "legacyIds": [
        "0079"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-barbell-wrist-extension/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b683fd0fd3cdd5ad606980f3ad4c8cd6b604fec936d93da7d0bdfbd9facac1c7",
          "bytes": 299592,
          "mimeType": "image/gif",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0079-b683fd0fd3cdd5ad.gif?alt=media&token=4bd6e3a7-c97c-4d37-994b-d4f84ef35994",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0079-b683fd0fd3cdd5ad.gif",
          "verifiedAt": "2026-10-07T23:38:26.270Z"
        },
        "webp": {
          "sha256": "b690c24296a21f64953f82889d8b2b6f6aa666916e37bc7384bed434651783aa",
          "bytes": 489172,
          "mimeType": "image/webp",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0079-b690c24296a21f64.webp?alt=media&token=ff6c8f7b-da62-4bce-a5f3-af7cc7035491",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0079-b690c24296a21f64.webp",
          "verifiedAt": "2026-10-07T23:38:29.206Z"
        },
        "poster": {
          "sha256": "8af08544ee0008cbebc513835b9f97cececaf67b37a79bc32339932cd1d2abab",
          "bytes": 146767,
          "mimeType": "image/png",
          "width": 480,
          "height": 480,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0079-8af08544ee0008cb.png?alt=media&token=ae2dea1e-b1e4-4fbe-955a-633664042605",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0079-8af08544ee0008cb.png",
          "verifiedAt": "2026-10-07T23:38:27.396Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0125",
      "slug": "seated-barbell-wrist-curl",
      "name": "Seated barbell wrist curl",
      "category": "Barbell accessories",
      "target": "forearms",
      "bodyPart": "lower arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Sit on a stable bench with your feet planted. Rest both forearms on your thighs with your wrists just beyond your knees.",
        "Hold a light bar with your palms facing up. Keep your fingers wrapped around it and your forearms supported.",
        "Curl your palms upward through a small comfortable range by bending your wrists.",
        "Lower the bar slowly. Keep your elbows, shoulders and body still rather than lifting your forearms."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0125-6a0ac020a904.gif?alt=media&token=ec30e977-0d73-4c7b-883f-67928ba581f8",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0125-1722f9a3f45d.png?alt=media&token=9a22727a-697b-4317-a285-44d0d746f6fc",
      "aliases": [
        "barbell wrist curl"
      ],
      "legacyIds": [
        "0125"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-barbell-wrist-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ce2dd7538d8ab8f0ec26144abe5bd0fa0d7c939f9f8fb66dbe86e76af84716b3",
          "bytes": 282151,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0125-ce2dd7538d8ab8f0.gif?alt=media&token=4cf4bb1e-0ee7-4de4-96ee-d3349c01f05d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0125-ce2dd7538d8ab8f0.gif",
          "verifiedAt": "2026-10-07T23:38:28.026Z"
        },
        "webp": {
          "sha256": "8f65d8753b2ac0cdb035f44a4b6698422243a6d2c9f4cbedf7d1c85578fe7273",
          "bytes": 488364,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0125-8f65d8753b2ac0cd.webp?alt=media&token=9a6b9f42-69fb-4e8d-b4c4-4047c06b90df",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0125-8f65d8753b2ac0cd.webp",
          "verifiedAt": "2026-10-07T23:38:30.173Z"
        },
        "poster": {
          "sha256": "0b1fd610e4f1f1749eb3d9cf6f218b723c3669efa1646e2150435c8385fc3d04",
          "bytes": 146253,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0125-0b1fd610e4f1f174.png?alt=media&token=fddc4ec1-0fb7-445f-8139-cf1a1a5b106b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0125-0b1fd610e4f1f174.png",
          "verifiedAt": "2026-10-07T23:38:29.396Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0072",
      "slug": "incline-bench-barbell-spider-curl",
      "name": "Incline-bench barbell spider curl",
      "category": "Barbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "adjustable-bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie chest-down against a secure incline bench with your feet supported and a light bar held palms-up beneath your shoulders.",
        "Let your upper arms hang toward the floor and keep your chest against the pad.",
        "Bend your elbows to curl the bar through a controlled range, stopping before your upper arms lift or the bar approaches the bench.",
        "Lower slowly without swinging or moving your shoulders."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0072-e03631b94f26.gif?alt=media&token=4611e2f1-213c-4055-86ea-0da97db69d0d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0072-0cb2ff2bb410.png?alt=media&token=dcfdb48e-eae5-4489-9a0a-629203416112",
      "aliases": [
        "barbell prone incline curl"
      ],
      "legacyIds": [
        "0072"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/incline-bench-barbell-spider-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1400,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "13136bebd964be3c8faf3214a9af9f61122f89fc7a3c582defdc5050ef6351f2",
          "bytes": 192075,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0072-13136bebd964be3c.gif?alt=media&token=e084e639-978d-453a-bf40-fe0090d87262",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0072-13136bebd964be3c.gif",
          "verifiedAt": "2026-10-07T23:38:31.114Z"
        },
        "webp": {
          "sha256": "f34f17c72b65a7b20dffe0c8389a4808be571ed5d19fed6b83c25135d0ce65b5",
          "bytes": 301736,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0072-f34f17c72b65a7b2.webp?alt=media&token=d2d0da16-9ce3-4605-913e-f8cb946926a0",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0072-f34f17c72b65a7b2.webp",
          "verifiedAt": "2026-10-07T23:38:31.347Z"
        },
        "poster": {
          "sha256": "2507b626007ef0a348ae152ebb98ae367d348c4fd32c4a0b07c677dd96ef641c",
          "bytes": 141068,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0072-2507b626007ef0a3.png?alt=media&token=e1f14ab9-ba0a-4db7-b919-a58c2a83ea53",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0072-2507b626007ef0a3.png",
          "verifiedAt": "2026-10-07T23:38:31.515Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0023",
      "slug": "single-arm-barbell-curl",
      "name": "Single-arm barbell curl",
      "category": "Barbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand with your feet planted and hold the exact centre of a light short bar in one hand with your palm facing up.",
        "Keep that upper arm beside your torso and use your free hand at your hip for balance.",
        "Bend the working elbow to bring your forearm toward horizontal, keeping the bar balanced and your shoulder still.",
        "Lower slowly without leaning or raising the elbow. Finish the set before changing sides."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0023-291e2484fc9e.gif?alt=media&token=4b98ffbf-ad9d-4402-9973-d6c2c74c5633",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0023-3dd67d1d94ca.png?alt=media&token=af5f16ac-5ad0-4d45-9472-fde5c5489fb4",
      "aliases": [
        "barbell alternate biceps curl"
      ],
      "legacyIds": [
        "0023"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-arm-barbell-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1400,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "942cab78f964c714d2c868edbec230b31e0b377d4699ef4d2871ed4f0ca77d8c",
          "bytes": 123185,
          "mimeType": "image/gif",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0023-942cab78f964c714.gif?alt=media&token=a9cba084-e3f5-482c-97f4-1075141c3dd3",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0023-942cab78f964c714.gif",
          "verifiedAt": "2026-10-07T23:38:32.269Z"
        },
        "webp": {
          "sha256": "2b215dc4359ab0e4303d0922e0b8cb7b08b9e95977c761fb8dc3af775de5c5a5",
          "bytes": 194888,
          "mimeType": "image/webp",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0023-2b215dc4359ab0e4.webp?alt=media&token=c10fdc53-ac6c-4e90-9724-58fb51cca3b1",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0023-2b215dc4359ab0e4.webp",
          "verifiedAt": "2026-10-07T23:38:32.710Z"
        },
        "poster": {
          "sha256": "be8b323f5b4bb929c68d361f4aa643f9352f80f8787e4409056825225b03a26a",
          "bytes": 87273,
          "mimeType": "image/png",
          "width": 464,
          "height": 464,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0023-be8b323f5b4bb929.png?alt=media&token=843bfa46-57e7-4a90-af09-012bd53d1d33",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0023-be8b323f5b4bb929.png",
          "verifiedAt": "2026-10-07T23:38:32.351Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0070",
      "slug": "barbell-preacher-curl",
      "name": "Barbell preacher curl",
      "category": "Barbell accessories",
      "target": "biceps",
      "bodyPart": "upper arms",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "preacher-bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Adjust a preacher bench so both upper arms rest against the sloping pad and your feet stay planted.",
        "Hold a light bar palms-up, with your elbows slightly bent at the starting position.",
        "Bend your elbows to curl the bar while keeping your upper arms against the pad. Stop before the shoulders or elbows lift.",
        "Lower under control without locking your elbows or bouncing at the bottom."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0070-afc105516f6f.gif?alt=media&token=71a4c43c-9502-43b8-aecc-e0251b647eae",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0070-6b8143a5c598.png?alt=media&token=b511ca4d-f80d-4970-8526-69723eafa1b1",
      "aliases": [
        "barbell preacher curl"
      ],
      "legacyIds": [
        "0070"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-preacher-curl/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1400,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "18ed8188845edac3f5d4d7f395314628d4a06a71c0e99661088e1f60c3ae4a5d",
          "bytes": 205379,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0070-18ed8188845edac3.gif?alt=media&token=4a9b9160-ae61-4ac4-8c37-08dcdacb920c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0070-18ed8188845edac3.gif",
          "verifiedAt": "2026-10-07T23:38:34.567Z"
        },
        "webp": {
          "sha256": "7fe9f786e794cab960714380729093c5fdd82611a979afdc067f665938c92ec0",
          "bytes": 325862,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0070-7fe9f786e794cab9.webp?alt=media&token=72114f95-a0a2-4e40-83c9-1c3e59713b60",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0070-7fe9f786e794cab9.webp",
          "verifiedAt": "2026-10-07T23:38:34.228Z"
        },
        "poster": {
          "sha256": "d393fa782047e0a871d7727d1554e9e43002b3973e3096b0550a9b66d65bf797",
          "bytes": 146755,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0070-d393fa782047e0a8.png?alt=media&token=ce7d361a-ceef-4568-b0f0-cfa89b778e87",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0070-d393fa782047e0a8.png",
          "verifiedAt": "2026-10-07T23:38:34.268Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1022",
      "slug": "standing-band-rear-delt-row",
      "name": "Standing band rear-delt row",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Attach a resistance band securely to a rated anchor around face height and hold one handle in each hand.",
        "Stand in a comfortable split stance with your trunk upright and your arms reaching toward the anchor.",
        "Pull both handles toward your upper chest while bending and opening your elbows outward. Keep your shoulders away from your ears.",
        "Return slowly through the same path without leaning or letting the band snap back."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1022-7efa1494d549.gif?alt=media&token=4fcf11f4-768e-4e50-a689-06b74723d281",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1022-4a553a78bdbe.png?alt=media&token=3d5f3330-891d-492a-a0b0-32373f704fa5",
      "aliases": [
        "band standing rear delt row"
      ],
      "legacyIds": [
        "1022"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/standing-band-rear-delt-row/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "895f585ebc83e6962db304e1b9b2abde63b10e5754e7a84bb91170fe9a4809f5",
          "bytes": 185093,
          "mimeType": "image/gif",
          "width": 544,
          "height": 544,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1022-895f585ebc83e696.gif?alt=media&token=714e261a-567b-4f35-999b-daadaf617aaa",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1022-895f585ebc83e696.gif",
          "verifiedAt": "2026-10-07T23:38:38.120Z"
        },
        "webp": {
          "sha256": "c1d95e9fd795d7b849092c2a652db3b02e8ba245175599ff104eea7e984664a1",
          "bytes": 328226,
          "mimeType": "image/webp",
          "width": 544,
          "height": 544,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1022-c1d95e9fd795d7b8.webp?alt=media&token=ecb3d4d5-7fc3-4cce-a8bc-e1b05836c5cc",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1022-c1d95e9fd795d7b8.webp",
          "verifiedAt": "2026-10-07T23:38:37.966Z"
        },
        "poster": {
          "sha256": "84e43ce22241a4518e10573e6617d6010d2ac83bacf4f5452d62d014987449c6",
          "bytes": 92221,
          "mimeType": "image/png",
          "width": 544,
          "height": 544,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1022-84e43ce22241a451.png?alt=media&token=08634c5b-7e05-4512-a784-d2e9622dc948",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1022-84e43ce22241a451.png",
          "verifiedAt": "2026-10-07T23:38:35.314Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2203",
      "slug": "foam-roller-seated-shoulder-support",
      "name": "Foam-roller seated shoulder support",
      "category": "Mobility",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit with both legs long and a foam roller beneath the backs of your thighs.",
        "Place both palms on the floor behind your hips and keep your elbows comfortably extended.",
        "Press gently through your hands to lift your chest and hips a small distance while the roller supports your thighs.",
        "Return slowly through a comfortable range. Keep your neck relaxed and avoid forcing your shoulders backward."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2203-4e3797118915.gif?alt=media&token=dd0c944d-9e6a-4875-bc09-9b3a8b512e81",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2203-d3104f6f4b40.png?alt=media&token=8745479e-157e-4802-8e11-4212e5f5358f",
      "aliases": [
        "roller seated shoulder flexor depresor retractor"
      ],
      "legacyIds": [
        "2203"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/foam-roller-seated-shoulder-support/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1400,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "56559ff5bd3ef91ee1e3122b7554f1e077a5f322f1c4cd60f5e8842039c56c01",
          "bytes": 143536,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2203-56559ff5bd3ef91e.gif?alt=media&token=0549611a-c5ce-4e3d-b889-2c69fe3aa8df",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2203-56559ff5bd3ef91e.gif",
          "verifiedAt": "2026-10-07T23:38:38.315Z"
        },
        "webp": {
          "sha256": "91497deb59dc541fbb120b92c6a8338e6721c7ab1d3e43abc19bf679af466d9e",
          "bytes": 235746,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2203-91497deb59dc541f.webp?alt=media&token=ed37932b-5b80-4acd-a693-0363938b7411",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2203-91497deb59dc541f.webp",
          "verifiedAt": "2026-10-07T23:38:39.396Z"
        },
        "poster": {
          "sha256": "d0ec223fb7c7a9d25ebc02bba126d823764ff0091121c195c10434523dd78055",
          "bytes": 99180,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2203-d0ec223fb7c7a9d2.png?alt=media&token=90000660-917f-4547-adee-5fa1035f4b98",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2203-d0ec223fb7c7a9d2.png",
          "verifiedAt": "2026-10-07T23:38:39.055Z"
        }
      }
    },
    {
      "id": "trainai-legacy-2209",
      "slug": "foam-roller-single-leg-seated-shoulder-support",
      "name": "Foam-roller single-leg seated shoulder support",
      "category": "Mobility",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "foam roller",
      "requiredEquipment": [
        "foam-roller"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "cooldown",
      "measurement": "duration",
      "instructions": [
        "Sit with one leg long and its calf supported on a foam roller. Bend the other knee and plant that foot.",
        "Place both palms behind your hips and keep your elbows comfortably extended.",
        "Press through your hands and planted foot to lift your chest and hips slightly while the long leg stays supported on the roller.",
        "Lower slowly without forcing the shoulder range. Complete a comfortable set, then change legs."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2209-0e5e548d3e25.gif?alt=media&token=51a06025-6723-40f9-bcad-639046b1a1f1",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-2209-6c8ca838d7cc.png?alt=media&token=9faf7d79-75cc-4260-a10d-a7eb02feb72f",
      "aliases": [
        "roller seated single leg shoulder flexor depresor retractor"
      ],
      "legacyIds": [
        "2209"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/foam-roller-single-leg-seated-shoulder-support/",
      "mediaKind": "animated-demonstration",
      "frames": 4,
      "durationMs": 1400,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "a5b5231157e3e47368dbbb0395232b632771ad7a14d87e3294d3e646e15a0b27",
          "bytes": 164541,
          "mimeType": "image/gif",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2209-a5b5231157e3e473.gif?alt=media&token=8bd0655d-a9d6-44c4-a635-603e25f5b5d2",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2209-a5b5231157e3e473.gif",
          "verifiedAt": "2026-10-07T23:38:39.382Z"
        },
        "webp": {
          "sha256": "fb760abaf139468d07b1fd7ae3b51e7e4293ab30bc65307296c3526fc9de00f2",
          "bytes": 256520,
          "mimeType": "image/webp",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2209-fb760abaf139468d.webp?alt=media&token=cfdf9599-7c22-4153-a308-f718f6bd2834",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2209-fb760abaf139468d.webp",
          "verifiedAt": "2026-10-07T23:38:40.662Z"
        },
        "poster": {
          "sha256": "bbef6834ad87bcef06dd00789a3a180360ef5128fb2dedfecaacb1599beb01d3",
          "bytes": 110728,
          "mimeType": "image/png",
          "width": 496,
          "height": 496,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-2209-bbef6834ad87bcef.png?alt=media&token=65388a9a-88cc-41e5-939b-c6a880db7260",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-2209-bbef6834ad87bcef.png",
          "verifiedAt": "2026-10-07T23:38:40.272Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1408",
      "slug": "long-band-glute-bridge",
      "name": "Long-band glute bridge",
      "category": "Bands",
      "target": "glutes",
      "bodyPart": "upper legs",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "plates"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Lie on your back with your head and shoulders resting on the floor, your knees bent and both feet planted.",
        "Place a long resistance band across the front of your pelvis, with its ends securely anchored beneath suitable stable floor weights as shown. Keep your hands on those supports.",
        "Brace your trunk and lift your hips against the band until your shoulders, hips and knees form a comfortable straight line.",
        "Lower slowly while keeping your feet, shoulders and anchors still. Avoid arching your lower back or letting the band slide toward your waist."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1408-8081b93cca58.gif?alt=media&token=fcfb5b19-80f4-45cd-8546-9ef73e974677",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1408-35071c7b3dec.png?alt=media&token=6d3703f8-4e6b-4255-a86f-fef70bd57376",
      "aliases": [
        "band hip lift"
      ],
      "legacyIds": [
        "1408"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/long-band-glute-bridge/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1920,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "ed508e0c461ac8848069c188cdfa3a13729053d477d17ad5caba7b586eed2b9a",
          "bytes": 246868,
          "mimeType": "image/gif",
          "width": 512,
          "height": 512,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1408-ed508e0c461ac884.gif?alt=media&token=3b44b498-71bd-479e-8bf8-5a2d4f463f4f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1408-ed508e0c461ac884.gif",
          "verifiedAt": "2026-10-07T23:38:40.733Z"
        },
        "webp": {
          "sha256": "098ecad32bd36d455e8d5ae8206420dc3a247ec230c46c5e90ed1202dfe54152",
          "bytes": 407642,
          "mimeType": "image/webp",
          "width": 512,
          "height": 512,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1408-098ecad32bd36d45.webp?alt=media&token=3937f30f-0800-4bd8-8e4a-76d67c41e3f8",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1408-098ecad32bd36d45.webp",
          "verifiedAt": "2026-10-07T23:38:42.238Z"
        },
        "poster": {
          "sha256": "5875aaef87910e19f73f06492833e286050b892ec75478a13d567b6a3afc43c8",
          "bytes": 112719,
          "mimeType": "image/png",
          "width": 512,
          "height": 512,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1408-5875aaef87910e19.png?alt=media&token=a09614cc-60dc-44e3-aaf7-c8bb94ed125d",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1408-5875aaef87910e19.png",
          "verifiedAt": "2026-10-07T23:38:41.821Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0049",
      "slug": "barbell-incline-chest-supported-row",
      "name": "Barbell incline chest-supported row",
      "category": "Barbell foundations",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "adjustable-bench"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Set a stable incline bench and lie chest-down with your feet supported on the floor. Use a setup with clearance for the bar throughout the movement.",
        "Hold the bar with an overhand grip slightly wider than your shoulders, arms hanging below your chest.",
        "Keep your chest on the pad and draw your elbows back, bringing the bar toward your lower ribs without contacting the bench frame.",
        "Lower the bar under control until your arms are long. Keep your head aligned with your trunk."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0049-1153532f6e12.gif?alt=media&token=d5de2ca4-523f-40ef-9359-ac3986d142ce",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0049-9ae861f09d3a.png?alt=media&token=9b231e58-81ad-416b-89a6-f02d1c291a52",
      "aliases": [
        "barbell incline row"
      ],
      "legacyIds": [
        "0049"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/barbell-incline-chest-supported-row/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1680,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "d5a288b97e7ec5483ee385aaa65d46ef9ce4b9b231ab8e02f28637f8b41671af",
          "bytes": 555572,
          "mimeType": "image/gif",
          "width": 624,
          "height": 624,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0049-d5a288b97e7ec548.gif?alt=media&token=1062cf92-dc55-4cbf-8bfb-58983a07c66b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0049-d5a288b97e7ec548.gif",
          "verifiedAt": "2026-10-07T23:38:42.729Z"
        },
        "webp": {
          "sha256": "544d9dcfb4734b5ab06abd935c8093af5b2ff878fbeba08d125cd07ef7c3267e",
          "bytes": 834314,
          "mimeType": "image/webp",
          "width": 624,
          "height": 624,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0049-544d9dcfb4734b5a.webp?alt=media&token=5da5524d-d492-47b4-a0d3-1cf772d694b5",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0049-544d9dcfb4734b5a.webp",
          "verifiedAt": "2026-10-07T23:38:44.284Z"
        },
        "poster": {
          "sha256": "b6dc91d0f249e5e25f4b26ef370367becf70db1357d95079e66b9ab15c20b846",
          "bytes": 275148,
          "mimeType": "image/png",
          "width": 624,
          "height": 624,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0049-b6dc91d0f249e5e2.png?alt=media&token=ced8f7c3-f660-4f7d-b493-988a5ffcc63f",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0049-b6dc91d0f249e5e2.png",
          "verifiedAt": "2026-10-07T23:38:43.634Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0064",
      "slug": "single-arm-landmine-row",
      "name": "Single-arm landmine row",
      "category": "Barbell foundations",
      "target": "upper back",
      "bodyPart": "back",
      "equipment": "barbell",
      "requiredEquipment": [
        "barbell",
        "plates",
        "landmine"
      ],
      "environments": [
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure one end of a barbell in a landmine attachment. Stand beside the loaded end with your feet planted and knees softly bent.",
        "Hinge at your hips, brace your trunk and support your free hand on your thigh. Grip the bar near the loaded end with the working hand.",
        "Pull your elbow back toward your hip while keeping the free hand on your thigh and the landmine pivot fixed.",
        "Lower the loaded end under control. Keep your back steady and repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0064-c86af671a804.gif?alt=media&token=5185e7db-fa11-43d4-9d35-0c1169b00470",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0064-ce9a4af44cc9.png?alt=media&token=3c2fe05c-b41b-445f-a96c-12a585c18cca",
      "aliases": [
        "barbell one arm bent over row"
      ],
      "legacyIds": [
        "0064"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-arm-landmine-row/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1680,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "25db55781f7d6e883bdc527fb9562a379fc4134c0c82c7ba6f28ac62188f3c50",
          "bytes": 458381,
          "mimeType": "image/gif",
          "width": 704,
          "height": 704,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0064-25db55781f7d6e88.gif?alt=media&token=481f811f-944c-4aa3-ba45-517ac169da20",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0064-25db55781f7d6e88.gif",
          "verifiedAt": "2026-10-07T23:38:44.471Z"
        },
        "webp": {
          "sha256": "80e60841e1c17c7ae2bc4ff27c0d60a8f44fa94e3bce0b15a57b82deee2b984e",
          "bytes": 711676,
          "mimeType": "image/webp",
          "width": 704,
          "height": 704,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0064-80e60841e1c17c7a.webp?alt=media&token=17aa42cd-20ab-4dd6-a43f-44749a017275",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0064-80e60841e1c17c7a.webp",
          "verifiedAt": "2026-10-07T23:38:45.383Z"
        },
        "poster": {
          "sha256": "d014cbef9b017bfc25606c08dea1979c52d77f31a0bd1d9c82f33d4e4c1bddd9",
          "bytes": 215424,
          "mimeType": "image/png",
          "width": 704,
          "height": 704,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0064-d014cbef9b017bfc.png?alt=media&token=c5e4768c-55c2-4852-9012-b82d98333de2",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0064-d014cbef9b017bfc.png",
          "verifiedAt": "2026-10-07T23:38:45.115Z"
        }
      }
    },
    {
      "id": "trainai-legacy-3117",
      "slug": "seated-anchored-band-pulldown",
      "name": "Seated anchored band pulldown",
      "category": "Bands",
      "target": "lats",
      "bodyPart": "back",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor",
        "stable-chair"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a resistance band to a rated high anchor and sit on a stable seat facing it. Keep both feet on the floor.",
        "Hold the handles with your arms reaching toward the anchor, keeping your torso upright.",
        "Draw your elbows down toward your sides until your hands approach your upper chest. Keep the seat, feet and torso steady.",
        "Let your arms lengthen slowly toward the anchor without allowing the band to snap back."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3117-d5c046db7b0c.gif?alt=media&token=a635ffb3-ef95-4661-af03-2f0ae6e24c5d",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-3117-8b05b56e5c05.png?alt=media&token=6642178d-8b2b-48f4-9ee9-f682038ba560",
      "aliases": [
        "band fixed back pulldown"
      ],
      "legacyIds": [
        "3117"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/seated-anchored-band-pulldown/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1680,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "8483ea6a69146e79b8288e9ea66f3db3d55b356a0bcdf031874051c4654c4910",
          "bytes": 406377,
          "mimeType": "image/gif",
          "width": 800,
          "height": 800,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3117-8483ea6a69146e79.gif?alt=media&token=3e9ea839-b34c-44ac-81b1-c96d20a2223b",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3117-8483ea6a69146e79.gif",
          "verifiedAt": "2026-10-07T23:38:45.855Z"
        },
        "webp": {
          "sha256": "03ee02186d62c855e99f325f3e0983eb3f53553c64bf907d1cc356813037a281",
          "bytes": 703390,
          "mimeType": "image/webp",
          "width": 800,
          "height": 800,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3117-03ee02186d62c855.webp?alt=media&token=29d8833a-40bb-4032-ad3f-22f239a3afdf",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3117-03ee02186d62c855.webp",
          "verifiedAt": "2026-10-07T23:38:47.126Z"
        },
        "poster": {
          "sha256": "c1ccb7d47324515b3cebf3e1960c96b531e55014474d9fc20d63dc5fe961a5cf",
          "bytes": 223817,
          "mimeType": "image/png",
          "width": 800,
          "height": 800,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-3117-c1ccb7d47324515b.png?alt=media&token=3b05e3b2-1eb1-47a6-a7d7-f9f50710bf02",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-3117-c1ccb7d47324515b.png",
          "verifiedAt": "2026-10-07T23:38:46.461Z"
        }
      }
    },
    {
      "id": "trainai-legacy-0993",
      "slug": "anchored-band-reverse-fly",
      "name": "Anchored band reverse fly",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band",
        "rated-anchor"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Secure a resistance band to a rated anchor around chest height and hold an end or handle in each hand.",
        "Face the anchor with your feet planted, arms reaching forward and a slight bend in your elbows.",
        "Open both arms outward together through a comfortable range, keeping the small elbow bend and your trunk steady.",
        "Return both hands slowly toward the front without shrugging or snapping the band."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0993-2d9db0bf206d.gif?alt=media&token=f0983643-0790-41fb-ab63-2012813bd604",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-0993-81d96f0062f4.png?alt=media&token=b38f7438-fd3d-4add-8b07-256c0e10fcb6",
      "aliases": [
        "band reverse fly"
      ],
      "legacyIds": [
        "0993"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/anchored-band-reverse-fly/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1680,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "b0262d463432469846ba9d186b4f8b7f874d938015855c3ef10df0ca04754631",
          "bytes": 331139,
          "mimeType": "image/gif",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0993-b0262d4634324698.gif?alt=media&token=54113e20-e3e1-43c7-8bc3-8a124afb3678",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0993-b0262d4634324698.gif",
          "verifiedAt": "2026-10-07T23:38:47.040Z"
        },
        "webp": {
          "sha256": "58332f1f789270218031b143c691d2b648797ecde8c3203db6160704033af87a",
          "bytes": 529898,
          "mimeType": "image/webp",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0993-58332f1f78927021.webp?alt=media&token=3593f6ee-49e6-4e77-b28a-6a66546c2860",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0993-58332f1f78927021.webp",
          "verifiedAt": "2026-10-07T23:38:48.576Z"
        },
        "poster": {
          "sha256": "d46c92db272d5603d596ca4901e8905ad41f23ef119d9dbb72feaba2d5705114",
          "bytes": 147562,
          "mimeType": "image/png",
          "width": 672,
          "height": 672,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-0993-d46c92db272d5603.png?alt=media&token=5e659539-c847-4cb4-b3be-68f547f97c40",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-0993-d46c92db272d5603.png",
          "verifiedAt": "2026-10-07T23:38:47.672Z"
        }
      }
    },
    {
      "id": "trainai-legacy-1012",
      "slug": "single-arm-band-twisting-overhead-press",
      "name": "Single-arm band twisting overhead press",
      "category": "Bands",
      "target": "delts",
      "bodyPart": "shoulders",
      "equipment": "band",
      "requiredEquipment": [
        "band"
      ],
      "environments": [
        "home",
        "gym"
      ],
      "phase": "main",
      "measurement": "repetitions",
      "instructions": [
        "Stand securely on one end of a resistance band and hold the other end at shoulder height in the hand on that side. Place your free hand on your hip.",
        "Begin with softly bent knees and a braced trunk. Keep the same hand on the band for the whole repetition.",
        "Rise and press the working hand overhead while turning your ribcage gently away from the working side. Keep the movement comfortable and avoid arching your lower back.",
        "Return to the starting position under control, then repeat on the other side."
      ],
      "gifUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1012-c90179e37f8c.gif?alt=media&token=b1b32270-27ed-4fab-87d1-fb948618c72c",
      "posterUrl": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fexercises%2F2026-10-03-v2%2Ftrainai-legacy-1012-5a2c999dda60.png?alt=media&token=fec6dabe-c6ae-4be9-9644-1d4bded9e291",
      "aliases": [
        "band twisting overhead press"
      ],
      "legacyIds": [
        "1012"
      ],
      "pageUrl": "https://www.trainaiapp.com/exercises/single-arm-band-twisting-overhead-press/",
      "mediaKind": "animated-demonstration",
      "frames": 6,
      "durationMs": 1680,
      "upscaled": false,
      "media": {
        "gif": {
          "sha256": "501693fec07f3194700c51cee45ed6f73c5f3c5bee980101d05cf9b1d479a42f",
          "bytes": 346975,
          "mimeType": "image/gif",
          "width": 704,
          "height": 704,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1012-501693fec07f3194.gif?alt=media&token=4fecfea1-accf-41e4-bf6f-0681f4b7884c",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1012-501693fec07f3194.gif",
          "verifiedAt": "2026-10-07T23:38:48.139Z"
        },
        "webp": {
          "sha256": "eb2ca6422d3b99c9dd8f79befa003f883768f5085bf02abcd44e95239ae6a3e9",
          "bytes": 544560,
          "mimeType": "image/webp",
          "width": 704,
          "height": 704,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1012-eb2ca6422d3b99c9.webp?alt=media&token=a797db0b-10e9-45d8-b1bc-c04466f274db",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1012-eb2ca6422d3b99c9.webp",
          "verifiedAt": "2026-10-07T23:38:49.899Z"
        },
        "poster": {
          "sha256": "d3c343b6f73a488787f1c865e4b5c8a06274f313dd516544a8a611c166bccccd",
          "bytes": 177005,
          "mimeType": "image/png",
          "width": 704,
          "height": 704,
          "url": "https://firebasestorage.googleapis.com/v0/b/personalfinanceai-cursor.appspot.com/o/trainai%2Fcreator-media%2F2026-10-07%2Ftrainai-legacy-1012-d3c343b6f73a4887.png?alt=media&token=ed175d7c-5015-4a5a-92e0-54bf9fd97cbb",
          "name": "trainai/creator-media/2026-10-07/trainai-legacy-1012-d3c343b6f73a4887.png",
          "verifiedAt": "2026-10-07T23:38:49.063Z"
        }
      }
    }
  ]
}
