feat: add concise bilingual overviews for all 254 exercises
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:
2026-04-09 00:18:59 +02:00
parent 133d121f84
commit 04284a7238
7 changed files with 2512 additions and 267 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "homepage",
"version": "1.17.2",
"version": "1.18.0",
"private": true,
"type": "module",
"scripts": {

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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,

View 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.',
};

View File

@@ -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;