Files
ketopath/packages/db/prisma/seed-recipes.ts
T
lucianoandClaude Opus 4.7 c37dc5d717 feat(seed): popola Recipe.variants e RecipeIngredient.substitutes
- DEFAULT_SUBSTITUTES_BY_INGREDIENT in seed-recipes.ts: ~50 mappature
  riusabili (pesci interscambiabili, latticini lactose-free, manzo→tacchino,
  pollo→tacchino, frutta secca, condimenti, legumi inter-cambiabili)
- 12 ricette signature ora dichiarano variants reali (1-2 ciascuna):
  • Frittata di spinaci → senza lattosio / più saziante
  • Yogurt greco con noci → vegana / con frutti di bosco
  • Uova strapazzate con pancetta → senza maiale / con verdure
  • Insalata di pollo, avocado e pomodorini → vegetariana / con feta e olive
  • Salmone al forno con asparagi → versione fredda / sgombro
  • Bistecca con zucchine → tacchino / con melanzane
  • Insalatona con tonno e olive → Niçoise / sgombro
  • Branzino al cartoccio → mediterranea / orata
  • Polpette di pollo e ricotta → in sugo / tacchino-spinaci
  • Tagliata con rucola → con pomodorini / bresaola
  • Caprese → con avocado / con prosciutto crudo
  • Pancake proteici, Smoothie verde, Tagliolini di zucchine,
    Insalata di lenticchie, Quinoa con pollo (varianti analoghe)
- seed.ts ora propaga r.variants al campo Recipe.variants e applica
  ing.substitutes (override) o DEFAULT_SUBSTITUTES_BY_INGREDIENT[name]
  alle righe RecipeIngredient

Smoke verificato live: /recipes/<frittata> mostra "VARIANTI SUGGERITE"
con "Versione senza lattosio (-40 kcal)" e "Più saziante (+90 kcal)";
gli ingredienti hanno la riga "Sostituzioni: bietole, Grana Padano…".

Catalog: 46 ricette, 164 link RecipeIngredient, ~50 mappature substitutes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:31:33 +02:00

1134 lines
36 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Seed catalogo ricette italiane keto/low-carb (PRD §5.1).
// 46 ricette distribuite su COLAZIONE/PRANZO/SPUNTINO/CENA, fasi 1/2/3.
// Macros stimati per porzione singola.
//
// Ogni ricetta dichiara una lista di `ingredients` con quantità e unità,
// usata dal seeder per creare i record `RecipeIngredient`. Il `name` deve
// corrispondere esattamente a un ingrediente di `seed-ingredients.ts`.
//
// `variants` espone alternative testuali alla ricetta (es. versione
// vegetariana o senza lattosio) — vengono salvate in Recipe.variants.
// `substitutes` su un singolo ingrediente sovrascrive la mappa default
// (DEFAULT_SUBSTITUTES_BY_INGREDIENT) per quella ricetta specifica.
import type { Difficulty, MealCategory } from '@prisma/client';
export interface RecipeVariant {
name: string;
description: string;
kcalDelta?: number;
}
export interface SeedRecipeIngredient {
name: string;
quantity: number;
unit: string;
/** Se omesso, viene preso da DEFAULT_SUBSTITUTES_BY_INGREDIENT. */
substitutes?: string[];
}
export interface SeedRecipe {
name: string;
category: MealCategory;
description: string;
prepMinutes: number;
difficulty: Difficulty;
kcal: number;
proteinG: number;
fatG: number;
netCarbG: number;
phases: number[];
notesChef?: string;
ingredients: SeedRecipeIngredient[];
variants?: RecipeVariant[];
}
// Sostituzioni "ragionevoli" per ingrediente, riusate da tutte le ricette.
// Il seeder le applica a `RecipeIngredient.substitutes` quando la ricetta
// non specifica un override esplicito. Riempire qui evita di ripetere le
// stesse sostituzioni in 46 ricette × N ingredienti.
export const DEFAULT_SUBSTITUTES_BY_INGREDIENT: Record<string, string[]> = {
// Pesci → interscambiabili, attenzione al gusto
'Filetto di salmone': ['trota salmonata', 'sgombro fresco', 'tonno fresco'],
Sgombro: ['salmone', 'sardine fresche', 'palamita'],
Branzino: ['orata', 'spigola', 'dentice'],
"Tonno sott'olio": ['sgombro al naturale', 'salmone affumicato', 'pollo lessato'],
Gamberi: ['mazzancolle', 'scampi puliti', 'calamari a strisce'],
// Carni
'Petto di pollo': ['petto di tacchino', 'fesa di pollo bio', 'sovracoscia disossata'],
'Petto di tacchino': ['petto di pollo', 'lonza di maiale magra'],
'Tagliata di manzo': ['tagliata di scottona', 'controfiletto', 'flank steak'],
'Pancetta affumicata': ['guanciale', 'speck a cubetti', 'pancetta dolce'],
'Prosciutto crudo': ['speck stagionato', 'culatello', 'coppa stagionata'],
Bresaola: ['carpaccio di manzo', 'roastbeef sottile', "tonno sott'olio"],
// Latticini → versioni lactose-free quando possibile
'Yogurt greco intero': ['skyr intero', 'yogurt di cocco non zuccherato'],
'Parmigiano Reggiano': ['Grana Padano', 'pecorino romano stagionato'],
'Grana Padano': ['Parmigiano Reggiano', 'pecorino dolce'],
'Mozzarella di bufala': ['fiordilatte', 'burrata (porzione ridotta)'],
Stracchino: ['robiola', 'crescenza', 'philadelphia'],
Mascarpone: ['ricotta intera setacciata', 'cream cheese intero'],
Ricotta: ['ricotta di capra', 'fiocchi di latte'],
'Ricotta vaccina': ['ricotta di pecora', 'fiocchi di latte', 'cottage cheese'],
'Gorgonzola dolce DOP': ['taleggio', 'roquefort', 'fontina'],
Burro: ['ghee', 'olio di cocco extravergine'],
// Uova / vegetali
Uova: ['tofu strapazzato (versione vegana)'],
Avocado: ['mezzo avocado piccolo', 'guacamole non zuccherato'],
Spinaci: ['bietole', 'cime di rapa', 'lattuga romana saltata'],
'Spinaci freschi': ['bietole', 'cime di rapa', 'spinaci surgelati'],
'Spinaci surgelati': ['spinaci freschi (porzione doppia)', 'bietole'],
Asparagi: ['fagiolini', 'broccoletti', 'puntarelle'],
Zucchine: ['cetrioli grandi', 'zucchina chiara', 'finocchi'],
'Pomodorini ciliegino': ['pomodori datterini', 'cuore di bue a cubetti'],
'Insalata mista': ['valeriana', 'songino', 'rucola e radicchio'],
Rucola: ['valeriana', 'spinacino baby'],
Cavolfiore: ['broccoli', 'cavolo romanesco'],
Broccoli: ['cavolfiore', 'broccoletti'],
'Funghi champignon': ['funghi cardoncelli', 'funghi porcini'],
Melanzane: ['zucchine', 'peperoni'],
Peperoni: ['zucchine', 'pomodori ramati'],
Cetrioli: ['sedano croccante', 'finocchi a fettine'],
Carote: ['carote viola', 'pastinaca cotta (fase 2+)'],
// Frutta
'Frutti di bosco misti': ['lamponi', 'mirtilli', 'fragoline di bosco'],
Mela: ['pera (porzione ridotta)', 'kiwi'],
Pera: ['mela'],
Limone: ['lime', 'aceto di mele'],
// Frutta secca / semi
Mandorle: ['nocciole', 'noci pecan'],
Noci: ['mandorle', 'pinoli'],
'Semi di chia': ['semi di lino macinati', 'psillio'],
'Cocco rapè non zuccherato': ['mandorle a scaglie', 'farina di cocco'],
// Condimenti / panetteria
'Olio extravergine di oliva': ['olio di avocado', 'olio di sesamo per piatti orientali'],
'Olive nere': ['olive di Gaeta', 'olive taggiasche'],
'Olive verdi': ['olive di Castelvetrano', 'olive baresane'],
'Capperi sotto sale': ["capperi sott'aceto (sgocciolati)", 'olive nere tritate'],
'Pane proteico di mandorle': ['cracker di semi keto', 'foglie di lattuga (per wrap)'],
'Aceto balsamico': ['aceto di mele', 'glassa di balsamico keto-friendly'],
'Cannella in polvere': ['cardamomo', 'noce moscata'],
'Basilico fresco': ['mentuccia', 'foglie di prezzemolo'],
// Legumi / cereali (fase 2+)
'Lenticchie cotte': ['ceci cotti', 'fagioli cannellini'],
'Ceci cotti': ['lenticchie cotte', 'fagioli borlotti'],
'Quinoa cotta': ['miglio cotto', 'farro perlato cotto'],
};
export const SEED_RECIPES: SeedRecipe[] = [
// COLAZIONE
{
name: 'Frittata di spinaci e parmigiano',
category: 'COLAZIONE',
description: 'Tre uova con spinaci saltati e parmigiano grattugiato.',
prepMinutes: 10,
difficulty: 'FACILE',
kcal: 360,
proteinG: 28,
fatG: 26,
netCarbG: 4,
phases: [1, 2, 3],
notesChef:
'Cuoci la frittata a fuoco basso, coperta: la consistenza resta morbida e le uova non bruciano.',
ingredients: [
{ name: 'Uova', quantity: 3, unit: 'pz' },
{ name: 'Spinaci freschi', quantity: 80, unit: 'g' },
{ name: 'Parmigiano Reggiano', quantity: 20, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Versione senza lattosio',
description: 'Sostituisci il parmigiano con 30 g di lievito alimentare in scaglie.',
kcalDelta: -40,
},
{
name: 'Più saziante',
description: 'Aggiungi una fetta di prosciutto crudo a julienne durante la cottura.',
kcalDelta: 90,
},
],
},
{
name: 'Yogurt greco con noci e cannella',
category: 'COLAZIONE',
description: 'Yogurt greco intero con un cucchiaio di noci tritate.',
prepMinutes: 3,
difficulty: 'FACILE',
kcal: 320,
proteinG: 18,
fatG: 22,
netCarbG: 8,
phases: [1, 2, 3],
ingredients: [
{ name: 'Yogurt greco intero', quantity: 200, unit: 'g' },
{ name: 'Noci', quantity: 20, unit: 'g' },
{ name: 'Cannella in polvere', quantity: 1, unit: 'cucchiaino' },
],
variants: [
{
name: 'Versione vegana',
description: 'Yogurt di cocco non zuccherato al posto di quello greco.',
kcalDelta: -50,
},
{
name: 'Con frutti di bosco (Fase 2+)',
description:
'Aggiungi 50 g di mirtilli o lamponi: porta zuccheri naturali ma resta sotto i 12 g di carb netti.',
kcalDelta: 25,
},
],
},
{
name: 'Avocado toast keto su pane di mandorle',
category: 'COLAZIONE',
description: 'Mezzo avocado schiacciato su una fetta di pane proteico.',
prepMinutes: 5,
difficulty: 'FACILE',
kcal: 380,
proteinG: 12,
fatG: 30,
netCarbG: 6,
phases: [1, 2, 3],
ingredients: [
{ name: 'Avocado', quantity: 0.5, unit: 'pz' },
{ name: 'Pane proteico di mandorle', quantity: 40, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
{ name: 'Limone', quantity: 0.25, unit: 'pz' },
],
},
{
name: 'Uova strapazzate con pancetta',
category: 'COLAZIONE',
description: 'Due uova strapazzate al burro con pancetta croccante.',
prepMinutes: 8,
difficulty: 'FACILE',
kcal: 410,
proteinG: 24,
fatG: 33,
netCarbG: 2,
phases: [1, 2, 3],
ingredients: [
{ name: 'Uova', quantity: 2, unit: 'pz' },
{ name: 'Pancetta affumicata', quantity: 30, unit: 'g' },
{ name: 'Burro', quantity: 10, unit: 'g' },
],
variants: [
{
name: 'Senza maiale',
description: 'Sostituisci la pancetta con bresaola o tacchino arrosto a striscioline.',
kcalDelta: -80,
},
{
name: 'Con verdure',
description: 'Aggiungi 50 g di funghi champignon trifolati o pomodorini saltati.',
},
],
},
// PRANZO
{
name: 'Insalata di pollo, avocado e pomodorini',
category: 'PRANZO',
description: 'Petto di pollo grigliato, avocado, pomodorini, olio EVO.',
prepMinutes: 15,
difficulty: 'FACILE',
kcal: 540,
proteinG: 38,
fatG: 36,
netCarbG: 9,
phases: [1, 2, 3],
ingredients: [
{ name: 'Petto di pollo', quantity: 130, unit: 'g' },
{ name: 'Avocado', quantity: 0.5, unit: 'pz' },
{ name: 'Pomodorini ciliegino', quantity: 100, unit: 'g' },
{ name: 'Insalata mista', quantity: 60, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 2, unit: 'cucchiaio' },
],
variants: [
{
name: 'Versione vegetariana',
description: 'Pollo sostituito da 100 g di tofu marinato o 2 uova sode.',
kcalDelta: -100,
},
{
name: 'Con feta e olive',
description: 'Aggiungi 40 g di feta sbriciolata e 8 olive Kalamata: stile mediterraneo.',
kcalDelta: 130,
},
],
},
{
name: 'Salmone al forno con asparagi',
category: 'PRANZO',
description: 'Filetto di salmone con asparagi al forno e limone.',
prepMinutes: 20,
difficulty: 'FACILE',
kcal: 510,
proteinG: 36,
fatG: 35,
netCarbG: 6,
phases: [1, 2, 3],
notesChef: 'Inforna a 200°C per 12-14 minuti, salmone con la pelle verso il basso.',
ingredients: [
{ name: 'Filetto di salmone', quantity: 150, unit: 'g' },
{ name: 'Asparagi', quantity: 200, unit: 'g' },
{ name: 'Limone', quantity: 0.5, unit: 'pz' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Versione fredda',
description: 'Salmone scottato 2 min per lato e servito tiepido su asparagi crudi sottili.',
},
{
name: 'Sgombro al posto del salmone',
description: 'Più economico e ricco di omega-3. Riduci il tempo di cottura a 10 min.',
kcalDelta: -10,
},
],
},
{
name: 'Bistecca con zucchine grigliate',
category: 'PRANZO',
description: 'Tagliata di manzo con zucchine grigliate e olio EVO.',
prepMinutes: 18,
difficulty: 'MEDIA',
kcal: 580,
proteinG: 42,
fatG: 38,
netCarbG: 5,
phases: [1, 2, 3],
ingredients: [
{ name: 'Tagliata di manzo', quantity: 180, unit: 'g' },
{ name: 'Zucchine', quantity: 200, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 2, unit: 'cucchiaio' },
],
variants: [
{
name: 'Versione tacchino',
description:
'Petto di tacchino spesso al posto della tagliata: più magro, meno grassi saturi.',
kcalDelta: -180,
},
{
name: 'Con melanzane grigliate',
description: 'Aggiungi 100 g di melanzane grigliate per più volume e fibra.',
kcalDelta: 30,
},
],
},
{
name: 'Insalatona con tonno e olive',
category: 'PRANZO',
description: "Insalata mista, tonno sott'olio, olive nere, capperi.",
prepMinutes: 10,
difficulty: 'FACILE',
kcal: 470,
proteinG: 32,
fatG: 32,
netCarbG: 7,
phases: [1, 2, 3],
ingredients: [
{ name: "Tonno sott'olio", quantity: 120, unit: 'g' },
{ name: 'Insalata mista', quantity: 100, unit: 'g' },
{ name: 'Olive nere', quantity: 30, unit: 'g' },
{ name: 'Capperi sotto sale', quantity: 1, unit: 'cucchiaio' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Niçoise',
description: 'Aggiungi 1 uovo sodo, 4 fagiolini cotti e una manciata di pomodorini.',
kcalDelta: 90,
},
{
name: 'Con sgombro',
description: 'Sgombro al naturale al posto del tonno: più ricco di omega-3.',
},
],
},
// SPUNTINO
{
name: 'Mandorle al naturale',
category: 'SPUNTINO',
description: 'Una manciata di mandorle (~25 g).',
prepMinutes: 1,
difficulty: 'FACILE',
kcal: 150,
proteinG: 5,
fatG: 13,
netCarbG: 3,
phases: [1, 2, 3],
ingredients: [{ name: 'Mandorle', quantity: 25, unit: 'g' }],
},
{
name: 'Cubetti di parmigiano',
category: 'SPUNTINO',
description: '30 g di parmigiano stagionato 24 mesi.',
prepMinutes: 1,
difficulty: 'FACILE',
kcal: 120,
proteinG: 11,
fatG: 8,
netCarbG: 0,
phases: [1, 2, 3],
ingredients: [{ name: 'Parmigiano Reggiano', quantity: 30, unit: 'g' }],
},
{
name: 'Olive verdi marinate',
category: 'SPUNTINO',
description: 'Una porzione di olive verdi (60 g) con erbe aromatiche.',
prepMinutes: 1,
difficulty: 'FACILE',
kcal: 90,
proteinG: 1,
fatG: 9,
netCarbG: 1,
phases: [1, 2, 3],
ingredients: [
{ name: 'Olive verdi', quantity: 60, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 0.5, unit: 'cucchiaio' },
],
},
{
name: 'Cetrioli con hummus di zucchine',
category: 'SPUNTINO',
description: 'Cetrioli a bastoncino con hummus light di zucchine.',
prepMinutes: 5,
difficulty: 'FACILE',
kcal: 110,
proteinG: 3,
fatG: 8,
netCarbG: 5,
phases: [2, 3],
ingredients: [
{ name: 'Cetrioli', quantity: 100, unit: 'g' },
{ name: 'Zucchine', quantity: 60, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
// CENA
{
name: 'Branzino al cartoccio con verdure',
category: 'CENA',
description: 'Branzino al cartoccio con zucchine, carote e pomodorini.',
prepMinutes: 25,
difficulty: 'MEDIA',
kcal: 460,
proteinG: 38,
fatG: 28,
netCarbG: 7,
phases: [1, 2, 3],
notesChef: 'Cottura 18-20 minuti a 190°C; il cartoccio mantiene il pesce umido.',
ingredients: [
{ name: 'Branzino', quantity: 1, unit: 'pz' },
{ name: 'Zucchine', quantity: 100, unit: 'g' },
{ name: 'Carote', quantity: 60, unit: 'g' },
{ name: 'Pomodorini ciliegino', quantity: 80, unit: 'g' },
{ name: 'Limone', quantity: 0.5, unit: 'pz' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Mediterranea',
description:
'Aggiungi 6 olive Kalamata, 1 cucchiaino di capperi e una foglia di alloro nel cartoccio.',
kcalDelta: 50,
},
{
name: 'Orata al posto del branzino',
description: "Stessa preparazione: l'orata è più dolce e ha carne più morbida.",
},
],
},
{
name: 'Polpette di pollo e ricotta',
category: 'CENA',
description: 'Polpette al forno con ricotta, basilico e parmigiano.',
prepMinutes: 30,
difficulty: 'MEDIA',
kcal: 490,
proteinG: 40,
fatG: 32,
netCarbG: 4,
phases: [1, 2, 3],
ingredients: [
{ name: 'Petto di pollo', quantity: 150, unit: 'g' },
{ name: 'Ricotta vaccina', quantity: 60, unit: 'g' },
{ name: 'Parmigiano Reggiano', quantity: 20, unit: 'g' },
{ name: 'Basilico fresco', quantity: 10, unit: 'g' },
{ name: 'Uova', quantity: 1, unit: 'pz' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'In sugo di pomodoro',
description: 'Cuoci le polpette nella passata di pomodoro per gli ultimi 10 minuti.',
kcalDelta: 40,
},
{
name: 'Versione tacchino e spinaci',
description:
'Tacchino macinato + 50 g di spinaci surgelati strizzati al posto della ricotta.',
kcalDelta: -80,
},
],
},
{
name: 'Zuppa di cavolfiore e gorgonzola',
category: 'CENA',
description: 'Crema di cavolfiore con gorgonzola dolce DOP.',
prepMinutes: 25,
difficulty: 'FACILE',
kcal: 420,
proteinG: 18,
fatG: 33,
netCarbG: 9,
phases: [1, 2, 3],
ingredients: [
{ name: 'Cavolfiore', quantity: 250, unit: 'g' },
{ name: 'Gorgonzola dolce DOP', quantity: 60, unit: 'g' },
{ name: 'Burro', quantity: 10, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Tagliata di manzo con rucola e grana',
category: 'CENA',
description: 'Tagliata di manzo su letto di rucola con scaglie di grana.',
prepMinutes: 15,
difficulty: 'MEDIA',
kcal: 540,
proteinG: 44,
fatG: 36,
netCarbG: 3,
phases: [1, 2, 3],
ingredients: [
{ name: 'Tagliata di manzo', quantity: 180, unit: 'g' },
{ name: 'Rucola', quantity: 60, unit: 'g' },
{ name: 'Grana Padano', quantity: 25, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Con pomodorini e aceto balsamico',
description: 'Aggiungi 80 g di pomodorini e un filo di aceto balsamico (Fase 2+).',
kcalDelta: 25,
},
{
name: 'Bresaola al posto della tagliata',
description: 'Versione più magra: 100 g di bresaola arrotolata sulla rucola.',
kcalDelta: -240,
},
],
},
// ─── Espansione catalogo ──────────────────────────────────────────────
// COLAZIONE
{
name: 'Pancake proteici alla cannella',
category: 'COLAZIONE',
description: 'Tre pancake con uova, ricotta e cannella. Senza farina.',
prepMinutes: 10,
difficulty: 'FACILE',
kcal: 350,
proteinG: 26,
fatG: 22,
netCarbG: 5,
phases: [1, 2, 3],
notesChef: 'Per dolcezza naturale aggiungi qualche frutto di bosco da fase 2.',
ingredients: [
{ name: 'Uova', quantity: 2, unit: 'pz' },
{ name: 'Ricotta vaccina', quantity: 60, unit: 'g' },
{ name: 'Cannella in polvere', quantity: 1, unit: 'cucchiaino' },
{ name: 'Burro', quantity: 5, unit: 'g' },
],
variants: [
{
name: 'Con farina di mandorle',
description: 'Aggiungi 20 g di farina di mandorle per pancake più strutturati.',
kcalDelta: 120,
},
{
name: 'Versione vegana',
description:
'Sostituisci le uova con 2 cucchiai di semi di chia + 60 ml di acqua riposati 10 min, e la ricotta con yogurt di cocco.',
kcalDelta: -80,
},
],
},
{
name: 'Smoothie verde con avocado e spinaci',
category: 'COLAZIONE',
description: 'Spinaci, mezzo avocado, yogurt greco e semi di chia frullati.',
prepMinutes: 5,
difficulty: 'FACILE',
kcal: 340,
proteinG: 14,
fatG: 24,
netCarbG: 8,
phases: [1, 2, 3],
ingredients: [
{ name: 'Spinaci freschi', quantity: 50, unit: 'g' },
{ name: 'Avocado', quantity: 0.5, unit: 'pz' },
{ name: 'Yogurt greco intero', quantity: 100, unit: 'g' },
{ name: 'Semi di chia', quantity: 10, unit: 'g' },
],
variants: [
{
name: 'Versione vegana',
description:
'Yogurt di cocco al posto del greco; aggiungi 1 cucchiaio di proteine in polvere se serve.',
kcalDelta: -30,
},
{
name: 'Con frutti di bosco (Fase 2+)',
description: 'Aggiungi 60 g di mirtilli/lamponi: smoothie più gustoso, +12 g carb netti.',
kcalDelta: 30,
},
],
},
{
name: 'Uova alla coque con bresaola',
category: 'COLAZIONE',
description: 'Due uova alla coque con 30 g di bresaola e olio EVO.',
prepMinutes: 8,
difficulty: 'FACILE',
kcal: 280,
proteinG: 28,
fatG: 17,
netCarbG: 1,
phases: [1, 2, 3],
ingredients: [
{ name: 'Uova', quantity: 2, unit: 'pz' },
{ name: 'Bresaola', quantity: 30, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 0.5, unit: 'cucchiaio' },
],
},
{
name: 'Yogurt greco con frutti di bosco e semi',
category: 'COLAZIONE',
description: 'Yogurt greco intero, mirtilli e lamponi, semi di chia.',
prepMinutes: 3,
difficulty: 'FACILE',
kcal: 260,
proteinG: 17,
fatG: 13,
netCarbG: 12,
phases: [1, 2, 3],
ingredients: [
{ name: 'Yogurt greco intero', quantity: 200, unit: 'g' },
{ name: 'Frutti di bosco misti', quantity: 50, unit: 'g' },
{ name: 'Semi di chia', quantity: 10, unit: 'g' },
],
},
{
name: 'Frittatina ai funghi e prezzemolo',
category: 'COLAZIONE',
description: 'Due uova con champignon trifolati e prezzemolo.',
prepMinutes: 12,
difficulty: 'FACILE',
kcal: 290,
proteinG: 22,
fatG: 21,
netCarbG: 3,
phases: [1, 2, 3],
ingredients: [
{ name: 'Uova', quantity: 2, unit: 'pz' },
{ name: 'Funghi champignon', quantity: 80, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Avocado con uovo strapazzato',
category: 'COLAZIONE',
description: 'Mezzo avocado svuotato e farcito con un uovo strapazzato.',
prepMinutes: 7,
difficulty: 'FACILE',
kcal: 320,
proteinG: 13,
fatG: 26,
netCarbG: 4,
phases: [1, 2, 3],
ingredients: [
{ name: 'Avocado', quantity: 0.5, unit: 'pz' },
{ name: 'Uova', quantity: 1, unit: 'pz' },
{ name: 'Burro', quantity: 5, unit: 'g' },
],
},
{
name: 'Mascarpone con noci e cocco',
category: 'COLAZIONE',
description: 'Mascarpone leggero con noci tritate e cocco rapè.',
prepMinutes: 3,
difficulty: 'FACILE',
kcal: 380,
proteinG: 7,
fatG: 36,
netCarbG: 6,
phases: [1, 2, 3],
ingredients: [
{ name: 'Mascarpone', quantity: 60, unit: 'g' },
{ name: 'Noci', quantity: 15, unit: 'g' },
{ name: 'Cocco rapè non zuccherato', quantity: 10, unit: 'g' },
],
},
{
name: 'Omelette con prosciutto e mozzarella',
category: 'COLAZIONE',
description: 'Tre uova con prosciutto crudo e mozzarella di bufala.',
prepMinutes: 10,
difficulty: 'FACILE',
kcal: 460,
proteinG: 32,
fatG: 35,
netCarbG: 2,
phases: [1, 2, 3],
ingredients: [
{ name: 'Uova', quantity: 3, unit: 'pz' },
{ name: 'Prosciutto crudo', quantity: 30, unit: 'g' },
{ name: 'Mozzarella di bufala', quantity: 40, unit: 'g' },
],
},
// PRANZO
{
name: 'Tacchino con broccoli al vapore',
category: 'PRANZO',
description: 'Petto di tacchino alla piastra con broccoli e olio EVO.',
prepMinutes: 20,
difficulty: 'FACILE',
kcal: 410,
proteinG: 42,
fatG: 22,
netCarbG: 6,
phases: [1, 2, 3],
ingredients: [
{ name: 'Petto di tacchino', quantity: 150, unit: 'g' },
{ name: 'Broccoli', quantity: 200, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
},
{
name: 'Insalata di sgombro e olive',
category: 'PRANZO',
description: 'Insalata mista, sgombro al naturale, olive nere, capperi.',
prepMinutes: 8,
difficulty: 'FACILE',
kcal: 480,
proteinG: 30,
fatG: 36,
netCarbG: 5,
phases: [1, 2, 3],
ingredients: [
{ name: 'Sgombro', quantity: 130, unit: 'g' },
{ name: 'Insalata mista', quantity: 100, unit: 'g' },
{ name: 'Olive nere', quantity: 25, unit: 'g' },
{ name: 'Capperi sotto sale', quantity: 1, unit: 'cucchiaio' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Pollo al limone con asparagi',
category: 'PRANZO',
description: 'Petto di pollo marinato al limone con asparagi al forno.',
prepMinutes: 22,
difficulty: 'FACILE',
kcal: 470,
proteinG: 40,
fatG: 28,
netCarbG: 6,
phases: [1, 2, 3],
ingredients: [
{ name: 'Petto di pollo', quantity: 150, unit: 'g' },
{ name: 'Asparagi', quantity: 180, unit: 'g' },
{ name: 'Limone', quantity: 0.5, unit: 'pz' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
},
{
name: 'Caprese con bufala e pomodorini',
category: 'PRANZO',
description: 'Mozzarella di bufala con pomodorini, basilico e olio EVO.',
prepMinutes: 6,
difficulty: 'FACILE',
kcal: 500,
proteinG: 25,
fatG: 40,
netCarbG: 6,
phases: [1, 2, 3],
ingredients: [
{ name: 'Mozzarella di bufala', quantity: 125, unit: 'g' },
{ name: 'Pomodorini ciliegino', quantity: 150, unit: 'g' },
{ name: 'Basilico fresco', quantity: 10, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
variants: [
{
name: 'Con avocado',
description: 'Aggiungi mezzo avocado a fette: capresotto più nutriente e saziante.',
kcalDelta: 120,
},
{
name: 'Con prosciutto crudo',
description: 'Avvolgi le fette di mozzarella con prosciutto crudo: più proteine.',
kcalDelta: 80,
},
],
},
{
name: 'Insalata di gamberi e avocado',
category: 'PRANZO',
description: 'Gamberi al vapore, avocado, rucola e limone.',
prepMinutes: 15,
difficulty: 'FACILE',
kcal: 420,
proteinG: 28,
fatG: 28,
netCarbG: 5,
phases: [1, 2, 3],
ingredients: [
{ name: 'Gamberi', quantity: 150, unit: 'g' },
{ name: 'Avocado', quantity: 0.5, unit: 'pz' },
{ name: 'Rucola', quantity: 60, unit: 'g' },
{ name: 'Limone', quantity: 0.5, unit: 'pz' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Carpaccio di bresaola con grana',
category: 'PRANZO',
description: 'Bresaola con scaglie di grana, rucola e limone.',
prepMinutes: 5,
difficulty: 'FACILE',
kcal: 360,
proteinG: 38,
fatG: 22,
netCarbG: 2,
phases: [1, 2, 3],
ingredients: [
{ name: 'Bresaola', quantity: 80, unit: 'g' },
{ name: 'Grana Padano', quantity: 25, unit: 'g' },
{ name: 'Rucola', quantity: 50, unit: 'g' },
{ name: 'Limone', quantity: 0.5, unit: 'pz' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Frittata di melanzane',
category: 'PRANZO',
description: 'Frittata con melanzane grigliate e parmigiano.',
prepMinutes: 25,
difficulty: 'MEDIA',
kcal: 450,
proteinG: 26,
fatG: 33,
netCarbG: 6,
phases: [1, 2, 3],
ingredients: [
{ name: 'Uova', quantity: 3, unit: 'pz' },
{ name: 'Melanzane', quantity: 150, unit: 'g' },
{ name: 'Parmigiano Reggiano', quantity: 25, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
},
{
name: 'Insalata di lenticchie e tonno',
category: 'PRANZO',
description: "Lenticchie cotte con tonno sott'olio, pomodorini e prezzemolo.",
prepMinutes: 10,
difficulty: 'FACILE',
kcal: 430,
proteinG: 32,
fatG: 18,
netCarbG: 22,
phases: [2, 3],
notesChef: 'Disponibile dalla 3ª settimana di Fase 2 (reintroduzione legumi).',
ingredients: [
{ name: 'Lenticchie cotte', quantity: 130, unit: 'g' },
{ name: "Tonno sott'olio", quantity: 100, unit: 'g' },
{ name: 'Pomodorini ciliegino', quantity: 80, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Con ceci al posto delle lenticchie',
description: 'Stessa ricetta con ceci cotti: più cremosa, disponibile dalla settimana 4.',
kcalDelta: 50,
},
{
name: 'Con sgombro fresco',
description: 'Sgombro al naturale al posto del tonno: profilo lipidico migliore.',
kcalDelta: -20,
},
],
},
// SPUNTINO
{
name: 'Noci e cubetti di parmigiano',
category: 'SPUNTINO',
description: 'Mix di noci e cubetti di parmigiano stagionato.',
prepMinutes: 1,
difficulty: 'FACILE',
kcal: 200,
proteinG: 11,
fatG: 15,
netCarbG: 2,
phases: [1, 2, 3],
ingredients: [
{ name: 'Noci', quantity: 15, unit: 'g' },
{ name: 'Parmigiano Reggiano', quantity: 25, unit: 'g' },
],
},
{
name: 'Stracchino con cetrioli',
category: 'SPUNTINO',
description: 'Stracchino spalmato su bastoncini di cetriolo.',
prepMinutes: 3,
difficulty: 'FACILE',
kcal: 130,
proteinG: 7,
fatG: 10,
netCarbG: 3,
phases: [1, 2, 3],
ingredients: [
{ name: 'Stracchino', quantity: 40, unit: 'g' },
{ name: 'Cetrioli', quantity: 100, unit: 'g' },
],
},
{
name: 'Frutti di bosco con cocco',
category: 'SPUNTINO',
description: 'Frutti di bosco freschi cosparsi di cocco rapè.',
prepMinutes: 2,
difficulty: 'FACILE',
kcal: 110,
proteinG: 1,
fatG: 7,
netCarbG: 9,
phases: [1, 2, 3],
ingredients: [
{ name: 'Frutti di bosco misti', quantity: 80, unit: 'g' },
{ name: 'Cocco rapè non zuccherato', quantity: 10, unit: 'g' },
],
},
{
name: 'Prosciutto crudo e mozzarella',
category: 'SPUNTINO',
description: 'Fettina di prosciutto crudo arrotolata su mozzarella.',
prepMinutes: 1,
difficulty: 'FACILE',
kcal: 180,
proteinG: 14,
fatG: 13,
netCarbG: 1,
phases: [1, 2, 3],
ingredients: [
{ name: 'Prosciutto crudo', quantity: 30, unit: 'g' },
{ name: 'Mozzarella di bufala', quantity: 40, unit: 'g' },
],
},
{
name: 'Mela e mandorle',
category: 'SPUNTINO',
description: 'Mezza mela a spicchi con mandorle al naturale.',
prepMinutes: 2,
difficulty: 'FACILE',
kcal: 160,
proteinG: 4,
fatG: 10,
netCarbG: 13,
phases: [2, 3],
ingredients: [
{ name: 'Mela', quantity: 0.5, unit: 'pz' },
{ name: 'Mandorle', quantity: 15, unit: 'g' },
],
},
{
name: 'Hummus di ceci con verdure crude',
category: 'SPUNTINO',
description: 'Crema di ceci con bastoncini di sedano e peperoni.',
prepMinutes: 5,
difficulty: 'FACILE',
kcal: 170,
proteinG: 6,
fatG: 10,
netCarbG: 14,
phases: [2, 3],
ingredients: [
{ name: 'Ceci cotti', quantity: 60, unit: 'g' },
{ name: 'Peperoni', quantity: 80, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
// CENA
{
name: 'Sgombro al cartoccio con melanzane',
category: 'CENA',
description: 'Sgombro intero al cartoccio con melanzane e pomodorini.',
prepMinutes: 30,
difficulty: 'MEDIA',
kcal: 510,
proteinG: 32,
fatG: 38,
netCarbG: 6,
phases: [1, 2, 3],
notesChef: 'Cottura 20 min a 200°C. Se ti piace lo zenzero, aggiunto crudo è perfetto.',
ingredients: [
{ name: 'Sgombro', quantity: 200, unit: 'g' },
{ name: 'Melanzane', quantity: 150, unit: 'g' },
{ name: 'Pomodorini ciliegino', quantity: 80, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
},
{
name: 'Tagliolini di zucchine al pesto',
category: 'CENA',
description: 'Zucchine spiralizzate con pesto fresco di basilico e pinoli.',
prepMinutes: 15,
difficulty: 'FACILE',
kcal: 380,
proteinG: 12,
fatG: 32,
netCarbG: 8,
phases: [1, 2, 3],
ingredients: [
{ name: 'Zucchine', quantity: 250, unit: 'g' },
{ name: 'Basilico fresco', quantity: 20, unit: 'g' },
{ name: 'Parmigiano Reggiano', quantity: 20, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 2, unit: 'cucchiaio' },
],
variants: [
{
name: 'Con gamberi saltati',
description: 'Aggiungi 100 g di gamberi saltati in padella: piatto più completo.',
kcalDelta: 100,
},
{
name: 'Pesto di rucola',
description: 'Sostituisci il basilico con rucola: gusto più deciso, stesso profilo macros.',
},
],
},
{
name: 'Pollo al curry con cavolfiore',
category: 'CENA',
description: 'Bocconcini di pollo al curry con cavolfiore "riso".',
prepMinutes: 25,
difficulty: 'MEDIA',
kcal: 470,
proteinG: 38,
fatG: 28,
netCarbG: 8,
phases: [1, 2, 3],
ingredients: [
{ name: 'Petto di pollo', quantity: 150, unit: 'g' },
{ name: 'Cavolfiore', quantity: 200, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
},
{
name: 'Salmone su crema di broccoli',
category: 'CENA',
description: 'Filetto di salmone scottato su vellutata di broccoli.',
prepMinutes: 25,
difficulty: 'MEDIA',
kcal: 530,
proteinG: 38,
fatG: 36,
netCarbG: 8,
phases: [1, 2, 3],
ingredients: [
{ name: 'Filetto di salmone', quantity: 150, unit: 'g' },
{ name: 'Broccoli', quantity: 200, unit: 'g' },
{ name: 'Burro', quantity: 10, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Polpettone di tacchino e ricotta',
category: 'CENA',
description: 'Polpettone con tacchino macinato, ricotta e spinaci.',
prepMinutes: 35,
difficulty: 'MEDIA',
kcal: 480,
proteinG: 42,
fatG: 30,
netCarbG: 4,
phases: [1, 2, 3],
ingredients: [
{ name: 'Petto di tacchino', quantity: 150, unit: 'g' },
{ name: 'Ricotta vaccina', quantity: 60, unit: 'g' },
{ name: 'Spinaci surgelati', quantity: 80, unit: 'g' },
{ name: 'Uova', quantity: 1, unit: 'pz' },
{ name: 'Parmigiano Reggiano', quantity: 20, unit: 'g' },
],
},
{
name: 'Funghi ripieni di salsiccia (alternativa)',
category: 'CENA',
description: 'Funghi champignon farciti con tacchino e parmigiano.',
prepMinutes: 25,
difficulty: 'MEDIA',
kcal: 420,
proteinG: 32,
fatG: 28,
netCarbG: 4,
phases: [1, 2, 3],
ingredients: [
{ name: 'Funghi champignon', quantity: 200, unit: 'g' },
{ name: 'Petto di tacchino', quantity: 100, unit: 'g' },
{ name: 'Parmigiano Reggiano', quantity: 25, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
},
{
name: 'Insalata di quinoa con pollo e verdure',
category: 'CENA',
description: 'Quinoa cotta con pollo, peperoni e zucchine grigliate.',
prepMinutes: 25,
difficulty: 'FACILE',
kcal: 510,
proteinG: 38,
fatG: 22,
netCarbG: 26,
phases: [3],
notesChef: 'Disponibile in mantenimento (Fase 3) o dalla 7ª settimana di Fase 2.',
ingredients: [
{ name: 'Quinoa cotta', quantity: 100, unit: 'g' },
{ name: 'Petto di pollo', quantity: 130, unit: 'g' },
{ name: 'Peperoni', quantity: 100, unit: 'g' },
{ name: 'Zucchine', quantity: 100, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1, unit: 'cucchiaio' },
],
variants: [
{
name: 'Versione vegetariana',
description: 'Sostituisci il pollo con 80 g di feta + 1 uovo sodo: più mediterranea.',
kcalDelta: -30,
},
{
name: 'Con gamberi',
description: 'Gamberi al posto del pollo: piatto più estivo e leggero.',
kcalDelta: -80,
},
],
},
{
name: 'Branzino in crosta di erbe',
category: 'CENA',
description: 'Branzino al forno con crosta di basilico, prezzemolo e mandorle.',
prepMinutes: 30,
difficulty: 'MEDIA',
kcal: 460,
proteinG: 42,
fatG: 28,
netCarbG: 5,
phases: [1, 2, 3],
ingredients: [
{ name: 'Branzino', quantity: 1, unit: 'pz' },
{ name: 'Basilico fresco', quantity: 15, unit: 'g' },
{ name: 'Mandorle', quantity: 20, unit: 'g' },
{ name: 'Olio extravergine di oliva', quantity: 1.5, unit: 'cucchiaio' },
],
},
];