Sharing in case others find it useful
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add HEVY_EXERCISES.ts and update README for exercise template integration

+510 -56
+440
HEVY_EXERCISES.ts
··· 1 + // HEVY_EXERCISES.ts 2 + // Generated by generate-template-list.ts — do not edit manually 3 + 4 + export const HEVY_EXERCISES: Record<string, string> = { 5 + _21S_BICEP_CURL: "3BC06AD3", 6 + AB_SCISSORS: "B4F2FF72", 7 + AB_WHEEL: "99D5F10E", 8 + AEROBICS: "5E0DDACE", 9 + AIR_BIKE: "43573BB8", 10 + ARNOLD_PRESS_DUMBBELL: "A69FF221", 11 + AROUND_THE_WORLD: "D4A2FE7E", 12 + ASSISTED_PISTOL_SQUATS: "5BFF35BA", 13 + BACK_EXTENSION_HYPEREXTENSION: "4F5866F8", 14 + BACK_EXTENSION_MACHINE: "A05C064D", 15 + BACK_EXTENSION_WEIGHTED_HYPEREXTENSION: "091737FA", 16 + BALL_SLAMS: "F51D9080", 17 + BAND_PULLAPARTS: "E8D86EE8", 18 + BATTLE_ROPES: "084A67CA", 19 + BEAST_HOLD: "7fe5e6a5-7536-4adf-a041-133911b929ef", 20 + BEHIND_THE_BACK_BICEP_WRIST_CURL_BARBELL: "DDB29047", 21 + BEHIND_THE_BACK_CURL_CABLE: "2DBCA395", 22 + BELT_SQUAT_MACHINE: "3D1CDC75", 23 + BENCH_DIP: "CD6DC8E5", 24 + BENCH_PRESS_BARBELL: "79D0BB3A", 25 + BENCH_PRESS_CABLE: "99C1F2AD", 26 + BENCH_PRESS_CLOSE_GRIP_BARBELL: "35B51B87", 27 + BENCH_PRESS_DUMBBELL: "3601968B", 28 + BENCH_PRESS_SMITH_MACHINE: "0FBF7195", 29 + BENCH_PRESS_WIDE_GRIP_BARBELL: "E644F828", 30 + BENT_OVER_ROW_BAND: "EA820646", 31 + BENT_OVER_ROW_BARBELL: "55E6546F", 32 + BENT_OVER_ROW_DUMBBELL: "23E92538", 33 + BICEP_CURL_BARBELL: "A5AC6449", 34 + BICEP_CURL_CABLE: "ADA8623C", 35 + BICEP_CURL_DUMBBELL: "37FCC2BB", 36 + BICEP_CURL_MACHINE: "AF328E3D", 37 + BICEP_CURL_SUSPENSION: "0B4C1902", 38 + BICYCLE_CRUNCH: "A41C7261", 39 + BICYCLE_CRUNCH_RAISED_LEGS: "594450D2", 40 + BIRD_DOG: "BD0AD077", 41 + BOXING: "A0D8FA1B", 42 + BOX_JUMP: "56092DD1", 43 + BOX_SQUAT_BARBELL: "38FC1AB9", 44 + BULGARIAN_SPLIT_SQUAT: "B5D3A742", 45 + BURPEE: "BB792A36", 46 + BURPEE_OVER_THE_BAR: "86B00DDE", 47 + BUTTERFLY_PEC_DECK: "9DCE2D64", 48 + CABLE_CORE_PALLOFF_PRESS: "CC55119B", 49 + CABLE_CRUNCH: "23A48484", 50 + CABLE_FLY_CROSSOVERS: "651F844C", 51 + CABLE_PULL_THROUGH: "8C331CD8", 52 + CABLE_TWIST_DOWN_TO_UP: "92D858EA", 53 + CABLE_TWIST_UP_TO_DOWN: "A2D838BD", 54 + CALF_EXTENSION_MACHINE: "47B9DF13", 55 + CALF_PRESS_MACHINE: "91237BDD", 56 + CHEST_DIP: "6FCD7755", 57 + CHEST_DIP_ASSISTED: "E9E4089F", 58 + CHEST_DIP_WEIGHTED: "29472BE1", 59 + CHEST_FLY_BAND: "DDB7C19F", 60 + CHEST_FLY_DUMBBELL: "12017185", 61 + CHEST_FLY_MACHINE: "78683336", 62 + CHEST_FLY_SUSPENSION: "720B0D70", 63 + CHEST_PRESS_BAND: "EAC7D9C5", 64 + CHEST_PRESS_MACHINE: "7EB3F7C3", 65 + CHEST_SUPPORTED_INCLINE_ROW_DUMBBELL: "914F3A96", 66 + CHEST_SUPPORTED_REVERSE_FLY_DUMBBELL: "B582299E", 67 + CHEST_SUPPORTED_Y_RAISE_DUMBBELL: "F21D5693", 68 + CHIN_UP: "29083183", 69 + CHIN_UP_ASSISTED: "D23C609B", 70 + CHIN_UP_WEIGHTED: "023943F1", 71 + CLAMSHELL: "CC016611", 72 + CLAP_PUSH_UPS: "10D76E8F", 73 + CLEAN: "ABB00838", 74 + CLEAN_AND_JERK: "9E09CEC3", 75 + CLEAN_AND_PRESS: "D3095577", 76 + CLEAN_PULL: "652FEA39", 77 + CLIMBING: "E23F1F2B", 78 + CONCENTRATION_CURL: "724CDE60", 79 + CROSS_BODY_HAMMER_CURL: "32C4D4A2", 80 + CRUNCH: "DCF3B31B", 81 + CRUNCH_MACHINE: "EB43ADD4", 82 + CRUNCH_WEIGHTED: "D928C232", 83 + CURTSY_LUNGE_DUMBBELL: "D39EC9EB", 84 + CYCLING: "D8F7F851", 85 + DEAD_BUG: "D8911FC4", 86 + DEAD_HANG: "B9380898", 87 + DEADLIFT_BAND: "99507114", 88 + DEADLIFT_BARBELL: "C6272009", 89 + DEADLIFT_DUMBBELL: "5F4E6DD3", 90 + DEADLIFT_HIGH_PULL: "FA5D0DE1", 91 + DEADLIFT_SMITH_MACHINE: "20870ED5", 92 + DEADLIFT_TRAP_BAR: "B923B230", 93 + DECLINE_BENCH_PRESS_BARBELL: "DA0F0470", 94 + DECLINE_BENCH_PRESS_DUMBBELL: "18487FA7", 95 + DECLINE_BENCH_PRESS_MACHINE: "FAF31231", 96 + DECLINE_BENCH_PRESS_SMITH_MACHINE: "FFC106CB", 97 + DECLINE_CHEST_FLY_DUMBBELL: "A351AED7", 98 + DECLINE_CRUNCH: "BC10A922", 99 + DECLINE_CRUNCH_WEIGHTED: "B2398CD1", 100 + DECLINE_PUSH_UP: "C43825EA", 101 + DIAMOND_PUSH_UP: "6575F52D", 102 + DOWNWARD_DOG: "7DA843A3", 103 + DRAG_CURL: "D950429E", 104 + DRAGON_FLAG: "AFC29472", 105 + DRAGONFLY: "B7192800", 106 + DUMBBELL_ROW: "F1E57334", 107 + DUMBBELL_SNATCH: "F3717B0E", 108 + DUMBBELL_SQUEEZE_PRESS: "F72FA239", 109 + DUMBBELL_STEP_UP: "BF6ECE89", 110 + ELBOW_TO_KNEE: "A01BE509", 111 + ELLIPTICAL_TRAINER: "3303376C", 112 + EZ_BAR_BICEPS_CURL: "01A35BF9", 113 + FACE_PULL: "BE640BA0", 114 + FARMERS_WALK: "50C613D0", 115 + FEET_UP_BENCH_PRESS_BARBELL: "867AC3B6", 116 + FIRE_HYDRANTS: "2AF8B552", 117 + FLOOR_PRESS_BARBELL: "D53F2886", 118 + FLOOR_PRESS_DUMBBELL: "756EE329", 119 + FLOOR_TRICEPS_DIP: "A57D38D5", 120 + FLUTTER_KICKS: "2FA77B28", 121 + FROG_JUMPS: "207DC636", 122 + FROG_PUMPS_DUMBBELL: "F6948F17", 123 + FRONT_LEVER_HOLD: "0E608350", 124 + FRONT_LEVER_RAISE: "30F03BF0", 125 + FRONT_RAISE_BAND: "47B036EF", 126 + FRONT_RAISE_BARBELL: "BD86EFD5", 127 + FRONT_RAISE_CABLE: "DBB91A3C", 128 + FRONT_RAISE_DUMBBELL: "8293E554", 129 + FRONT_RAISE_SUSPENSION: "796E8E2C", 130 + FRONT_SQUAT: "5046D0A9", 131 + FULL_SQUAT: "1283BBA6", 132 + GLUTE_BRIDGE: "CDA23948", 133 + GLUTE_HAM_RAISE: "68B83EE0", 134 + GLUTE_KICKBACK_MACHINE: "CBA02382", 135 + GLUTE_KICKBACK_ON_FLOOR: "987234AB", 136 + GOBLET_SQUAT: "3D0C7C75", 137 + GOOD_MORNING_BARBELL: "4180C405", 138 + GORILLA_ROW_KETTLEBELL: "05487216", 139 + HACK_SQUAT: "AC5A4C58", 140 + HACK_SQUAT_MACHINE: "1E42FD5F", 141 + HAMMER_CURL_BAND: "1D4B3D6B", 142 + HAMMER_CURL_CABLE: "36E8F14E", 143 + HAMMER_CURL_DUMBBELL: "7E3BC8B6", 144 + HANDSTAND_HOLD: "BE3615CF", 145 + HANDSTAND_PUSH_UP: "90B04F96", 146 + HANG_CLEAN: "BD4E7E53", 147 + HANGING_KNEE_RAISE: "08590920", 148 + HANGING_LEG_RAISE: "F8356514", 149 + HANG_SNATCH: "F4E77594", 150 + HEEL_TAPS: "567FB505", 151 + HEX_PRESS_DUMBBELL: "BE89C631", 152 + HIGH_KNEES: "150E076B", 153 + HIGH_KNEE_SKIPS: "C9CCB878", 154 + HIIT: "023947AB", 155 + HIKING: "1C34A172", 156 + HINGE_DUMBELLS: "fa7ec042-a674-4601-b13a-9d4f623a6074", 157 + HIP_ABDUCTION_MACHINE: "F4B4C6EE", 158 + HIP_ADDUCTION_MACHINE: "8BEBFED6", 159 + HIP_THRUST: "92B8C7E1", 160 + HIP_THRUST_BARBELL: "D57C2EC7", 161 + HIP_THRUST_MACHINE: "68CE0B9B", 162 + HIP_THRUST_SMITH_MACHINE: "291ABA92", 163 + HOLLOW_ROCK: "970ADF87", 164 + INCLINE_BENCH_PRESS_BARBELL: "50DFDFAB", 165 + INCLINE_BENCH_PRESS_DUMBBELL: "07B38369", 166 + INCLINE_BENCH_PRESS_SMITH_MACHINE: "3A6FA3D1", 167 + INCLINE_CHEST_FLY_DUMBBELL: "D3E2AB55", 168 + INCLINE_CHEST_PRESS_MACHINE: "FBF92739", 169 + INCLINE_PUSH_UPS: "39C99849", 170 + INVERTED_ROW: "425805F4", 171 + ISO_LATERAL_CHEST_PRESS_MACHINE: "24706DCD", 172 + ISO_LATERAL_HIGH_ROW_MACHINE: "BC3492DA", 173 + ISO_LATERAL_LOW_ROW: "91FAFBA3", 174 + ISO_LATERAL_ROW_MACHINE: "AA1EB7D8", 175 + JACKKNIFE_SIT_UP: "32B0B590", 176 + JACK_KNIFE_SUSPENSION: "D410F649", 177 + JM_PRESS_BARBELL: "74103F24", 178 + JUMPING_JACK: "991833C2", 179 + JUMPING_LUNGE: "5CC07A1F", 180 + JUMP_ROPE: "040BA2E3", 181 + JUMP_SHRUG: "BA3DE542", 182 + JUMP_SQUAT: "70D4EBBF", 183 + KETTLEBELL_AROUND_THE_WORLD: "55BA475A", 184 + KETTLEBELL_CLEAN: "F99C211D", 185 + KETTLEBELL_CURL: "4E239ED8", 186 + KETTLEBELL_GOBLET_SQUAT: "A127DA73", 187 + KETTLEBELL_HALO: "4288G454", 188 + KETTLEBELL_HIGH_PULL: "9B13BA4B", 189 + KETTLEBELL_SHOULDER_PRESS: "6433CD93", 190 + KETTLEBELL_SNATCH: "89304423", 191 + KETTLEBELL_SWING: "F8A0FCCA", 192 + KETTLEBELL_TURKISH_GET_UP: "5F8903BF", 193 + KIPPING_PULL_UP: "A91838C0", 194 + KNEELING_PULLDOWN_BAND: "D82EA543", 195 + KNEELING_PUSH_UP: "B74A95BB", 196 + KNEE_RAISE_PARALLEL_BARS: "98237BA2", 197 + LANDMINE_180: "923874CA", 198 + LANDMINE_ROW: "D7D7FCCE", 199 + LANDMINE_SQUAT_AND_PRESS: "983274DD", 200 + LATERAL_BAND_WALKS: "EC02979E", 201 + LATERAL_BOX_JUMP: "07EBC4DC", 202 + LATERAL_LEG_RAISES: "DC59D143", 203 + LATERAL_LUNGE: "F2A37357", 204 + LATERAL_LUNGE_DUMBELLS: "e64cb57f-4b9f-4397-b155-ee1eeda65e6c", 205 + LATERAL_RAISE_BAND: "DF200976", 206 + LATERAL_RAISE_CABLE: "BE289E45", 207 + LATERAL_RAISE_DUMBBELL: "422B08F1", 208 + LATERAL_RAISE_MACHINE: "D5D0354D", 209 + LATERAL_SQUAT: "D731CCA8", 210 + LAT_PULLDOWN_BAND: "D2FE7B2E", 211 + LAT_PULLDOWN_CABLE: "6A6C31A5", 212 + LAT_PULLDOWN_CLOSE_GRIP_CABLE: "4E5257DE", 213 + LAT_PULLDOWN_MACHINE: "473CF5B8", 214 + LEANBACK_ARMS_CROSSED: "24bdb178-94f3-4eee-a06a-b522f294fc4c", 215 + LEG_EXTENSION_MACHINE: "75A4F6C4", 216 + LEG_PRESS_HORIZONTAL_MACHINE: "0EB695C9", 217 + LEG_PRESS_MACHINE: "C7973E0E", 218 + LEG_RAISE_PARALLEL_BARS: "0482DA98", 219 + LOW_CABLE_FLY_CROSSOVERS: "293483AD", 220 + LOW_ROW_SUSPENSION: "8A2E6481", 221 + L_SIT_HOLD: "6D54A050", 222 + LUNGE: "5E1A7777", 223 + LUNGE_BARBELL: "6E6EE645", 224 + LUNGE_DUMBBELL: "B537D09F", 225 + LYING_KNEE_RAISE: "BD5935CF", 226 + LYING_LEG_CURL_MACHINE: "B8127AD1", 227 + LYING_LEG_RAISE: "09C9F635", 228 + LYING_NECK_CURLS: "22FEDCA4", 229 + LYING_NECK_CURLS_WEIGHTED: "31B8DA0F", 230 + LYING_NECK_EXTENSION: "0910BD28", 231 + LYING_NECK_EXTENSION_WEIGHTED: "D6A73CF2", 232 + MEADOWS_ROWS_BARBELL: "C732C341", 233 + MOUNTAIN_CLIMBER: "F49E31D6", 234 + MUSCLE_UP: "9F9C164B", 235 + NEGATIVE_PULL_UP: "F60BDDF8", 236 + NORDIC_HAMSTRINGS_CURLS: "108D7A14", 237 + OBLIQUE_CRUNCH: "DBE341AA", 238 + ONE_ARM_PUSH_UP: "B140095E", 239 + OVERHEAD_CURL_CABLE: "582ADA23", 240 + OVERHEAD_DUMBBELL_LUNGE: "4C6721B9", 241 + OVERHEAD_PLATE_RAISE: "54E60954", 242 + OVERHEAD_PRESS_BARBELL: "7B8D84E8", 243 + OVERHEAD_PRESS_DUMBBELL: "6AC96645", 244 + OVERHEAD_PRESS_SMITH_MACHINE: "B09A1304", 245 + OVERHEAD_SQUAT: "2CFED196", 246 + OVERHEAD_TRICEPS_EXTENSION_CABLE: "B5EFBF9C", 247 + PARTIAL_GLUTE_BRIDGE_BARBELL: "FBEE8279", 248 + PAUSE_SQUAT_BARBELL: "CE1054CE", 249 + PENDLAY_ROW_BARBELL: "018ADC12", 250 + PENDULUM_SQUAT_MACHINE: "30E293E3", 251 + PIKE_PUSHUP: "0EFE8162", 252 + PILATES: "EC2510CD", 253 + PINWHEEL_CURL_DUMBBELL: "942BAD12", 254 + PISTOL_SQUAT: "3FF6A22E", 255 + PLANK: "C6C9B8A0", 256 + PLANK_PUSHUP: "31436F5D", 257 + PLATE_CURL: "9283ABD5", 258 + PLATE_FRONT_RAISE: "DBF9273A", 259 + PLATE_PRESS: "982734D4", 260 + PLATE_SQUEEZE_SVEND_PRESS: "9373FSD1", 261 + POWER_CLEAN: "C628D768", 262 + POWER_SNATCH: "E22F9358", 263 + PREACHER_CURL_BARBELL: "4F942934", 264 + PREACHER_CURL_DUMBBELL: "FAB6EB2F", 265 + PREACHER_CURL_MACHINE: "1E9A6B8E", 266 + PRESS_UNDER: "84A77566", 267 + PULLOVER_DUMBBELL: "67280085", 268 + PULLOVER_MACHINE: "B123DD01", 269 + PULL_UP: "1B2B1E7C", 270 + PULL_UP_ASSISTED: "2C37EC5E", 271 + PULL_UP_BAND: "56808FD2", 272 + PULL_UP_WEIGHTED: "729237D1", 273 + PUSH_PRESS: "542F3CD5", 274 + PUSH_UP: "392887AA", 275 + PUSH_UP_CLOSE_GRIP: "947DAC23", 276 + PUSH_UP_WEIGHTED: "19372ABC", 277 + RACK_PULL: "FE389074", 278 + REAR_DELT_REVERSE_FLY_CABLE: "C315DC2A", 279 + REAR_DELT_REVERSE_FLY_DUMBBELL: "E5988A0A", 280 + REAR_DELT_REVERSE_FLY_MACHINE: "D8281C62", 281 + REAR_KICK_MACHINE: "1ADF8723", 282 + RENEGADE_ROW_DUMBBELL: "1B89CA1B", 283 + REVERSE_CRUNCH: "7952B5CD", 284 + REVERSE_CURL_BARBELL: "112FC6B7", 285 + REVERSE_CURL_CABLE: "9F48F858", 286 + REVERSE_CURL_DUMBBELL: "B567DD46", 287 + REVERSE_FLY_SINGLE_ARM_CABLE: "9264ADA1", 288 + REVERSE_GRIP_CONCENTRATION_CURL: "1FF4097B", 289 + REVERSE_GRIP_LAT_PULLDOWN_CABLE: "046E25A2", 290 + REVERSE_HYPEREXTENSION: "7C0028C3", 291 + REVERSE_LUNGE: "C284D923", 292 + REVERSE_LUNGE_BARBELL: "818BA121", 293 + REVERSE_LUNGE_DUMBBELL: "FFDA283B", 294 + REVERSE_PLANK: "99B49684", 295 + RING_DIPS: "51A0EDAA", 296 + RING_PULL_UP: "5F09F0FC", 297 + RING_PUSH_UP: "AEA56BDC", 298 + ROMANIAN_DEADLIFT_BARBELL: "2B4B7310", 299 + ROMANIAN_DEADLIFT_DUMBBELL: "72CFFAD5", 300 + ROPE_CABLE_CURL: "234897AB", 301 + ROPE_STRAIGHT_ARM_PULLDOWN: "9273BA17", 302 + ROWING_MACHINE: "0222DB42", 303 + RUNNING: "AC1BB830", 304 + RUSSIAN_TWIST_BODYWEIGHT: "BB83BDDE", 305 + RUSSIAN_TWIST_WEIGHTED: "2982AA23", 306 + SCAPULAR_PULL_UPS: "C7AE420A", 307 + SEATED_CABLE_ROW_BAR_GRIP: "F1D60854", 308 + SEATED_CABLE_ROW_BAR_WIDE_GRIP: "C3BCABB3", 309 + SEATED_CABLE_ROW_V_GRIP_CABLE: "0393F233", 310 + SEATED_CALF_RAISE: "062AB91A", 311 + SEATED_CHEST_FLYS_CABLE: "6B4C797E", 312 + SEATED_DIP_MACHINE: "5122E7D9", 313 + SEATED_INCLINE_CURL_DUMBBELL: "8BAB2735", 314 + SEATED_LATERAL_RAISE_DUMBBELL: "9372FFAA", 315 + SEATED_LEG_CURL_MACHINE: "11A123F3", 316 + SEATED_OVERHEAD_PRESS_BARBELL: "91AF29E0", 317 + SEATED_OVERHEAD_PRESS_DUMBBELL: "9930DF71", 318 + SEATED_PALMS_UP_WRIST_CURL: "1006DF48", 319 + SEATED_ROW_MACHINE: "1DF4A847", 320 + SEATED_SHOULDER_PRESS_MACHINE: "9237BAD1", 321 + SEATED_TRICEPS_PRESS: "234BC743", 322 + SEATED_WRIST_EXTENSION_BARBELL: "9202CC23", 323 + SHOULDER_PRESS_DUMBBELL: "878CD1D0", 324 + SHOULDER_PRESS_MACHINE_PLATES: "059E835D", 325 + SHOULDER_TAPS: "502FCE31", 326 + SHRUG_BARBELL: "0B841777", 327 + SHRUG_CABLE: "FFABC123", 328 + SHRUG_DUMBBELL: "ABEC557F", 329 + SHRUG_MACHINE: "19A38071", 330 + SHRUG_SMITH_MACHINE: "742E5BD5", 331 + SIDE_BEND: "37F9EDA7", 332 + SIDE_BEND_DUMBBELL: "026FD047", 333 + SIDE_PLANK: "E3EDA509", 334 + SINGLE_ARM_CABLE_CROSSOVER: "8372BBCC", 335 + SINGLE_ARM_CABLE_ROW: "D0C4A899", 336 + SINGLE_ARM_CURL_CABLE: "B33B526E", 337 + SINGLE_ARM_LANDMINE_PRESS_BARBELL: "1837BA23", 338 + SINGLE_ARM_LATERAL_RAISE_CABLE: "DE68C825", 339 + SINGLE_ARM_LAT_PULLDOWN: "2EE45F81", 340 + SINGLE_ARM_TRICEP_EXTENSION_DUMBBELL: "8347DFD1", 341 + SINGLE_ARM_TRICEPS_PUSHDOWN_CABLE: "552AB030", 342 + SINGLE_LEG_EXTENSIONS: "629AE73D", 343 + SINGLE_LEG_GLUTE_BRIDGE: "CBC0D834", 344 + SINGLE_LEG_HIP_THRUST: "487B3755", 345 + SINGLE_LEG_HIP_THRUST_DUMBBELL: "D1CD146F", 346 + SINGLE_LEG_PRESS_MACHINE: "3FD83744", 347 + SINGLE_LEG_ROMANIAN_DEADLIFT_BARBELL: "93472AC1", 348 + SINGLE_LEG_ROMANIAN_DEADLIFT_DUMBBELL: "937292AB", 349 + SINGLE_LEG_SQUAT_DUMBBELL: "6c3d0197-63a5-4165-9767-2f5a39e48c96", 350 + SINGLE_LEG_STANDING_CALF_RAISE: "238BA231", 351 + SINGLE_LEG_STANDING_CALF_RAISE_BARBELL: "E51CCBE5", 352 + SINGLE_LEG_STANDING_CALF_RAISE_DUMBBELL: "5DA40761", 353 + SINGLE_LEG_STANDING_CALF_RAISE_MACHINE: "B05C2C29", 354 + SISSY_SQUAT_WEIGHTED: "F5DEF1EB", 355 + SIT_UP: "022DF610", 356 + SIT_UP_WEIGHTED: "9237BA12", 357 + SKATING: "24A809EF", 358 + SKIING: "84325755", 359 + SKULLCRUSHER_BARBELL: "875F585F", 360 + SKULLCRUSHER_DUMBBELL: "68F8A292", 361 + SLED_PUSH: "7757171F", 362 + SNATCH: "FB09C938", 363 + SNOWBOARDING: "911A58D3", 364 + SPIDER_CURL_BARBELL: "2348AB72", 365 + SPIDER_CURL_DUMBBELL: "90427D4A", 366 + SPIDERMAN: "C10A5AC9", 367 + SPINNING: "213AB238", 368 + SPLIT_JERK: "E764B907", 369 + SPLIT_SQUAT_DUMBBELL: "20C1A3CB", 370 + SPRINTS: "9283BABA", 371 + SQUAT_BAND: "F1258206", 372 + SQUAT_BARBELL: "D04AC939", 373 + SQUAT_BODYWEIGHT: "9694DA61", 374 + SQUAT_DUMBBELL: "DCFF3E9F", 375 + SQUAT_MACHINE: "CC35A01F", 376 + SQUAT_ROW: "A8814C06", 377 + SQUAT_SMITH_MACHINE: "DDCC3821", 378 + SQUAT_SUSPENSION: "B82D6418", 379 + STAIR_MACHINE_FLOORS: "4377A52B", 380 + STAIR_MACHINE_STEPS: "4377A52C", 381 + STANDING_CABLE_GLUTE_KICKBACKS: "ACB2751D", 382 + STANDING_CALF_RAISE: "06745E58", 383 + STANDING_CALF_RAISE_BARBELL: "E53CCBE5", 384 + STANDING_CALF_RAISE_DUMBBELL: "6DA40660", 385 + STANDING_CALF_RAISE_MACHINE: "E05C2C38", 386 + STANDING_CALF_RAISE_SMITH: "AA52E8D2", 387 + STANDING_LEG_CURLS: "6120CAAB", 388 + STANDING_MILITARY_PRESS_BARBELL: "073032BB", 389 + STEP_UP: "128A2381", 390 + STERNUM_PULL_UP_GIRONDA: "EE2938D1", 391 + STRAIGHT_ARM_LAT_PULLDOWN_CABLE: "D2387AB1", 392 + STRAIGHT_LEG_DEADLIFT: "2A48E443", 393 + STRETCHING: "527DA061", 394 + SUITCASE_SQUAT_DUMBBELLS: "42914e9c-a37f-4a52-acbb-62fba59dbbff", 395 + SUMO_DEADLIFT: "D20D7BBE", 396 + SUMO_SQUAT: "3F5F8D40", 397 + SUMO_SQUAT_BARBELL: "6622E5A0", 398 + SUMO_SQUAT_DUMBBELL: "05293BCA", 399 + SUMO_SQUAT_KETTLEBELL: "5E10D0E6", 400 + SUPERMAN: "218DA87C", 401 + SWIMMING: "B60A678F", 402 + T_BAR_ROW: "08A2974E", 403 + THRUSTER_BARBELL: "90E506D5", 404 + THRUSTER_KETTLEBELL: "10313AFD", 405 + TOES_TO_BAR: "B94E35E1", 406 + TOE_TOUCH: "75BAC5C3", 407 + TORSO_ROTATION: "FBB62888", 408 + TREADMILL: "243710DE", 409 + TRICEPS_DIP: "28BB4A95", 410 + TRICEPS_DIP_ASSISTED: "4B4BF8C2", 411 + TRICEPS_DIP_WEIGHTED: "10347BAC", 412 + TRICEPS_EXTENSION_BARBELL: "2F8D3067", 413 + TRICEPS_EXTENSION_CABLE: "21310F5F", 414 + TRICEPS_EXTENSION_DUMBBELL: "3765684D", 415 + TRICEPS_EXTENSION_MACHINE: "3092FADD", 416 + TRICEPS_EXTENSION_SUSPENSION: "6182EE83", 417 + TRICEPS_KICKBACK_CABLE: "EC3B69A3", 418 + TRICEPS_KICKBACK_DUMBBELL: "6127A3AD", 419 + TRICEPS_PRESSDOWN: "CDC472B1", 420 + TRICEPS_PUSHDOWN: "93A552C6", 421 + TRICEPS_ROPE_PUSHDOWN: "94B7239B", 422 + UPRIGHT_ROW_BARBELL: "7AB9A362", 423 + UPRIGHT_ROW_CABLE: "286C1D0B", 424 + UPRIGHT_ROW_DUMBBELL: "797F0782", 425 + VERTICAL_TRACTION_MACHINE: "72880C57", 426 + V_UP: "6BE68B62", 427 + WAITER_CURL_DUMBBELL: "72297E8C", 428 + WALKING: "33EDD7DB", 429 + WALKING_LUNGE: "32HKJ34K", 430 + WALKING_LUNGE_DUMBBELL: "A733CC5B", 431 + WALL_BALL: "A1F47ACC", 432 + WALL_SIT: "C8706C80", 433 + WARM_UP: "79EF4E4F", 434 + WIDE_ELBOW_TRICEPS_PRESS_DUMBBELL: "B31EB524", 435 + WIDE_PULL_UP: "7C50F118", 436 + WRIST_ROLLER: "0E4523F4", 437 + YOGA: "8C9D2928", 438 + ZERCHER_SQUAT: "40C6A9FC", 439 + ZOTTMAN_CURL_DUMBBELL: "123EE239", 440 + };
+24 -9
README.md
··· 26 26 27 27 ### Step 1 — Generate the exercise map template 28 28 29 - Reads your CSV and outputs an `exercise-map.ts` file listing every unique exercise name: 29 + Reads your CSV and outputs `exercise-map.ts` listing every unique exercise name: 30 30 31 31 ```sh 32 32 deno task generate-map 33 33 ``` 34 34 35 - ### Step 2 — Get your Hevy exercise template IDs 35 + ### Step 2 — Generate the Hevy exercise list 36 36 37 - Fetches all exercise templates from your Hevy account and prints them as mappable key/value pairs: 37 + Fetches all exercise templates from your Hevy account and writes `HEVY_EXERCISES.ts`, a typed constant with ALL_CAPS keys mapping to Hevy template IDs: 38 38 39 39 ```sh 40 - deno task get-templates 40 + deno task generate-template-list 41 + ``` 42 + 43 + This produces entries like: 44 + 45 + ```ts 46 + export const HEVY_EXERCISES: Record<string, string> = { 47 + RUNNING: "abc123-...", 48 + DUMBBELL_ROW: "def456-...", 49 + // ... 50 + }; 41 51 ``` 42 52 43 53 ### Step 3 — Fill in the exercise map 44 54 45 - Open `exercise-map.ts` and paste in the Hevy template ID for each exercise. Any exercise left as an empty string will be skipped during import. 55 + Open `exercise-map.ts` and set each value to the matching `HEVY_EXERCISES` constant. Use your editor's autocomplete to browse available keys: 46 56 47 57 ```ts 58 + import { HEVY_EXERCISES } from './HEVY_EXERCISES.ts'; 59 + 48 60 export const EXERCISE_MAP: Record<string, string> = { 49 - "Running": "abc123", 50 - "Dumbbell Row": "def456", 61 + "Running": HEVY_EXERCISES.RUNNING, 62 + "Dumbbell Row": HEVY_EXERCISES.DUMBBELL_ROW, 51 63 // ... 52 64 }; 53 65 ``` 66 + 67 + Any exercise left as `""` will be skipped during import. 54 68 55 69 ### Step 4 — Run the import 56 70 ··· 58 72 deno task import 59 73 ``` 60 74 61 - Workouts are sent one day at a time with a 1.5-second delay between requests to respect Hevy's rate limits. Exercises not found in the map are skipped with a warning. 75 + Workouts are sent one day at a time with a 1.5-second delay between requests to respect Hevy's rate limits. 62 76 63 77 ## Files 64 78 ··· 68 82 | `.env.sample` | Template for `.env` | 69 83 | `config.ts` | Loads env vars, CSV path, API base URL | 70 84 | `generate-map.ts` | Generates `exercise-map.ts` from the CSV | 71 - | `get-templates.ts` | Lists Hevy exercise templates and their IDs | 85 + | `generate-template-list.ts` | Fetches Hevy templates and writes `HEVY_EXERCISES.ts` | 86 + | `HEVY_EXERCISES.ts` | Generated — ALL_CAPS constants mapping to Hevy template IDs | 72 87 | `exercise-map.ts` | Maps Fitbod exercise names → Hevy template IDs | 73 88 | `import.ts` | Main import script | 74 89 | `WorkoutExport.csv` | Your Fitbod data export (not committed) |
+1 -1
deno.json
··· 1 1 { 2 2 "tasks": { 3 3 "generate-map": "deno run --allow-read --allow-write generate-map.ts", 4 - "get-templates": "deno run --allow-read --allow-net get-templates.ts", 4 + "generate-template-list": "deno run --allow-read --allow-write --allow-net generate-template-list.ts", 5 5 "import": "deno run --allow-read --allow-net import.ts" 6 6 } 7 7 }
+9 -7
exercise-map.ts
··· 1 1 // exercise-map.ts 2 - // Replace the empty strings with your actual Hevy exercise_template_ids from get-templates.ts 2 + // Run generate-template-list.ts first, then fill in each value using HEVY_EXERCISES.KEY 3 + // e.g. "Running": H.RUNNING 4 + import { HEVY_EXERCISES as H } from './HEVY_EXERCISES.ts'; 3 5 4 6 export const EXERCISE_MAP: Record<string, string> = { 5 - "Running": "", 6 - "Rowing": "", 7 - "Dumbbell Row": "", 8 - "Dumbbell Bicep Curl": "", 9 - "Dumbbell Skullcrusher": "", 10 - "Dumbbell Fly": "", 7 + "Running": H.RUNNING, 8 + "Rowing": H.ROWING, 9 + "Dumbbell Row": H.DUMBBELL_ROW, 10 + "Dumbbell Bicep Curl": H.DUMBBELL_BICEP_CURL, 11 + "Dumbbell Skullcrusher": H.DUMBBELL_SKULLCRUSHER, 12 + "Dumbbell Fly": H.DUMBBELL_FLY, 11 13 "Dumbbell Incline Bench Press": "", 12 14 "Bench Dip": "", 13 15 "Dumbbell Goblet Squat": "",
+3 -1
generate-map.ts
··· 34 34 } 35 35 36 36 let fileContent = `// exercise-map.ts\n`; 37 - fileContent += `// Replace the empty strings with your actual Hevy exercise_template_ids from get-templates.ts\n\n`; 37 + fileContent += `// Run generate-template-list.ts first, then fill in each value using HEVY_EXERCISES.KEY\n`; 38 + fileContent += `// e.g. "Running": HEVY_EXERCISES.RUNNING\n`; 39 + fileContent += `import { HEVY_EXERCISES } from './HEVY_EXERCISES.ts';\n\n`; 38 40 fileContent += `export const EXERCISE_MAP: Record<string, string> = {\n`; 39 41 40 42 for (const ex of uniqueExercises) {
+33
generate-template-list.ts
··· 1 + // generate-template-list.ts 2 + import { HEVY_API_KEY, HEVY_API_BASE } from './config.ts'; 3 + 4 + if (!HEVY_API_KEY) { 5 + console.error("Set HEVY_API_KEY in .env"); 6 + Deno.exit(1); 7 + } 8 + 9 + const toKey = (title: string) => { 10 + const key = title.toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/^_+|_+$/g, ''); 11 + return /^[0-9]/.test(key) ? `_${key}` : key; 12 + }; 13 + 14 + const entries: [string, string][] = []; 15 + let page = 1, pageCount = 1; 16 + 17 + while (page <= pageCount) { 18 + const res = await fetch(`${HEVY_API_BASE}/exercise_templates?page=${page}&pageSize=100`, { 19 + headers: { 'api-key': HEVY_API_KEY } 20 + }); 21 + if (!res.ok) throw new Error(`${res.status} ${res.statusText}`); 22 + const data = await res.json(); 23 + pageCount = data.page_count ?? 1; 24 + for (const e of data.exercise_templates) entries.push([toKey(e.title), e.id]); 25 + page++; 26 + } 27 + 28 + const lines = entries.map(([k, v]) => ` ${k}: "${v}",`).join('\n'); 29 + await Deno.writeTextFile( 30 + 'HEVY_EXERCISES.ts', 31 + `// HEVY_EXERCISES.ts\n// Generated by generate-template-list.ts — do not edit manually\n\nexport const HEVY_EXERCISES: Record<string, string> = {\n${lines}\n};\n` 32 + ); 33 + console.log(`Generated HEVY_EXERCISES.ts with ${entries.length} exercises.`);
-38
get-templates.ts
··· 1 - // get-templates.tsm 2 - import { HEVY_API_KEY, HEVY_API_BASE } from './config.ts'; 3 - 4 - async function getTemplates() { 5 - if (HEVY_API_KEY === 'YOUR_HEVY_API_KEY_HERE') { 6 - console.error("Please set your HEVY_API_KEY in config.tsm first."); 7 - return; 8 - } 9 - 10 - try { 11 - console.log("--- Your Hevy Exercise Templates ---"); 12 - let page = 1; 13 - let pageCount = 1; 14 - 15 - while (page <= pageCount) { 16 - const response = await fetch(`${HEVY_API_BASE}/exercise_templates?page=${page}&pageSize=100`, { 17 - headers: { 'api-key': HEVY_API_KEY } 18 - }); 19 - 20 - if (!response.ok) { 21 - throw new Error(`Failed to fetch templates: ${response.status} ${response.statusText}`); 22 - } 23 - 24 - const data = await response.json(); 25 - pageCount = data.page_count ?? 1; 26 - 27 - for (const ex of data.exercise_templates) { 28 - console.log(`"${ex.title}": "${ex.id}",`); 29 - } 30 - 31 - page++; 32 - } 33 - } catch (error) { 34 - console.error("Error fetching templates:", error); 35 - } 36 - } 37 - 38 - getTemplates();