Generate high-quality fytrr free workout plan config entries as valid PHP arrays. Use this skill whenever Tobi asks to create a new workout plan, add a plan to the config, generate a plan page, or expand the free workout plan section of fytrr. Also use when asked to generate plans for specific goals like strength, fat loss, abs, over-40, cardio, etc. The output is always a complete, production-ready PHP config array entry matching the fytrr freeWorkouts.php structure.
Generates complete, production-ready PHP config array entries for fytrr's config/freeWorkouts.php.
Read the full structure and quality standards:
→ references/structure.md
This file contains:
Do not skip this step. The structure must be followed exactly.
Identify the plan slug and fitness goal from the user's request. Common examples:
strength → pure strength / powerlifting-adjacentfat-loss → cutting / body recompositionabs → core-focusedover-40 → age-appropriate, joint-friendlycardio → endurance / cardiovascular focushiit → high-intensity interval trainingIf the goal is ambiguous, ask one clarifying question before proceeding.
Before writing the config, mentally design the training split:
The schedule must be differentiated from existing plans. Don't copy the muscle-gain Push/Pull/Legs/Core structure unless it genuinely fits best.
Output the complete PHP array entry. Follow this order exactly:
title, description, h1, introinternal_type, published_at, last_updated_atworkout (with full schedule, progression, tips)why_it_works (exactly 5 sections)common_mistakes (exactly 7 mistakes with all 5 sub-fields)faqs (exactly 3)Every new plan must be added to the route locale files so Laravel can resolve the URL and generate SEO links (hreflang, footer, sitemap).
lang/en/routes.php → add to the 'type' arraylang/de/routes.php → add to the 'type' arrayKey: the internal_type (snake_case, e.g. strength, fat_loss)
Value: must exactly match the config key used in config/freeWorkouts.php for that locale — because the config key IS the URL slug.
Example for a plan with internal_type = strength:
// config/freeWorkouts.php has 'en' => ['strength' => [...]] and 'de' => ['krafttraining' => [...]]
// lang/en/routes.php → type array
'strength' => 'strength', // matches EN config key
// lang/de/routes.php → type array
'strength' => 'krafttraining', // matches DE config key
CRITICAL: The route value and the freeWorkouts.php config key must be identical. If they differ, the page will 404 or SEO links (hreflang, footer, sitemap) will break.
If the plan should appear in the site footer, two things are needed:
Add the internal_type to the $workoutPlanTypes array in app/Http/Middleware/HandleInertiaRequests.php → getFooterLinks() method.
Add a footer label translation in both locale files:
lang/en/footer.php → workout_plans array: 'internal_type' => 'Display Label'lang/de/footer.php → workout_plans array: 'internal_type' => 'Anzeigename'Example for strength:
// lang/en/footer.php → workout_plans array
'strength' => 'Strength Training',
// lang/de/footer.php → workout_plans array (always use "Trainingsplan [Ziel]" pattern)
'strength' => 'Trainingsplan Krafttraining',
Without the footer label, the link will be silently skipped even if it's in the $workoutPlanTypes array.
Before outputting, verify:
sets, reps, AND restwhy_it_works has exactly 5 entries with scientific reasoningcommon_mistakes has exactly 7 entries with real examples (numbers/specifics)faqs has exactly 3 entriesOutput only the PHP array entry, ready to paste into config/freeWorkouts.php under the 'en' key.
Open with the slug key:
'slug' => [
// ... full content
],
No explanation needed before the code block unless the user asks a question. After the code, offer to also generate the German ('de') version if relevant.
If the user requests a German version, follow the same structure but:
internal_type in English snake_casepublished_at and last_updated_at as-isde key in config)'de' key, e.g. 'krafttraining'