feat: add batch-cooking sessions (single "mega recipe" with dish sections)

New AI-generated batch-cooking flow: pick N dinners/lunches + servings,
get one unified recipe covering a full prep session — merged shopping
list, steps tagged per-dish (a step can advance several dishes at once,
e.g. a shared oven bake), and per-dish storage (fridge/freezer) + exact
day-of reheat/finishing instructions.

Schema: recipes.isBatchCook, recipeSteps.appliesTo (dish names), new
recipeBatchDishes table. Batch recipes are excluded from the normal
/recipes list and live under their own /batch-cooking section.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Arnaud
2026-07-12 01:23:37 +02:00
parent 68f0f490b9
commit 78d0599ffc
16 changed files with 5343 additions and 22 deletions
+26
View File
@@ -62,6 +62,12 @@
"ingredients": "Ingrédients",
"instructions": "Instructions",
"photos": "Photos",
"batchCookBadge": "Batch cooking",
"batchCookPrep": "Préparation",
"batchCookDishesTitle": "Plats & conservation",
"batchCookFridgeDays": "Frigo : {days}j",
"batchCookFreezerFriendly": "Se congèle",
"batchCookDayOf": "Le jour J",
"servings": "{count} portions",
"prep": "{mins}m prép.",
"cook": "{mins}m cuisson",
@@ -526,6 +532,25 @@
"resendingSending": "Envoi en cours…",
"or": "ou"
},
"batchCooking": {
"title": "Batch cooking",
"subtitle": "Cuisinez une fois, mangez bien toute la semaine",
"empty": "Aucune session de batch cooking pour l'instant",
"newSession": "Nouvelle session de batch cooking",
"dishCount": "{count, plural, one {# plat} other {# plats}}",
"wizardTitle": "Planifier une session de batch cooking",
"wizardDescription": "Choisissez combien de repas couvrir — on génère une liste de courses partagée et une seule session de préparation pour tout.",
"dinners": "Dîners",
"lunches": "Déjeuners",
"servingsPerMeal": "Portions par repas",
"dietaryPrefs": "Préférences alimentaires",
"dietaryPrefsPlaceholder": "ex : végétarien, sans crustacés",
"anyDifficulty": "Peu importe",
"generate": "Générer",
"generating": "Génération… ça peut prendre une minute",
"generateSuccess": "Session de batch cooking créée",
"generateFailed": "Échec de la génération"
},
"recipes": {
"title": "Recettes",
"subtitle": "Votre bibliothèque personnelle de recettes",
@@ -534,6 +559,7 @@
"newSubtitle": "Créez votre recette depuis zéro",
"importUrl": "Importer une URL",
"generate": "Générer",
"batchCooking": "Batch cooking",
"search": "Rechercher des recettes…",
"noRecipes": "Aucune recette pour l'instant",
"noMatch": "Aucune recette ne correspond",