From 80654de67bc40cb5f820e4375a5370644cf65b59 Mon Sep 17 00:00:00 2001 From: Clawd Agent Date: Fri, 6 Mar 2026 12:18:15 +0100 Subject: [PATCH] fix: Include exercises.json in src/data for Docker build context --- backend/src/data/exercises.json | 287 ++++++++++++++++++ backend/src/routes/exerciseRecommendations.js | 2 +- 2 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 backend/src/data/exercises.json diff --git a/backend/src/data/exercises.json b/backend/src/data/exercises.json new file mode 100644 index 0000000..aa17062 --- /dev/null +++ b/backend/src/data/exercises.json @@ -0,0 +1,287 @@ +{ + "exercises": [ + { + "id": "bench_press", + "name": "Bänkpress", + "name_en": "Bench Press", + "category": "compound", + "primary_muscles": ["chest", "triceps", "front_delts"], + "secondary_muscles": ["core"], + "equipment": ["barbell", "bench"], + "difficulty": "intermediate", + "alternatives": ["dumbbell_press", "push_ups", "machine_chest_press"], + "cues": ["Skuldror ihop och ner", "Fötterna i golvet", "Kontrollerad excentrisk"], + "common_mistakes": ["Studsa stången", "För brett grepp", "Rumpan lyfter"] + }, + { + "id": "squat", + "name": "Knäböj", + "name_en": "Back Squat", + "category": "compound", + "primary_muscles": ["quads", "glutes"], + "secondary_muscles": ["hamstrings", "core", "lower_back"], + "equipment": ["barbell", "squat_rack"], + "difficulty": "intermediate", + "alternatives": ["goblet_squat", "leg_press", "front_squat", "bulgarian_split_squat"], + "cues": ["Bryt i höften först", "Knän i linje med tår", "Bröst upp"], + "common_mistakes": ["Knän faller in", "Hälar lyfter", "För mycket framåtlutning"] + }, + { + "id": "deadlift", + "name": "Marklyft", + "name_en": "Deadlift", + "category": "compound", + "primary_muscles": ["hamstrings", "glutes", "lower_back"], + "secondary_muscles": ["traps", "forearms", "core"], + "equipment": ["barbell"], + "difficulty": "intermediate", + "alternatives": ["romanian_deadlift", "trap_bar_deadlift", "sumo_deadlift"], + "cues": ["Stång nära kroppen", "Rak rygg", "Driv genom hälarna"], + "common_mistakes": ["Rundad rygg", "Stången för långt fram", "Sträcker knän för tidigt"] + }, + { + "id": "overhead_press", + "name": "Militärpress", + "name_en": "Overhead Press", + "category": "compound", + "primary_muscles": ["front_delts", "side_delts", "triceps"], + "secondary_muscles": ["core", "traps"], + "equipment": ["barbell"], + "difficulty": "intermediate", + "alternatives": ["dumbbell_shoulder_press", "arnold_press", "machine_shoulder_press"], + "cues": ["Spänn core", "Stång nära ansiktet", "Lås ut helt"], + "common_mistakes": ["Överdriven svank", "Armbågarna för långt ut", "Halvt ROM"] + }, + { + "id": "barbell_row", + "name": "Skivstångsrodd", + "name_en": "Barbell Row", + "category": "compound", + "primary_muscles": ["lats", "rhomboids", "rear_delts"], + "secondary_muscles": ["biceps", "lower_back"], + "equipment": ["barbell"], + "difficulty": "intermediate", + "alternatives": ["dumbbell_row", "cable_row", "t_bar_row", "machine_row"], + "cues": ["45° framåtlutning", "Dra mot naveln", "Skuldror ihop"], + "common_mistakes": ["För mycket kropp", "Rycker vikten", "Rundad rygg"] + }, + { + "id": "pull_ups", + "name": "Chins/Pull-ups", + "name_en": "Pull-ups", + "category": "compound", + "primary_muscles": ["lats", "biceps"], + "secondary_muscles": ["rear_delts", "core"], + "equipment": ["pull_up_bar"], + "difficulty": "intermediate", + "alternatives": ["lat_pulldown", "assisted_pull_ups", "inverted_rows"], + "cues": ["Initiera med skuldrorna", "Bröst mot stången", "Kontrollerad ner"], + "common_mistakes": ["Kipping", "Halvt ROM", "Ignorerar skulderbladen"] + }, + { + "id": "dumbbell_press", + "name": "Hantelpress", + "name_en": "Dumbbell Bench Press", + "category": "compound", + "primary_muscles": ["chest", "triceps", "front_delts"], + "secondary_muscles": ["core"], + "equipment": ["dumbbells", "bench"], + "difficulty": "beginner", + "alternatives": ["bench_press", "push_ups", "cable_fly"], + "cues": ["Hantlar i linje med bröstvårtorna", "Armbågar 45°", "Pressar ihop i toppen"], + "common_mistakes": ["Hantlar för högt", "Tappar kontroll"] + }, + { + "id": "romanian_deadlift", + "name": "Rumänsk marklyft", + "name_en": "Romanian Deadlift", + "category": "compound", + "primary_muscles": ["hamstrings", "glutes"], + "secondary_muscles": ["lower_back"], + "equipment": ["barbell"], + "difficulty": "intermediate", + "alternatives": ["stiff_leg_deadlift", "single_leg_rdl", "good_morning"], + "cues": ["Mjuka knän", "Höfterna bakåt", "Känn stretch i hamstrings"], + "common_mistakes": ["Böjer knäna för mycket", "Rundar ryggen"] + }, + { + "id": "leg_press", + "name": "Benpress", + "name_en": "Leg Press", + "category": "compound", + "primary_muscles": ["quads", "glutes"], + "secondary_muscles": ["hamstrings"], + "equipment": ["leg_press_machine"], + "difficulty": "beginner", + "alternatives": ["squat", "hack_squat", "goblet_squat"], + "cues": ["Fötter axelbrett", "Pressar genom hälarna", "Knän faller inte in"], + "common_mistakes": ["Rumpan lyfter", "Låser ut knäna", "För tungt för kontroll"] + }, + { + "id": "lat_pulldown", + "name": "Latsdrag", + "name_en": "Lat Pulldown", + "category": "compound", + "primary_muscles": ["lats", "biceps"], + "secondary_muscles": ["rear_delts", "rhomboids"], + "equipment": ["cable_machine"], + "difficulty": "beginner", + "alternatives": ["pull_ups", "assisted_pull_ups", "straight_arm_pulldown"], + "cues": ["Dra till nyckelbenet", "Bröst upp", "Kontrollerad excentrisk"], + "common_mistakes": ["Lutar sig för långt bak", "Armar gör allt jobb"] + }, + { + "id": "bicep_curl", + "name": "Bicepscurl", + "name_en": "Bicep Curl", + "category": "isolation", + "primary_muscles": ["biceps"], + "secondary_muscles": ["forearms"], + "equipment": ["dumbbells"], + "difficulty": "beginner", + "alternatives": ["barbell_curl", "hammer_curl", "cable_curl", "preacher_curl"], + "cues": ["Armbågar still", "Full ROM", "Kontrollerad ner"], + "common_mistakes": ["Svingar vikten", "Armbågarna rör sig"] + }, + { + "id": "tricep_pushdown", + "name": "Triceps pushdown", + "name_en": "Tricep Pushdown", + "category": "isolation", + "primary_muscles": ["triceps"], + "secondary_muscles": [], + "equipment": ["cable_machine"], + "difficulty": "beginner", + "alternatives": ["skull_crushers", "tricep_dips", "close_grip_bench"], + "cues": ["Armbågar intill kroppen", "Sträck ut helt", "Kontrollerad upp"], + "common_mistakes": ["Använder axlarna", "Armbågar rör sig"] + }, + { + "id": "lateral_raise", + "name": "Sidolyft", + "name_en": "Lateral Raise", + "category": "isolation", + "primary_muscles": ["side_delts"], + "secondary_muscles": ["traps"], + "equipment": ["dumbbells"], + "difficulty": "beginner", + "alternatives": ["cable_lateral_raise", "machine_lateral_raise"], + "cues": ["Liten böj i armbågen", "Lyft till axelhöjd", "Tummar något nedåt"], + "common_mistakes": ["Svingar vikten", "Axlar höjs mot öronen", "För tungt"] + }, + { + "id": "leg_curl", + "name": "Bencurl", + "name_en": "Leg Curl", + "category": "isolation", + "primary_muscles": ["hamstrings"], + "secondary_muscles": [], + "equipment": ["leg_curl_machine"], + "difficulty": "beginner", + "alternatives": ["nordic_curl", "swiss_ball_curl", "romanian_deadlift"], + "cues": ["Höfterna ner", "Curl hela vägen", "Kontrollerad excentrisk"], + "common_mistakes": ["Höfterna lyfter", "Halvt ROM"] + }, + { + "id": "leg_extension", + "name": "Benspark", + "name_en": "Leg Extension", + "category": "isolation", + "primary_muscles": ["quads"], + "secondary_muscles": [], + "equipment": ["leg_extension_machine"], + "difficulty": "beginner", + "alternatives": ["sissy_squat", "split_squat"], + "cues": ["Sträck ut helt", "Kontrollerad ner", "Håll i toppen"], + "common_mistakes": ["Svingar vikten", "Rycker upp"] + }, + { + "id": "face_pull", + "name": "Face pull", + "name_en": "Face Pull", + "category": "isolation", + "primary_muscles": ["rear_delts", "rhomboids"], + "secondary_muscles": ["traps", "rotator_cuff"], + "equipment": ["cable_machine"], + "difficulty": "beginner", + "alternatives": ["reverse_fly", "band_pull_apart"], + "cues": ["Dra mot ansiktet", "Externa rotation i toppen", "Skuldror ihop"], + "common_mistakes": ["För tungt", "Ingen extern rotation"] + }, + { + "id": "plank", + "name": "Plankan", + "name_en": "Plank", + "category": "isolation", + "primary_muscles": ["core"], + "secondary_muscles": ["shoulders", "glutes"], + "equipment": [], + "difficulty": "beginner", + "alternatives": ["dead_bug", "hollow_hold", "ab_wheel"], + "cues": ["Rak linje huvud-häl", "Spänn magen", "Andas"], + "common_mistakes": ["Hängande höfter", "Rumpan för högt"] + }, + { + "id": "cable_fly", + "name": "Cable fly", + "name_en": "Cable Fly", + "category": "isolation", + "primary_muscles": ["chest"], + "secondary_muscles": ["front_delts"], + "equipment": ["cable_machine"], + "difficulty": "beginner", + "alternatives": ["dumbbell_fly", "pec_deck"], + "cues": ["Mjuk armbåge", "Kramas rakt fram", "Känn stretch"], + "common_mistakes": ["Böjer armbågarna för mycket", "Går för tungt"] + }, + { + "id": "goblet_squat", + "name": "Goblet squat", + "name_en": "Goblet Squat", + "category": "compound", + "primary_muscles": ["quads", "glutes"], + "secondary_muscles": ["core"], + "equipment": ["dumbbell", "kettlebell"], + "difficulty": "beginner", + "alternatives": ["squat", "leg_press"], + "cues": ["Vikten mot bröstet", "Armbågar mellan knäna", "Bröst upp"], + "common_mistakes": ["Lutar framåt", "Hälar lyfter"] + }, + { + "id": "push_ups", + "name": "Armhävningar", + "name_en": "Push-ups", + "category": "compound", + "primary_muscles": ["chest", "triceps", "front_delts"], + "secondary_muscles": ["core"], + "equipment": [], + "difficulty": "beginner", + "alternatives": ["bench_press", "dumbbell_press", "knee_push_ups"], + "cues": ["Kroppen rak", "Armbågar 45°", "Bröst till golv"], + "common_mistakes": ["Hängande höfter", "Armbågar för brett", "Halvt ROM"] + } + ], + "muscle_groups": { + "chest": { "name": "Bröst", "exercises": ["bench_press", "dumbbell_press", "push_ups", "cable_fly"] }, + "back": { "name": "Rygg", "exercises": ["deadlift", "barbell_row", "pull_ups", "lat_pulldown"] }, + "shoulders": { "name": "Axlar", "exercises": ["overhead_press", "lateral_raise", "face_pull"] }, + "quads": { "name": "Framsida lår", "exercises": ["squat", "leg_press", "leg_extension", "goblet_squat"] }, + "hamstrings": { "name": "Baksida lår", "exercises": ["deadlift", "romanian_deadlift", "leg_curl"] }, + "glutes": { "name": "Säte", "exercises": ["squat", "deadlift", "romanian_deadlift", "leg_press"] }, + "biceps": { "name": "Biceps", "exercises": ["bicep_curl", "pull_ups", "barbell_row"] }, + "triceps": { "name": "Triceps", "exercises": ["tricep_pushdown", "bench_press", "overhead_press", "push_ups"] }, + "core": { "name": "Core/mage", "exercises": ["plank", "deadlift", "squat"] } + }, + "equipment_map": { + "barbell": "Skivstång", + "dumbbells": "Hantlar", + "cable_machine": "Kabelmaskin", + "bench": "Bänk", + "squat_rack": "Knäböjsställning", + "pull_up_bar": "Chinsstång", + "leg_press_machine": "Benpressmaskin", + "leg_curl_machine": "Bencurlmaskin", + "leg_extension_machine": "Bensparkmaskin", + "kettlebell": "Kettlebell" + } +} diff --git a/backend/src/routes/exerciseRecommendations.js b/backend/src/routes/exerciseRecommendations.js index fce87a3..b985f61 100644 --- a/backend/src/routes/exerciseRecommendations.js +++ b/backend/src/routes/exerciseRecommendations.js @@ -1,6 +1,6 @@ const express = require('express'); -const exercisesData = require('../data/exercises.json'); +const exercisesData = require('./data/exercises.json'); const OLLAMA_URL = process.env.OLLAMA_URL || 'http://localhost:11434'; const OLLAMA_MODEL = process.env.OLLAMA_MODEL || 'deepseek-v3.2:cloud';