{
  "schemaVersion": 1,
  "engineVersion": 3,
  "version": 1,
  "weekId": "freeze-two-dinners",
  "title": "Freeze two dinners week",
  "goal": "Freeze Thursday’s chickpea pot and Friday’s soup on prep day; thaw in the fridge the night before.",
  "servings": 4,
  "firstDate": "2026-10-26",
  "prepStartHour": 19,
  "prepStartMinute": 0,
  "input": {
    "servings": 4,
    "mealStartDate": "2026-10-26",
    "potLitres": 6,
    "availableEquipment": [
      "stove",
      "oven"
    ],
    "prepSelections": [
      "prep-tomato-chickpea-pot",
      "prep-lentil-cabbage-soup"
    ],
    "pantryItems": [
      {
        "ingredientId": "potato",
        "quantity": 500,
        "unit": "g",
        "state": "raw",
        "userConfirmed": true
      }
    ],
    "excludeTags": [],
    "preparedBatches": {},
    "thawedPortions": {}
  },
  "dinners": [
    {
      "dayIndex": 0,
      "date": "2026-10-26",
      "recipe": {
        "id": "lemon-chickpea-rice",
        "slug": "lemon-chickpea-rice",
        "title": "Lemon chickpea rice",
        "summary": "A lemony chickpea and zucchini skillet keeps the vegetables separate from freshly cooked rice.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "rice",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "chickpea",
            "quantity": 480,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "zucchini",
            "quantity": 600,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "carrot",
            "quantity": 300,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 40,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "lemon",
            "quantity": 40,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 6,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 600,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 35,
        "steps": [
          {
            "id": "lemon-chickpea-rice-1",
            "instructions": "Cut 600g zucchini into 1.5cm cubes, 300g carrots into 5mm dice and 200g onions into 5mm dice. Heat 40ml olive oil in a skillet over medium heat. Cook carrot and onion for 5 minutes, then add zucchini and cook for 6–8 minutes until tender with golden edges. Spread onto two pans if liquid pools.",
            "ingredientRefs": [
              "zucchini",
              "carrot",
              "onion",
              "oil"
            ],
            "durationRange": [
              6,
              8
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "tender with golden edges"
          },
          {
            "id": "lemon-chickpea-rice-2",
            "instructions": "Add 480g chickpeas, 6g salt and 2g black pepper. Cook for 5 minutes, stirring until the chickpeas steam throughout. If the pan is dry, loosen with a little processing water.",
            "ingredientRefs": [
              "chickpea",
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lemon-chickpea-rice-1"
            ],
            "doneCondition": "the chickpeas steam throughout"
          },
          {
            "id": "lemon-chickpea-rice-3",
            "instructions": "With two burners, cook this rice while making the topping; on one burner finish the topping first and allow extra time. Rinse 320g rice and cook with 600ml recipe water in a covered saucepan according to the packet ratio. Bring to a boil, then cook on low for 12–18 minutes until tender. Add a little boiling processing water if hard in the centre, then rest off the heat for 5 minutes.",
            "ingredientRefs": [
              "rice",
              "water"
            ],
            "durationRange": [
              12,
              18
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "tender"
          },
          {
            "id": "lemon-chickpea-rice-4",
            "instructions": "Stir 40ml lemon juice through the hot chickpea topping just before serving. Fluff the rice and divide the topping over it.",
            "ingredientRefs": [
              "lemon"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lemon-chickpea-rice-2",
              "lemon-chickpea-rice-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "lemon-chickpea-rice-5",
            "instructions": "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits. For this planner, refrigerate cooked rice for at most 24 hours or freeze promptly on the preparation day after rapid cooling in shallow containers. This 24-hour rice limit is a conservative product choice, not a USDA-specific rice rule. Reheat the cooked portion evenly to 74°C with a thermometer.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lemon-chickpea-rice-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 24,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ],
          "policyNote": "24 hours for cooked rice is a conservative product choice."
        },
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-04",
          "licenseStatus": "Original project content; MIT"
        },
        "potLitres": 3,
        "familyId": "saute-toss",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-lemon-chickpea-rice",
          "title": "Lemon chickpea vegetable topping",
          "ingredientIds": [
            "zucchini",
            "carrot",
            "onion",
            "oil",
            "chickpea",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 28,
          "finishMinutes": 22,
          "prepInstructions": [
            "Cut {qty:zucchini} into 1.5cm cubes, {qty:carrot} into 5mm dice and {qty:onion} into 5mm dice. Heat {qty:oil} in a skillet over medium heat. Cook carrot and onion for 5 minutes, then add zucchini and cook for 6–8 minutes until tender with golden edges. Spread onto two pans if liquid pools.",
            "Add {qty:chickpea}, {qty:salt} and {qty:pepper}. Cook for 5 minutes, stirring until the chickpeas steam throughout. If the pan is dry, loosen with a little processing water.",
            "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches.",
            "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
          ],
          "finishInstructions": [
            "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
            "With two burners, cook this rice while making the topping; on one burner finish the topping first and allow extra time. Rinse {qty:rice} and cook with {qty:water} in a covered saucepan according to the packet ratio. Bring to a boil, then cook on low for 12–18 minutes until tender. Add a little boiling processing water if hard in the centre, then rest off the heat for 5 minutes.",
            "Stir {qty:lemon} through the hot chickpea topping just before serving. Fluff the rice and divide the topping over it."
          ],
          "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate."
        },
        "freezable": true,
        "finishAfterPrep": 22,
        "servings": 4
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 6L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 35
    },
    {
      "dayIndex": 1,
      "date": "2026-10-27",
      "recipe": {
        "id": "broccoli-rice",
        "slug": "broccoli-rice",
        "title": "Broccoli and black bean rice",
        "summary": "Broccoli steams above rice before black beans and lemon are folded through.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "rice",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "broccoli",
            "quantity": 600,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "black-bean",
            "quantity": 480,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "lemon",
            "quantity": 40,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 30,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 6,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 700,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 12,
        "elapsedMinutes": 40,
        "steps": [
          {
            "id": "broccoli-rice-1",
            "instructions": "Rinse 320g rice and put in a fitted-lid pot with 700ml recipe water, checking the packet ratio first. Bring to a boil, reduce to low, cover and simmer for 12–15 minutes until most liquid is absorbed but the centre of a grain is still slightly firm.",
            "ingredientRefs": [
              "rice",
              "water"
            ],
            "durationRange": [
              12,
              15
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "most liquid is absorbed but the centre of a grain is still slightly firm"
          },
          {
            "id": "broccoli-rice-2",
            "instructions": "Cut 600g broccoli into 2cm florets and peel thick stems before slicing them 5mm thick. Scatter over the rice, cover and steam for 5–7 minutes until a knife enters the stems easily. If rice is hard and dry, add a splash of boiling processing water before covering again.",
            "ingredientRefs": [
              "broccoli"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "broccoli-rice-1"
            ],
            "doneCondition": "a knife enters the stems easily"
          },
          {
            "id": "broccoli-rice-3",
            "instructions": "Fold in 480g black beans, 30ml olive oil, 6g salt and 2g black pepper. Cover over low heat for 3–5 minutes until the beans steam throughout. Rest off the heat for 5 minutes.",
            "ingredientRefs": [
              "black-bean",
              "oil",
              "salt",
              "pepper"
            ],
            "durationRange": [
              3,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "broccoli-rice-2"
            ],
            "doneCondition": "the beans steam throughout"
          },
          {
            "id": "broccoli-rice-4",
            "instructions": "Stir through 40ml lemon juice and fluff gently without crushing the broccoli. Divide evenly into bowls.",
            "ingredientRefs": [
              "lemon"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "broccoli-rice-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "broccoli-rice-5",
            "instructions": "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits. For this planner, refrigerate cooked rice for at most 24 hours or freeze promptly on the preparation day after rapid cooling in shallow containers. This 24-hour rice limit is a conservative product choice, not a USDA-specific rice rule. Reheat the cooked portion evenly to 74°C with a thermometer.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "broccoli-rice-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 24,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ],
          "policyNote": "24 hours for cooked rice is a conservative product choice."
        },
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-04",
          "licenseStatus": "Original project content; MIT"
        },
        "potLitres": 3,
        "familyId": "grain-pots",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-broccoli-rice",
          "title": "Broccoli and bean rice",
          "ingredientIds": [
            "rice",
            "water",
            "broccoli",
            "black-bean",
            "oil",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 24,
          "prepMinutes": 35,
          "finishMinutes": 10,
          "prepInstructions": [
            "Rinse {qty:rice} and put in a fitted-lid pot with {qty:water}, checking the packet ratio first. Bring to a boil, reduce to low, cover and simmer for 12–15 minutes until most liquid is absorbed but the centre of a grain is still slightly firm.",
            "Cut {qty:broccoli} into 2cm florets and peel thick stems before slicing them 5mm thick. Scatter over the rice, cover and steam for 5–7 minutes until a knife enters the stems easily. If rice is hard and dry, add a splash of boiling processing water before covering again.",
            "Fold in {qty:black-bean}, {qty:oil}, {qty:salt} and {qty:pepper}. Cover over low heat for 3–5 minutes until the beans steam throughout. Rest off the heat for 5 minutes.",
            "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches.",
            "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits. For this planner, refrigerate cooked rice for at most 24 hours or freeze promptly on the preparation day after rapid cooling in shallow containers. This 24-hour rice limit is a conservative product choice, not a USDA-specific rice rule. Reheat the cooked portion evenly to 74°C with a thermometer."
          ],
          "finishInstructions": [
            "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
            "Stir through {qty:lemon} and fluff gently without crushing the broccoli. Divide evenly into bowls."
          ],
          "qualityNotes": "Frozen broccoli will be softer. Cool in shallow portions and freeze promptly for later dinners; the 24-hour rice limit is a conservative planner policy."
        },
        "freezable": true,
        "finishAfterPrep": 10,
        "servings": 4
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 6L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 40
    },
    {
      "dayIndex": 2,
      "date": "2026-10-28",
      "recipe": {
        "id": "mushroom-pasta",
        "slug": "mushroom-pasta",
        "title": "Mushroom and pea pasta",
        "summary": "Browning mushrooms before adding peas builds a savoury sauce with no cream.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "pasta",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "mushroom",
            "quantity": 500,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "pea",
            "quantity": 300,
            "unit": "g",
            "state": "frozen"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 30,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 6,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 200,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 45,
        "steps": [
          {
            "id": "mushroom-pasta-1",
            "instructions": "Wipe 500g mushrooms clean and slice 5mm thick; cut 200g onions into 5mm dice. Heat 30ml olive oil in a broad pot over medium-high heat. Cook onion for 3 minutes, then add mushrooms in one layer and leave for 2 minutes before stirring. Continue for 6–8 minutes until their liquid evaporates and edges brown; use two batches if they pool liquid.",
            "ingredientRefs": [
              "mushroom",
              "onion",
              "oil"
            ],
            "durationRange": [
              6,
              8
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "their liquid evaporates and edges brown; use two batches if they pool liquid"
          },
          {
            "id": "mushroom-pasta-2",
            "instructions": "Add 300g peas, 200ml recipe water, 6g salt and 2g black pepper. Simmer over medium heat for 5 minutes until peas are tender and the pan holds a little glossy liquid. Scrape browned bits into the sauce; add a splash of processing water if dry.",
            "ingredientRefs": [
              "pea",
              "water",
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "mushroom-pasta-1"
            ],
            "doneCondition": "peas are tender and the pan holds a little glossy liquid"
          },
          {
            "id": "mushroom-pasta-3",
            "instructions": "Transfer the sauce to a bowl for one-pot cooking. Boil about 2L processing water per two servings in the pot and add 320g pasta. Cook for the packet time, about 8–12 minutes, until firm but no longer hard; drain and retain a little cooking water.",
            "ingredientRefs": [
              "pasta"
            ],
            "durationRange": [
              8,
              12
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "mushroom-pasta-2"
            ],
            "doneCondition": "firm but no longer hard; drain and retain a little cooking water"
          },
          {
            "id": "mushroom-pasta-4",
            "instructions": "Return the sauce and pasta to the pot. Toss over low heat for 1–2 minutes until hot; add a spoonful of retained water if it sticks together.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              2
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "mushroom-pasta-3"
            ],
            "doneCondition": "hot; add a spoonful of retained water if it sticks together"
          },
          {
            "id": "mushroom-pasta-5",
            "instructions": "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "mushroom-pasta-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 72,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-04",
          "licenseStatus": "Original project content; MIT"
        },
        "potLitres": 4,
        "processingWaterMl": 2000,
        "familyId": "saute-toss",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-mushroom-pasta",
          "title": "Browned mushroom and pea sauce",
          "ingredientIds": [
            "mushroom",
            "onion",
            "oil",
            "pea",
            "water",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 20,
          "finishMinutes": 15,
          "prepInstructions": [
            "Wipe {qty:mushroom} clean and slice 5mm thick; cut {qty:onion} into 5mm dice. Heat {qty:oil} in a broad pot over medium-high heat. Cook onion for 3 minutes, then add mushrooms in one layer and leave for 2 minutes before stirring. Continue for 6–8 minutes until their liquid evaporates and edges brown; use two batches if they pool liquid.",
            "Add {qty:pea}, {qty:water}, {qty:salt} and {qty:pepper}. Simmer over medium heat for 5 minutes until peas are tender and the pan holds a little glossy liquid. Scrape browned bits into the sauce; add a splash of processing water if dry.",
            "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches.",
            "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
          ],
          "finishInstructions": [
            "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
            "Transfer the sauce to a bowl for one-pot cooking. Boil about 2L processing water per two servings in the pot and add {qty:pasta}. Cook for the packet time, about 8–12 minutes, until firm but no longer hard; drain and retain a little cooking water.",
            "Return the sauce and pasta to the pot. Toss over low heat for 1–2 minutes until hot; add a spoonful of retained water if it sticks together."
          ],
          "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate."
        },
        "freezable": true,
        "finishAfterPrep": 15,
        "servings": 4
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 6L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 45
    },
    {
      "dayIndex": 3,
      "date": "2026-10-29",
      "recipe": {
        "id": "tomato-chickpea-pot",
        "slug": "tomato-chickpea-pot",
        "title": "Tomato chickpea potato pot",
        "summary": "Potatoes simmer in a cumin tomato sauce before chickpeas are added to stay intact.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "chickpea",
            "quantity": 480,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "canned-tomato",
            "quantity": 800,
            "unit": "g",
            "state": "canned"
          },
          {
            "ingredientId": "potato",
            "quantity": 600,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "cumin",
            "quantity": 4,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "oil",
            "quantity": 30,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 6,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 400,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 12,
        "elapsedMinutes": 50,
        "steps": [
          {
            "id": "tomato-chickpea-pot-1",
            "instructions": "Cut 200g onions into 5mm dice and 600g potatoes into 1cm cubes. Heat 30ml olive oil in a pot over medium heat and soften the onion for 5 minutes. Stir in 4g ground cumin for 30 seconds until fragrant.",
            "ingredientRefs": [
              "onion",
              "potato",
              "oil",
              "cumin"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "fragrant"
          },
          {
            "id": "tomato-chickpea-pot-2",
            "instructions": "Add potatoes, 800g canned tomatoes, 400ml recipe water, 6g salt and 2g black pepper. Bring to a simmer, partly cover and cook over low heat for 20–30 minutes until a fork passes easily through a potato cube. Tomatoes can slow softening; if cubes are firm, add a little hot processing water and continue cooking instead of adding the beans early.",
            "ingredientRefs": [
              "canned-tomato",
              "water",
              "salt",
              "pepper"
            ],
            "durationRange": [
              20,
              30
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-chickpea-pot-1"
            ],
            "doneCondition": "a fork passes easily through a potato cube"
          },
          {
            "id": "tomato-chickpea-pot-3",
            "instructions": "Add 480g chickpeas and simmer uncovered for 5–7 minutes until steaming throughout and the sauce clings to the potatoes. Stir gently to avoid breaking the chickpeas.",
            "ingredientRefs": [
              "chickpea"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-chickpea-pot-2"
            ],
            "doneCondition": "steaming throughout and the sauce clings to the potatoes"
          },
          {
            "id": "tomato-chickpea-pot-4",
            "instructions": "Rest for 2 minutes and divide into bowls. If preparing a late-week portion, chill in shallow containers and freeze promptly on the preparation day.",
            "ingredientRefs": [],
            "durationRange": [
              2,
              4
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-chickpea-pot-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "tomato-chickpea-pot-5",
            "instructions": "The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-chickpea-pot-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 72,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-04",
          "licenseStatus": "Original project content; MIT"
        },
        "freezable": true,
        "potLitres": 3,
        "familyId": "simmered-pots",
        "batchServings": 8,
        "makeAhead": {
          "id": "prep-tomato-chickpea-pot",
          "title": "Tomato chickpea potato pot",
          "ingredientIds": [
            "onion",
            "potato",
            "oil",
            "cumin",
            "canned-tomato",
            "water",
            "salt",
            "pepper",
            "chickpea"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 48,
          "finishMinutes": 12,
          "prepInstructions": [
            "Cut {qty:onion} into 5mm dice and {qty:potato} into 1cm cubes. Heat {qty:oil} in a pot over medium heat and soften the onion for 5 minutes. Stir in {qty:cumin} for 30 seconds until fragrant.",
            "Add potatoes, {qty:canned-tomato}, {qty:water}, {qty:salt} and {qty:pepper}. Bring to a simmer, partly cover and cook over low heat for 20–30 minutes until a fork passes easily through a potato cube. Tomatoes can slow softening; if cubes are firm, add a little hot processing water and continue cooking instead of adding the beans early.",
            "Add {qty:chickpea} and simmer uncovered for 5–7 minutes until steaming throughout and the sauce clings to the potatoes. Stir gently to avoid breaking the chickpeas.",
            "The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time.",
            "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
          ],
          "finishInstructions": [
            "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
            "Rest for 2 minutes and divide into bowls. If preparing a late-week portion, chill in shallow containers and freeze promptly on the preparation day."
          ],
          "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate."
        },
        "finishAfterPrep": 12,
        "servings": 4
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 6L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 12
    },
    {
      "dayIndex": 4,
      "date": "2026-10-30",
      "recipe": {
        "id": "lentil-cabbage-soup",
        "slug": "lentil-cabbage-soup",
        "title": "Lentil cabbage soup",
        "summary": "A tomato-free lentil soup with soft potato cubes, sweet carrots and ribbons of cabbage.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "lentil",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "cabbage",
            "quantity": 600,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "carrot",
            "quantity": 400,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "potato",
            "quantity": 400,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 30,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 6,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 1800,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 50,
        "steps": [
          {
            "id": "lentil-cabbage-soup-1",
            "instructions": "Sort and rinse 320g red lentils. Cut 400g carrots and 400g potatoes into 1cm cubes, 200g onions into 5mm dice and 600g cabbage into 5mm ribbons. Heat 30ml olive oil in a large pot over medium heat and soften onion and carrot for 5 minutes.",
            "ingredientRefs": [
              "lentil",
              "carrot",
              "potato",
              "onion",
              "cabbage",
              "oil"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "lentil-cabbage-soup-2",
            "instructions": "Add lentils, potatoes and 1800ml recipe water. Bring to a boil, partly cover and simmer over low heat for 20–30 minutes, stirring occasionally, until lentils break down and potatoes are fork-tender. If the base catches, lower the heat and add a little hot processing water.",
            "ingredientRefs": [
              "water"
            ],
            "durationRange": [
              20,
              30
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lentil-cabbage-soup-1"
            ],
            "doneCondition": "lentils break down and potatoes are fork-tender"
          },
          {
            "id": "lentil-cabbage-soup-3",
            "instructions": "Add cabbage, 6g salt and 2g black pepper; simmer for 5–8 minutes until the thickest cabbage ribs are tender. If it is too thick to ladle, add and record extra processing water.",
            "ingredientRefs": [
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              8
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lentil-cabbage-soup-2"
            ],
            "doneCondition": "the thickest cabbage ribs are tender"
          },
          {
            "id": "lentil-cabbage-soup-4",
            "instructions": "Rest for 2 minutes and serve in warmed bowls. Freeze late-week prep portions promptly in shallow containers on preparation day.",
            "ingredientRefs": [],
            "durationRange": [
              2,
              4
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lentil-cabbage-soup-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "lentil-cabbage-soup-5",
            "instructions": "The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lentil-cabbage-soup-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 72,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-04",
          "licenseStatus": "Original project content; MIT"
        },
        "freezable": true,
        "potLitres": 4,
        "familyId": "simmered-pots",
        "batchServings": 8,
        "makeAhead": {
          "id": "prep-lentil-cabbage-soup",
          "title": "Lentil cabbage soup",
          "ingredientIds": [
            "lentil",
            "carrot",
            "potato",
            "onion",
            "cabbage",
            "oil",
            "water",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 48,
          "finishMinutes": 12,
          "prepInstructions": [
            "Sort and rinse {qty:lentil}. Cut {qty:carrot} and {qty:potato} into 1cm cubes, {qty:onion} into 5mm dice and {qty:cabbage} into 5mm ribbons. Heat {qty:oil} in a large pot over medium heat and soften onion and carrot for 5 minutes.",
            "Add lentils, potatoes and {qty:water}. Bring to a boil, partly cover and simmer over low heat for 20–30 minutes, stirring occasionally, until lentils break down and potatoes are fork-tender. If the base catches, lower the heat and add a little hot processing water.",
            "Add cabbage, {qty:salt} and {qty:pepper}; simmer for 5–8 minutes until the thickest cabbage ribs are tender. If it is too thick to ladle, add and record extra processing water.",
            "The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time.",
            "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
          ],
          "finishInstructions": [
            "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
            "Rest for 2 minutes and serve in warmed bowls. Freeze late-week prep portions promptly in shallow containers on preparation day."
          ],
          "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate."
        },
        "finishAfterPrep": 12,
        "servings": 4
      },
      "batches": 2,
      "capacityNote": "Use 2 batch(es) with your 6L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 22
    }
  ],
  "shopping": [
    {
      "ingredientId": "rice",
      "name": "Rice",
      "required": 640,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 640,
      "purchased": 1000,
      "remaining": 360,
      "unit": "g",
      "state": "dry",
      "packageQty": 500,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "chickpea",
      "name": "Chickpeas",
      "required": 960,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 960,
      "purchased": 960,
      "remaining": 0,
      "unit": "g",
      "state": "drained",
      "packageQty": 240,
      "packCount": 4,
      "notPurchased": false,
      "packAssumption": "Example: 400g gross can, 240g drained. Confirm your label.",
      "retained": 0
    },
    {
      "ingredientId": "zucchini",
      "name": "Zucchini",
      "required": 600,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 600,
      "purchased": 600,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 0,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Buy exact edible weight; record any trimming losses.",
      "retained": 0
    },
    {
      "ingredientId": "carrot",
      "name": "Carrots",
      "required": 700,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 700,
      "purchased": 1000,
      "remaining": 300,
      "unit": "g",
      "state": "raw",
      "packageQty": 1000,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 1000g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "onion",
      "name": "Onions",
      "required": 800,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 800,
      "purchased": 1000,
      "remaining": 200,
      "unit": "g",
      "state": "raw",
      "packageQty": 500,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "oil",
      "name": "Olive oil",
      "required": 160,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 160,
      "purchased": 500,
      "remaining": 340,
      "unit": "ml",
      "state": "raw",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500ml usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "lemon",
      "name": "Lemon juice",
      "required": 80,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 80,
      "purchased": 250,
      "remaining": 170,
      "unit": "ml",
      "state": "raw",
      "packageQty": 250,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 250ml usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "salt",
      "name": "Salt",
      "required": 30,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 30,
      "purchased": 250,
      "remaining": 220,
      "unit": "g",
      "state": "dry",
      "packageQty": 250,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 250g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "pepper",
      "name": "Black pepper",
      "required": 10,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 10,
      "purchased": 50,
      "remaining": 40,
      "unit": "g",
      "state": "dry",
      "packageQty": 50,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 50g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "water",
      "name": "Recipe water",
      "required": 3700,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 3700,
      "purchased": 0,
      "remaining": 0,
      "unit": "ml",
      "state": "raw",
      "packageQty": 0,
      "packCount": 0,
      "notPurchased": true,
      "packAssumption": "Tap water; recipe water excludes processing water.",
      "retained": 0
    },
    {
      "ingredientId": "broccoli",
      "name": "Broccoli",
      "required": 600,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 600,
      "purchased": 800,
      "remaining": 200,
      "unit": "g",
      "state": "raw",
      "packageQty": 400,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Example package: 400g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "black-bean",
      "name": "Black beans",
      "required": 480,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 480,
      "purchased": 480,
      "remaining": 0,
      "unit": "g",
      "state": "drained",
      "packageQty": 240,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Example: 400g gross can, 240g drained. Confirm your label.",
      "retained": 0
    },
    {
      "ingredientId": "pasta",
      "name": "Pasta",
      "required": 320,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 320,
      "purchased": 500,
      "remaining": 180,
      "unit": "g",
      "state": "dry",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "mushroom",
      "name": "Mushrooms",
      "required": 500,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 500,
      "purchased": 500,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 250,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Example package: 250g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "pea",
      "name": "Peas",
      "required": 300,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 300,
      "purchased": 500,
      "remaining": 200,
      "unit": "g",
      "state": "frozen",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "canned-tomato",
      "name": "Canned tomatoes",
      "required": 800,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 800,
      "purchased": 800,
      "remaining": 0,
      "unit": "g",
      "state": "canned",
      "packageQty": 400,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Example package: 400g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "potato",
      "name": "Potatoes",
      "required": 1000,
      "prepared": 0,
      "pantryUsed": 500,
      "initial": 500,
      "net": 500,
      "purchased": 1000,
      "remaining": 500,
      "unit": "g",
      "state": "raw",
      "packageQty": 1000,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 1000g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "cumin",
      "name": "Ground cumin",
      "required": 4,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 4,
      "purchased": 40,
      "remaining": 36,
      "unit": "g",
      "state": "dry",
      "packageQty": 40,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 40g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "lentil",
      "name": "Red lentils",
      "required": 320,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 320,
      "purchased": 500,
      "remaining": 180,
      "unit": "g",
      "state": "dry",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "cabbage",
      "name": "Cabbage",
      "required": 600,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 600,
      "purchased": 800,
      "remaining": 200,
      "unit": "g",
      "state": "raw",
      "packageQty": 800,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 800g usable quantity. Confirm label/edible weight.",
      "retained": 0
    }
  ],
  "warnings": [
    "Reference packaged-food ingredients may differ by brand. Check actual labels and cross-contact information. Exclusions filter recipe ingredients and cannot certify allergy safety."
  ],
  "schedule": [
    {
      "id": "check",
      "duration": 5,
      "resources": [
        "person"
      ],
      "dependsOn": [],
      "label": "Check labels, edible pantry quantities, usable dates, containers and fridge / freezer temperatures.",
      "start": 0,
      "end": 5
    },
    {
      "id": "simmer-3",
      "late": false,
      "minimumFinish": 0,
      "minimumStart": 0,
      "duration": 48,
      "resources": [
        "person",
        "stove"
      ],
      "dependsOn": [
        "check"
      ],
      "label": "Prepare Tomato chickpea potato pot in 1 load(s). Cut 200g onions into 5mm dice and 600g potatoes into 1cm cubes. Heat 30ml olive oil in a pot over medium heat and soften the onion for 5 minutes. Stir in 4g ground cumin for 30 seconds until fragrant. Add potatoes, 800g canned tomatoes, 400ml recipe water, 6g salt and 2g black pepper. Bring to a simmer, partly cover and cook over low heat for 20–30 minutes until a fork passes easily through a potato cube. Tomatoes can slow softening; if cubes are firm, add a little hot processing water and continue cooking instead of adding the beans early. Add 480g chickpeas and simmer uncovered for 5–7 minutes until steaming throughout and the sauce clings to the potatoes. Stir gently to avoid breaking the chickpeas. The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits.",
      "start": 5,
      "end": 53
    },
    {
      "id": "freeze-3",
      "late": false,
      "minimumFinish": 0,
      "duration": 5,
      "resources": [
        "person"
      ],
      "dependsOn": [
        "simmer-3"
      ],
      "label": "Divide Tomato chickpea potato pot into 1 labelled Y/1 shares. Chill promptly in shallow containers; refrigerate or freeze within 2 hours, or 1 hour above 32°C.",
      "start": 53,
      "end": 58
    },
    {
      "id": "simmer-4",
      "late": false,
      "minimumFinish": 0,
      "minimumStart": 0,
      "duration": 96,
      "resources": [
        "person",
        "stove"
      ],
      "dependsOn": [
        "check"
      ],
      "label": "Prepare Lentil cabbage soup in 2 load(s). Sort and rinse 320g red lentils. Cut 400g carrots and 400g potatoes into 1cm cubes, 200g onions into 5mm dice and 600g cabbage into 5mm ribbons. Heat 30ml olive oil in a large pot over medium heat and soften onion and carrot for 5 minutes. Add lentils, potatoes and 1800ml recipe water. Bring to a boil, partly cover and simmer over low heat for 20–30 minutes, stirring occasionally, until lentils break down and potatoes are fork-tender. If the base catches, lower the heat and add a little hot processing water. Add cabbage, 6g salt and 2g black pepper; simmer for 5–8 minutes until the thickest cabbage ribs are tender. If it is too thick to ladle, add and record extra processing water. The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time. Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits.",
      "start": 58,
      "end": 154
    },
    {
      "id": "freeze-4",
      "late": false,
      "minimumFinish": 0,
      "duration": 5,
      "resources": [
        "person"
      ],
      "dependsOn": [
        "simmer-4"
      ],
      "label": "Divide Lentil cabbage soup into 1 labelled Y/1 shares. Chill promptly in shallow containers; refrigerate or freeze within 2 hours, or 1 hour above 32°C.",
      "start": 154,
      "end": 159
    }
  ],
  "transitions": [
    {
      "from": "tomato-chickpea-pot",
      "componentId": "prep-tomato-chickpea-pot",
      "to": "tomato-chickpea-pot",
      "dayIndex": 3,
      "preparedAt": "2026-10-25T19:58:00",
      "useAt": "2026-10-29T18:00:00",
      "storageType": "frozen",
      "hours": 94.03333333333333,
      "allowed": true,
      "action": "Freeze promptly at −18°C; thaw in the refrigerator. Reheat cooked food to 74°C, checked with a thermometer.",
      "freezeAt": "2026-10-25T19:58:00",
      "thawAt": "2026-10-28T20:00:00",
      "thawed": false,
      "plannedThawAt": "2026-10-28T20:00:00",
      "useBy": "2026-10-29T20:00:00",
      "portion": "Y/1"
    },
    {
      "from": "lentil-cabbage-soup",
      "componentId": "prep-lentil-cabbage-soup",
      "to": "lentil-cabbage-soup",
      "dayIndex": 4,
      "preparedAt": "2026-10-25T21:39:00",
      "useAt": "2026-10-30T18:00:00",
      "storageType": "frozen",
      "hours": 116.35,
      "allowed": true,
      "action": "Freeze promptly at −18°C; thaw in the refrigerator. Reheat cooked food to 74°C, checked with a thermometer.",
      "freezeAt": "2026-10-25T21:39:00",
      "thawAt": "2026-10-29T20:00:00",
      "thawed": false,
      "plannedThawAt": "2026-10-29T20:00:00",
      "useBy": "2026-10-30T20:00:00",
      "portion": "Y/1"
    }
  ],
  "prepComponents": [
    {
      "id": "prep-lemon-chickpea-rice",
      "title": "Lemon chickpea vegetable topping",
      "ingredientIds": [
        "zucchini",
        "carrot",
        "onion",
        "oil",
        "chickpea",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 28,
      "finishMinutes": 22,
      "prepInstructions": [
        "Cut 600g zucchini into 1.5cm cubes, 300g carrots into 5mm dice and 200g onions into 5mm dice. Heat 40ml olive oil in a skillet over medium heat. Cook carrot and onion for 5 minutes, then add zucchini and cook for 6–8 minutes until tender with golden edges. Spread onto two pans if liquid pools.",
        "Add 480g chickpeas, 6g salt and 2g black pepper. Cook for 5 minutes, stirring until the chickpeas steam throughout. If the pan is dry, loosen with a little processing water.",
        "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches.",
        "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
      ],
      "finishInstructions": [
        "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
        "With two burners, cook this rice while making the topping; on one burner finish the topping first and allow extra time. Rinse 320g rice and cook with 600ml recipe water in a covered saucepan according to the packet ratio. Bring to a boil, then cook on low for 12–18 minutes until tender. Add a little boiling processing water if hard in the centre, then rest off the heat for 5 minutes.",
        "Stir 40ml lemon juice through the hot chickpea topping just before serving. Fluff the rice and divide the topping over it."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "lemon-chickpea-rice"
      ],
      "baseAmounts": {
        "chickpea": 240,
        "zucchini": 300,
        "carrot": 150,
        "onion": 100,
        "oil": 20,
        "salt": 3,
        "pepper": 1
      },
      "rawAmounts": [
        {
          "ingredientId": "chickpea",
          "quantity": 480,
          "unit": "g"
        },
        {
          "ingredientId": "zucchini",
          "quantity": 600,
          "unit": "g"
        },
        {
          "ingredientId": "carrot",
          "quantity": 300,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 40,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"chickpea\",\"quantity\":480,\"unit\":\"g\"},{\"ingredientId\":\"zucchini\",\"quantity\":600,\"unit\":\"g\"},{\"ingredientId\":\"carrot\",\"quantity\":300,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":40,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":6,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":2,\"unit\":\"g\"}]",
      "selected": false,
      "prepared": false,
      "preparedAt": null,
      "storage": null,
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 0,
          "recipeId": "lemon-chickpea-rice",
          "date": "2026-10-26"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-broccoli-rice",
      "title": "Broccoli and bean rice",
      "ingredientIds": [
        "rice",
        "water",
        "broccoli",
        "black-bean",
        "oil",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 24,
      "prepMinutes": 35,
      "finishMinutes": 10,
      "prepInstructions": [
        "Rinse 320g rice and put in a fitted-lid pot with 700ml recipe water, checking the packet ratio first. Bring to a boil, reduce to low, cover and simmer for 12–15 minutes until most liquid is absorbed but the centre of a grain is still slightly firm.",
        "Cut 600g broccoli into 2cm florets and peel thick stems before slicing them 5mm thick. Scatter over the rice, cover and steam for 5–7 minutes until a knife enters the stems easily. If rice is hard and dry, add a splash of boiling processing water before covering again.",
        "Fold in 480g black beans, 30ml olive oil, 6g salt and 2g black pepper. Cover over low heat for 3–5 minutes until the beans steam throughout. Rest off the heat for 5 minutes.",
        "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches.",
        "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits. For this planner, refrigerate cooked rice for at most 24 hours or freeze promptly on the preparation day after rapid cooling in shallow containers. This 24-hour rice limit is a conservative product choice, not a USDA-specific rice rule. Reheat the cooked portion evenly to 74°C with a thermometer."
      ],
      "finishInstructions": [
        "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
        "Stir through 40ml lemon juice and fluff gently without crushing the broccoli. Divide evenly into bowls."
      ],
      "qualityNotes": "Frozen broccoli will be softer. Cool in shallow portions and freeze promptly for later dinners; the 24-hour rice limit is a conservative planner policy.",
      "recipeIds": [
        "broccoli-rice"
      ],
      "baseAmounts": {
        "rice": 160,
        "broccoli": 300,
        "black-bean": 240,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 350
      },
      "rawAmounts": [
        {
          "ingredientId": "rice",
          "quantity": 320,
          "unit": "g"
        },
        {
          "ingredientId": "broccoli",
          "quantity": 600,
          "unit": "g"
        },
        {
          "ingredientId": "black-bean",
          "quantity": 480,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 30,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        },
        {
          "ingredientId": "water",
          "quantity": 700,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"rice\",\"quantity\":320,\"unit\":\"g\"},{\"ingredientId\":\"broccoli\",\"quantity\":600,\"unit\":\"g\"},{\"ingredientId\":\"black-bean\",\"quantity\":480,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":30,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":6,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":2,\"unit\":\"g\"},{\"ingredientId\":\"water\",\"quantity\":700,\"unit\":\"ml\"}]",
      "selected": false,
      "prepared": false,
      "preparedAt": null,
      "storage": null,
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 1,
          "recipeId": "broccoli-rice",
          "date": "2026-10-27"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-mushroom-pasta",
      "title": "Browned mushroom and pea sauce",
      "ingredientIds": [
        "mushroom",
        "onion",
        "oil",
        "pea",
        "water",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 20,
      "finishMinutes": 15,
      "prepInstructions": [
        "Wipe 500g mushrooms clean and slice 5mm thick; cut 200g onions into 5mm dice. Heat 30ml olive oil in a broad pot over medium-high heat. Cook onion for 3 minutes, then add mushrooms in one layer and leave for 2 minutes before stirring. Continue for 6–8 minutes until their liquid evaporates and edges brown; use two batches if they pool liquid.",
        "Add 300g peas, 200ml recipe water, 6g salt and 2g black pepper. Simmer over medium heat for 5 minutes until peas are tender and the pan holds a little glossy liquid. Scrape browned bits into the sauce; add a splash of processing water if dry.",
        "The displayed quantities already match your selected servings. For 1 or 2 servings, use a smaller pan and check early; keep the stated cut sizes. For 4 servings use a broad pan or uncrowded trays; for 8 split every ingredient evenly into two 4-serving batches (more if the pan or pot capacity requires it). Keep pans below 80% full and vegetables in one layer when browning. Repeat the cooking and doneness checks for each batch; elapsed time increases for sequential batches.",
        "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
      ],
      "finishInstructions": [
        "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
        "Transfer the sauce to a bowl for one-pot cooking. Boil about 2L processing water per two servings in the pot and add 320g pasta. Cook for the packet time, about 8–12 minutes, until firm but no longer hard; drain and retain a little cooking water.",
        "Return the sauce and pasta to the pot. Toss over low heat for 1–2 minutes until hot; add a spoonful of retained water if it sticks together."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "mushroom-pasta"
      ],
      "baseAmounts": {
        "mushroom": 250,
        "pea": 150,
        "onion": 100,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 100
      },
      "rawAmounts": [
        {
          "ingredientId": "mushroom",
          "quantity": 500,
          "unit": "g"
        },
        {
          "ingredientId": "pea",
          "quantity": 300,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 30,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        },
        {
          "ingredientId": "water",
          "quantity": 200,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"mushroom\",\"quantity\":500,\"unit\":\"g\"},{\"ingredientId\":\"pea\",\"quantity\":300,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":30,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":6,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":2,\"unit\":\"g\"},{\"ingredientId\":\"water\",\"quantity\":200,\"unit\":\"ml\"}]",
      "selected": false,
      "prepared": false,
      "preparedAt": null,
      "storage": null,
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 2,
          "recipeId": "mushroom-pasta",
          "date": "2026-10-28"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-tomato-chickpea-pot",
      "title": "Tomato chickpea potato pot",
      "ingredientIds": [
        "onion",
        "potato",
        "oil",
        "cumin",
        "canned-tomato",
        "water",
        "salt",
        "pepper",
        "chickpea"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 48,
      "finishMinutes": 12,
      "prepInstructions": [
        "Cut 200g onions into 5mm dice and 600g potatoes into 1cm cubes. Heat 30ml olive oil in a pot over medium heat and soften the onion for 5 minutes. Stir in 4g ground cumin for 30 seconds until fragrant.",
        "Add potatoes, 800g canned tomatoes, 400ml recipe water, 6g salt and 2g black pepper. Bring to a simmer, partly cover and cook over low heat for 20–30 minutes until a fork passes easily through a potato cube. Tomatoes can slow softening; if cubes are firm, add a little hot processing water and continue cooking instead of adding the beans early.",
        "Add 480g chickpeas and simmer uncovered for 5–7 minutes until steaming throughout and the sauce clings to the potatoes. Stir gently to avoid breaking the chickpeas.",
        "The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time.",
        "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
      ],
      "finishInstructions": [
        "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
        "Rest for 2 minutes and divide into bowls. If preparing a late-week portion, chill in shallow containers and freeze promptly on the preparation day."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "tomato-chickpea-pot"
      ],
      "baseAmounts": {
        "chickpea": 240,
        "canned-tomato": 400,
        "potato": 300,
        "onion": 100,
        "cumin": 2,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 200
      },
      "rawAmounts": [
        {
          "ingredientId": "chickpea",
          "quantity": 480,
          "unit": "g"
        },
        {
          "ingredientId": "canned-tomato",
          "quantity": 800,
          "unit": "g"
        },
        {
          "ingredientId": "potato",
          "quantity": 600,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "cumin",
          "quantity": 4,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 30,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        },
        {
          "ingredientId": "water",
          "quantity": 400,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"chickpea\",\"quantity\":480,\"unit\":\"g\"},{\"ingredientId\":\"canned-tomato\",\"quantity\":800,\"unit\":\"g\"},{\"ingredientId\":\"potato\",\"quantity\":600,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"cumin\",\"quantity\":4,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":30,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":6,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":2,\"unit\":\"g\"},{\"ingredientId\":\"water\",\"quantity\":400,\"unit\":\"ml\"}]",
      "selected": true,
      "prepared": false,
      "preparedAt": "2026-10-25T19:58:00",
      "storage": "frozen",
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 3,
          "recipeId": "tomato-chickpea-pot",
          "date": "2026-10-29"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {
        "0": 500
      },
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ],
      "finishTaskId": "freeze-3",
      "useBy": null,
      "openedAt": null
    },
    {
      "id": "prep-lentil-cabbage-soup",
      "title": "Lentil cabbage soup",
      "ingredientIds": [
        "lentil",
        "carrot",
        "potato",
        "onion",
        "cabbage",
        "oil",
        "water",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 48,
      "finishMinutes": 12,
      "prepInstructions": [
        "Sort and rinse 320g red lentils. Cut 400g carrots and 400g potatoes into 1cm cubes, 200g onions into 5mm dice and 600g cabbage into 5mm ribbons. Heat 30ml olive oil in a large pot over medium heat and soften onion and carrot for 5 minutes.",
        "Add lentils, potatoes and 1800ml recipe water. Bring to a boil, partly cover and simmer over low heat for 20–30 minutes, stirring occasionally, until lentils break down and potatoes are fork-tender. If the base catches, lower the heat and add a little hot processing water.",
        "Add cabbage, 6g salt and 2g black pepper; simmer for 5–8 minutes until the thickest cabbage ribs are tender. If it is too thick to ladle, add and record extra processing water.",
        "The displayed quantities already match your selected servings. For 1 serving use a small covered pot and check liquid early; for 2 use the stated method. For 4 or 8 use the planned pot-capacity batches and divide every ingredient proportionally. Keep each pot below 80% full. Maintain a gentle simmer and judge each batch by texture, not by multiplying the cooking time.",
        "Serve promptly. Cool any extra cooked food in shallow containers and refrigerate within two hours, or one hour above 32°C. Keep the fridge at 4°C or below. Reheat cooked leftovers evenly to 74°C, checking several places with a food thermometer. Keep raw garnishes and cold yogurt or tahini sauces separate and use them cold within their label limits."
      ],
      "finishInstructions": [
        "Use the labelled component for this dinner. If frozen promptly, thaw in the fridge the previous evening; if still frozen, heat gently from frozen, stirring where possible. Reheat cooked food evenly to 74°C with a thermometer before the fresh finishing steps. Add a splash of processing water if it catches, recording any extra water.",
        "Rest for 2 minutes and serve in warmed bowls. Freeze late-week prep portions promptly in shallow containers on preparation day."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "lentil-cabbage-soup"
      ],
      "baseAmounts": {
        "lentil": 160,
        "cabbage": 300,
        "carrot": 200,
        "onion": 100,
        "potato": 200,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 900
      },
      "rawAmounts": [
        {
          "ingredientId": "lentil",
          "quantity": 320,
          "unit": "g"
        },
        {
          "ingredientId": "cabbage",
          "quantity": 600,
          "unit": "g"
        },
        {
          "ingredientId": "carrot",
          "quantity": 400,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "potato",
          "quantity": 400,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 30,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        },
        {
          "ingredientId": "water",
          "quantity": 1800,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"lentil\",\"quantity\":320,\"unit\":\"g\"},{\"ingredientId\":\"cabbage\",\"quantity\":600,\"unit\":\"g\"},{\"ingredientId\":\"carrot\",\"quantity\":400,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"potato\",\"quantity\":400,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":30,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":6,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":2,\"unit\":\"g\"},{\"ingredientId\":\"water\",\"quantity\":1800,\"unit\":\"ml\"}]",
      "selected": true,
      "prepared": false,
      "preparedAt": "2026-10-25T21:39:00",
      "storage": "frozen",
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 4,
          "recipeId": "lentil-cabbage-soup",
          "date": "2026-10-30"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ],
      "finishTaskId": "freeze-4",
      "useBy": null,
      "openedAt": null
    }
  ],
  "portionLabels": [
    {
      "id": "prep-tomato-chickpea-pot-1",
      "componentId": "prep-tomato-chickpea-pot",
      "title": "Tomato chickpea potato pot",
      "portion": "Y/1",
      "portionNumber": 1,
      "servings": 4,
      "preparedAt": "2026-10-25T19:58:00",
      "storage": "frozen",
      "originalStorage": "frozen",
      "freezeAt": "2026-10-25T19:58:00",
      "plannedThawAt": "2026-10-28T20:00:00",
      "thawAt": "2026-10-28T20:00:00",
      "thawed": false,
      "useBy": "2026-10-29T20:00:00",
      "dinnerDate": "2026-10-29",
      "recipeId": "tomato-chickpea-pot",
      "status": "planned",
      "instructions": "Freeze promptly at −18°C; thaw in the refrigerator. Reheat cooked food to 74°C, checked with a thermometer."
    },
    {
      "id": "prep-lentil-cabbage-soup-1",
      "componentId": "prep-lentil-cabbage-soup",
      "title": "Lentil cabbage soup",
      "portion": "Y/1",
      "portionNumber": 1,
      "servings": 4,
      "preparedAt": "2026-10-25T21:39:00",
      "storage": "frozen",
      "originalStorage": "frozen",
      "freezeAt": "2026-10-25T21:39:00",
      "plannedThawAt": "2026-10-29T20:00:00",
      "thawAt": "2026-10-29T20:00:00",
      "thawed": false,
      "useBy": "2026-10-30T20:00:00",
      "dinnerDate": "2026-10-30",
      "recipeId": "lentil-cabbage-soup",
      "status": "planned",
      "instructions": "Freeze promptly at −18°C; thaw in the refrigerator. Reheat cooked food to 74°C, checked with a thermometer."
    }
  ],
  "leftovers": {
    "pantry": [
      {
        "lotId": "purchase-rice",
        "source": "planned-purchase",
        "ingredientId": "rice",
        "name": "Rice",
        "quantity": 360,
        "unit": "g",
        "state": "dry",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-carrot",
        "source": "planned-purchase",
        "ingredientId": "carrot",
        "name": "Carrots",
        "quantity": 300,
        "unit": "g",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-onion",
        "source": "planned-purchase",
        "ingredientId": "onion",
        "name": "Onions",
        "quantity": 200,
        "unit": "g",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-oil",
        "source": "planned-purchase",
        "ingredientId": "oil",
        "name": "Olive oil",
        "quantity": 340,
        "unit": "ml",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-lemon",
        "source": "planned-purchase",
        "ingredientId": "lemon",
        "name": "Lemon juice",
        "quantity": 170,
        "unit": "ml",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-salt",
        "source": "planned-purchase",
        "ingredientId": "salt",
        "name": "Salt",
        "quantity": 220,
        "unit": "g",
        "state": "dry",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-pepper",
        "source": "planned-purchase",
        "ingredientId": "pepper",
        "name": "Black pepper",
        "quantity": 40,
        "unit": "g",
        "state": "dry",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-broccoli",
        "source": "planned-purchase",
        "ingredientId": "broccoli",
        "name": "Broccoli",
        "quantity": 200,
        "unit": "g",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-pasta",
        "source": "planned-purchase",
        "ingredientId": "pasta",
        "name": "Pasta",
        "quantity": 180,
        "unit": "g",
        "state": "dry",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-pea",
        "source": "planned-purchase",
        "ingredientId": "pea",
        "name": "Peas",
        "quantity": 200,
        "unit": "g",
        "state": "frozen",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-potato",
        "source": "planned-purchase",
        "ingredientId": "potato",
        "name": "Potatoes",
        "quantity": 500,
        "unit": "g",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-cumin",
        "source": "planned-purchase",
        "ingredientId": "cumin",
        "name": "Ground cumin",
        "quantity": 36,
        "unit": "g",
        "state": "dry",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-lentil",
        "source": "planned-purchase",
        "ingredientId": "lentil",
        "name": "Red lentils",
        "quantity": 180,
        "unit": "g",
        "state": "dry",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      },
      {
        "lotId": "purchase-cabbage",
        "source": "planned-purchase",
        "ingredientId": "cabbage",
        "name": "Cabbage",
        "quantity": 200,
        "unit": "g",
        "state": "raw",
        "openedAt": null,
        "useBy": null,
        "status": "projected",
        "instructions": "Package surplus if you buy the listed amount. Record the actual package use-by and opening date; keep it separate from existing lots."
      }
    ],
    "prepared": []
  },
  "component": null,
  "diff": [],
  "knownLimitations": [
    "Original recipes have not undergone real cooking trials. Package sizes are examples; confirm actual labels.",
    "Serving equivalents are cooking quantities, not individualized nutritional needs.",
    "Times are planning estimates. A saved record cannot verify actual cooling, temperatures or food handling."
  ],
  "validation": {
    "checks": [
      "quantities",
      "units",
      "exclusions",
      "equipment",
      "storage",
      "complete-recipes",
      "component-ledger"
    ],
    "validatedAt": "2026-10-25T06:05:15.618Z"
  }
}
