feat: add concise bilingual overviews for all 254 exercises
All checks were successful
CI / update (push) Successful in 3m34s
All checks were successful
CI / update (push) Successful in 3m34s
- Fix ExerciseDB data quality (remove empty calf raise, fix Wall Sit, correct muscles, typos) - Rewrite verbose AI-generated English overviews to concise one-sentence descriptions - Add German translations for all 199 EDB exercises (name, instructions, overview) - Add English and German overviews for 55 static-only exercises - Display overview above instructions on exercise detail page
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "homepage",
|
||||
"version": "1.17.2",
|
||||
"version": "1.18.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -91,7 +91,7 @@ export const exerciseDbMap: Record<string, string> = {
|
||||
'exr_41n2hqw5LsDpeE2i': 'elbow-flexor-stretch', // Elbow Flexor Stretch
|
||||
'exr_41n2hy8pKXtzuBh8': 'elbow-up-and-down-dynamic-plank', // Elbow Up and Down Dynamic Plank
|
||||
'exr_41n2hKZmyYXB2UL4': 'elbows-back-stretch', // Elbows Back Stretch
|
||||
'exr_41n2hNfaYkEKLQHK': 'elevated-push-up', // Elevanted Push-Up
|
||||
'exr_41n2hNfaYkEKLQHK': 'elevated-push-up', // Elevated Push-Up
|
||||
'exr_41n2hfa11fPnk8y9': 'elliptical-machine-walk', // Elliptical Machine Walk (MACHINE)
|
||||
'exr_41n2hpTMDhTxYkvi': 'elliptical-machine-walk-alt', // Elliptical Machine Walk (variant)
|
||||
'exr_41n2hH6VGNz6cNtv': 'extension-inclination-neck-stretch', // Extension And Inclination Neck Stretch
|
||||
@@ -172,7 +172,7 @@ export const exerciseDbMap: Record<string, string> = {
|
||||
'exr_41n2hd78zujKUEWK': 'single-leg-squat', // Single Leg Squat
|
||||
'exr_41n2hsSnmS946i2k': 'single-leg-squat-with-support', // Single Leg Squat with Support
|
||||
'exr_41n2hw8nSYiaCXW1': 'sissy-squat', // Sissy Squat
|
||||
'exr_41n2hvjrFJ2KjzGm': 'sit', // Sit
|
||||
'exr_41n2hvjrFJ2KjzGm': 'wall-sit', // Wall Sit
|
||||
'exr_41n2hnFD2bT6sruf': 'sliding-floor-bridge-curl-towel', // Sliding Floor Bridge Curl on Towel
|
||||
'exr_41n2hadPLLFRGvFk': 'sliding-floor-pulldown-towel', // Sliding Floor Pulldown on Towel
|
||||
'exr_41n2hSxsNAV8tGS6': 'split-squat', // Split Squat
|
||||
@@ -183,7 +183,7 @@ export const exerciseDbMap: Record<string, string> = {
|
||||
'exr_41n2hSq88Ni3KCny': 'standing-alternate-arms-circling', // Standing Alternate Arms Circling
|
||||
'exr_41n2hUBVSgXaKhau': 'standing-arms-circling', // Standing Arms Circling
|
||||
'exr_41n2hynD9srC1kY7': 'standing-arms-flinging', // Standing Arms Flinging
|
||||
'exr_41n2hzfRXQDaLYJh': 'standing-calf-raise', // Standing Calf Raise (bodyweight)
|
||||
// exr_41n2hzfRXQDaLYJh removed — empty Standing Calf Raise duplicate (no instructions/overview)
|
||||
'exr_41n2hdWu3oaCGdWT': 'standing-calf-raise-dumbbell', // Standing Calf Raise (DUMBBELL)
|
||||
'exr_41n2hvzxocyjoGgL': 'standing-leg-calf-raise-barbell', // Standing Leg Calf Raise (BARBELL)
|
||||
'exr_41n2huXeEFSaqo4G': 'standing-one-arm-circling', // Standing One Arm Circling
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
2169
src/lib/data/exercisedb-translations-de.ts
Normal file
2169
src/lib/data/exercisedb-translations-de.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,8 @@ import { localizeExercise, translateTerm, getExerciseMetrics, METRIC_PRESETS } f
|
||||
import { exerciseDbMap, slugToExerciseDbId } from './exercisedb-map';
|
||||
import { edbMuscleToSimple, edbMusclesToGroups, edbBodyPartToSimple, edbEquipmentToSimple } from './muscleMap';
|
||||
import rawData from './exercisedb-raw.json';
|
||||
import { edbTranslationsDe } from './exercisedb-translations-de';
|
||||
import { staticOverviews } from './static-overviews';
|
||||
import { fuzzyScore } from '$lib/js/fuzzy';
|
||||
|
||||
// Access static exercises via the exported map
|
||||
@@ -66,6 +68,7 @@ function edbToEnriched(edb: EdbRawExercise, slug: string, staticEx?: Exercise):
|
||||
const secondaryGroups = edbMusclesToGroups(edb.secondaryMuscles ?? []);
|
||||
|
||||
// Base exercise fields — prefer static data when available
|
||||
const de = edbTranslationsDe[slug];
|
||||
const base: Exercise = staticEx
|
||||
? { ...staticEx }
|
||||
: {
|
||||
@@ -76,6 +79,7 @@ function edbToEnriched(edb: EdbRawExercise, slug: string, staticEx?: Exercise):
|
||||
target: targetGroups[0] ?? 'full body',
|
||||
secondaryMuscles: secondaryGroups.filter(g => !targetGroups.includes(g)),
|
||||
instructions: edb.instructions ?? [],
|
||||
...(de ? { de } : {}),
|
||||
};
|
||||
|
||||
// For static exercises, merge in EDB secondary muscles if richer
|
||||
@@ -113,7 +117,7 @@ for (const ex of staticExercises) {
|
||||
allEnriched.set(ex.id, {
|
||||
...ex,
|
||||
edbId: null,
|
||||
overview: null,
|
||||
overview: staticOverviews[ex.id] ?? null,
|
||||
tips: [],
|
||||
variations: [],
|
||||
targetMusclesDetailed: [],
|
||||
@@ -129,10 +133,11 @@ const allExercisesArray = [...allEnriched.values()];
|
||||
/** Localize an enriched exercise */
|
||||
export function localizeEnriched(e: EnrichedExercise, lang: 'en' | 'de'): LocalizedEnrichedExercise {
|
||||
const localized = localizeExercise(e, lang);
|
||||
const de = lang === 'de' ? edbTranslationsDe[e.id] : undefined;
|
||||
return {
|
||||
...localized,
|
||||
edbId: e.edbId,
|
||||
overview: e.overview,
|
||||
overview: (de?.overview) ?? e.overview,
|
||||
tips: e.tips,
|
||||
variations: e.variations,
|
||||
targetMusclesDetailed: e.targetMusclesDetailed,
|
||||
|
||||
58
src/lib/data/static-overviews.ts
Normal file
58
src/lib/data/static-overviews.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
/** English overviews for static-only exercises (not in ExerciseDB) */
|
||||
export const staticOverviews: Record<string, string> = {
|
||||
'ab-wheel-rollout': 'Anti-extension core exercise using an ab wheel to target the entire abdominal wall.',
|
||||
'bench-press-close-grip-barbell': 'Barbell bench press with narrow grip to shift emphasis from the chest to the triceps.',
|
||||
'bench-press-dumbbell': 'Dumbbell press on a flat bench targeting the chest, front deltoids, and triceps with independent arm movement.',
|
||||
'bent-over-row-barbell': 'Barbell row in a bent-over position targeting the lats, traps, and rear deltoids.',
|
||||
'bicep-curl-barbell': 'Barbell curl targeting the biceps for arm strength and size.',
|
||||
'bicep-curl-dumbbell': 'Dumbbell curl targeting the biceps with independent arm movement for balanced development.',
|
||||
'cable-crossover': 'Cable exercise bringing the handles together to isolate the chest with constant tension.',
|
||||
'cable-crunch': 'Kneeling cable exercise targeting the abdominals with adjustable resistance.',
|
||||
'cable-curl': 'Cable curl targeting the biceps with constant tension throughout the range of motion.',
|
||||
'calf-raise-machine': 'Machine calf raise targeting the gastrocnemius and soleus for lower leg strength.',
|
||||
'chest-fly-dumbbell': 'Dumbbell fly on a flat bench isolating the chest through a wide arc of motion.',
|
||||
'clean-and-press-barbell': 'Compound barbell lift combining a clean and overhead press for full-body power.',
|
||||
'concentration-curl-dumbbell': 'Seated single-arm dumbbell curl for strict biceps isolation.',
|
||||
'cycling-indoor': 'Stationary bike cardio for endurance and lower body conditioning with adjustable intensity.',
|
||||
'cycling-outdoor': 'Outdoor cycling for cardiovascular fitness, leg strength, and endurance.',
|
||||
'deadlift-barbell': 'Fundamental barbell lift targeting the entire posterior chain for full-body strength.',
|
||||
'decline-bench-press-barbell': 'Barbell press on a decline bench emphasizing the lower chest, triceps, and front deltoids.',
|
||||
'decline-crunch': 'Ab crunch on a decline bench to increase resistance and target the upper abdominals.',
|
||||
'elliptical': 'Low-impact machine cardio targeting the full body with minimal joint stress.',
|
||||
'face-pull-cable': 'Cable exercise targeting the rear deltoids, traps, and rotator cuff for shoulder health.',
|
||||
'farmers-walk': 'Loaded carry targeting grip strength, core stability, and full-body conditioning.',
|
||||
'flat-leg-raise': 'Lying leg raise targeting the lower abs and hip flexors.',
|
||||
'front-squat-barbell': 'Barbell squat with front rack position emphasizing the quads and core.',
|
||||
'hack-squat-machine': 'Machine squat variation targeting the quads with back support and guided movement.',
|
||||
'hammer-curl-dumbbell': 'Dumbbell curl with neutral grip targeting the biceps, brachialis, and forearms.',
|
||||
'hanging-leg-raise': 'Hanging exercise targeting the lower abs and hip flexors through leg raises.',
|
||||
'hiking': 'Outdoor cardiovascular activity building leg endurance and overall fitness on varied terrain.',
|
||||
'incline-bench-press-barbell': 'Barbell press on an incline bench targeting the upper chest, front deltoids, and triceps.',
|
||||
'incline-bench-press-dumbbell': 'Dumbbell press on an incline bench targeting the upper chest and front deltoids.',
|
||||
'incline-row-dumbbell': 'Dumbbell row on an incline bench for strict upper back isolation with chest support.',
|
||||
'kickback-dumbbell': 'Dumbbell kickback targeting the triceps through elbow extension behind the body.',
|
||||
'lat-pulldown-cable': 'Cable pulldown targeting the lats and upper back for vertical pulling strength.',
|
||||
'lateral-raise-cable': 'Cable raise to the side targeting the lateral deltoids for shoulder width.',
|
||||
'leg-curl-machine': 'Machine exercise isolating the hamstrings through knee flexion.',
|
||||
'leg-extension-machine': 'Machine exercise isolating the quadriceps through knee extension.',
|
||||
'leg-press-machine': 'Machine press targeting the quads, glutes, and hamstrings with guided resistance.',
|
||||
'nordic-hamstring-curl': 'Bodyweight eccentric exercise for extreme hamstring strengthening and injury prevention.',
|
||||
'overhead-press-barbell': 'Barbell press overhead targeting the anterior deltoids, triceps, and upper chest.',
|
||||
'overhead-tricep-extension-dumbbell': 'Dumbbell extension overhead targeting the long head of the triceps.',
|
||||
'preacher-curl-barbell': 'Barbell curl on a preacher bench to isolate the biceps and limit momentum.',
|
||||
'romanian-deadlift-barbell': 'Barbell hip hinge targeting the hamstrings, glutes, and lower back with a stretch emphasis.',
|
||||
'rowing-machine': 'Machine-based full-body cardio targeting the back, legs, and arms in a pulling motion.',
|
||||
'rowing-outdoor': 'On-water rowing for full-body cardiovascular fitness and upper body pulling strength.',
|
||||
'running': 'Cardiovascular exercise for endurance, leg strength, and overall fitness.',
|
||||
'seated-row-cable': 'Cable row performed seated to target the mid-back, lats, and rear deltoids.',
|
||||
'shrug-barbell': 'Barbell shrug targeting the upper traps for neck and shoulder development.',
|
||||
'shrug-dumbbell': 'Dumbbell shrug targeting the upper traps with independent arm movement.',
|
||||
'skullcrusher-barbell': 'Barbell lying extension targeting the triceps by lowering the bar toward the forehead.',
|
||||
'squat-barbell': 'Fundamental barbell squat targeting the quads, glutes, and hamstrings for lower body strength.',
|
||||
'stair-climber': 'Machine cardio simulating stair climbing for leg strength and cardiovascular endurance.',
|
||||
'swimming': 'Full-body low-impact cardio exercise improving endurance, strength, and flexibility.',
|
||||
't-bar-row': 'Barbell row using a landmine setup to target the lats and mid-back with heavy loads.',
|
||||
'tricep-pushdown-cable': 'Cable pushdown targeting the triceps for arm definition and pressing strength.',
|
||||
'upright-row-barbell': 'Barbell pull from hips to chin targeting the lateral deltoids and upper traps.',
|
||||
'walking': 'Low-impact cardiovascular exercise for general health and active recovery.',
|
||||
};
|
||||
@@ -151,6 +151,11 @@
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<!-- Overview -->
|
||||
{#if exercise?.overview}
|
||||
<p class="overview">{exercise.overview}</p>
|
||||
{/if}
|
||||
|
||||
<!-- Instructions -->
|
||||
{#if exercise?.localInstructions?.length}
|
||||
<h3>{t('instructions', lang)}</h3>
|
||||
@@ -346,6 +351,12 @@
|
||||
color: var(--color-text-tertiary);
|
||||
}
|
||||
|
||||
.overview {
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.6;
|
||||
color: var(--color-text-secondary);
|
||||
margin: 0.25rem 0 0.5rem;
|
||||
}
|
||||
h3 {
|
||||
font-size: 1rem;
|
||||
margin: 0.75rem 0 0.4rem;
|
||||
|
||||
Reference in New Issue
Block a user