{
  "schemaVersion": 1,
  "engineVersion": 3,
  "version": 1,
  "weekId": "one-pot-evenings",
  "title": "One-pot vegetarian evenings",
  "goal": "Reuse one large pot sequentially; cook pasta, drain, then make its sauce.",
  "servings": 4,
  "firstDate": "2026-10-26",
  "prepStartHour": 19,
  "prepStartMinute": 0,
  "input": {
    "servings": 4,
    "mealStartDate": "2026-10-26",
    "potLitres": 2,
    "availableEquipment": [
      "stove",
      "oven"
    ],
    "excludeTags": [],
    "prepSelections": [],
    "preparedBatches": {},
    "thawedPortions": {},
    "pantryItems": []
  },
  "dinners": [
    {
      "dayIndex": 0,
      "date": "2026-10-26",
      "recipe": {
        "id": "chickpea-couscous-pot",
        "slug": "chickpea-couscous-pot",
        "title": "One-pot chickpea couscous",
        "summary": "Finely cut vegetables soften on the stove before couscous hydrates off the heat in the same pot.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "couscous",
            "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": 400,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 35,
        "steps": [
          {
            "id": "chickpea-couscous-pot-1",
            "instructions": "Cut 600g zucchini into 1cm cubes, 300g carrots into 5mm dice and 200g onions into 5mm dice. Heat 40ml olive oil in a broad pot over medium heat and cook the vegetables for 10–12 minutes, stirring, until carrot pieces are tender. Add a splash of processing water and cover for 2 minutes if carrot stays firm.",
            "ingredientRefs": [
              "zucchini",
              "carrot",
              "onion",
              "oil"
            ],
            "durationRange": [
              10,
              12
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "carrot pieces are tender"
          },
          {
            "id": "chickpea-couscous-pot-2",
            "instructions": "Add 480g chickpeas, 400ml recipe water, 6g salt and 2g black pepper. Bring to a simmer for 3–5 minutes until the chickpeas are steaming. Check the couscous packet liquid ratio and record any change to the measured water.",
            "ingredientRefs": [
              "chickpea",
              "water",
              "salt",
              "pepper"
            ],
            "durationRange": [
              3,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "chickpea-couscous-pot-1"
            ],
            "doneCondition": "the chickpeas are steaming"
          },
          {
            "id": "chickpea-couscous-pot-3",
            "instructions": "Stir in 320g couscous, cover and remove the pot from the heat for 5 minutes. If a grain is still dry in the centre, sprinkle over a little boiling processing water and cover for 2 minutes more.",
            "ingredientRefs": [
              "couscous"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "chickpea-couscous-pot-2"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "chickpea-couscous-pot-4",
            "instructions": "Fluff with a fork, stir in 40ml lemon juice and serve. Loosen the grains gently so the vegetables remain in pieces.",
            "ingredientRefs": [
              "lemon"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "chickpea-couscous-pot-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "chickpea-couscous-pot-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": [
              "chickpea-couscous-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"
        },
        "potLitres": 3,
        "familyId": "grain-pots",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-chickpea-couscous-pot",
          "title": "Sautéed couscous vegetables",
          "ingredientIds": [
            "zucchini",
            "carrot",
            "onion",
            "oil"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 20,
          "finishMinutes": 12,
          "prepInstructions": [
            "Cut {qty:zucchini} into 1cm cubes, {qty:carrot} into 5mm dice and {qty:onion} into 5mm dice. Heat {qty:oil} in a broad pot over medium heat and cook the vegetables for 10–12 minutes, stirring, until carrot pieces are tender. Add a splash of processing water and cover for 2 minutes if carrot stays firm.",
            "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.",
            "Add {qty:chickpea}, {qty:water}, {qty:salt} and {qty:pepper}. Bring to a simmer for 3–5 minutes until the chickpeas are steaming. Check the couscous packet liquid ratio and record any change to the measured water.",
            "Stir in {qty:couscous}, cover and remove the pot from the heat for 5 minutes. If a grain is still dry in the centre, sprinkle over a little boiling processing water and cover for 2 minutes more.",
            "Fluff with a fork, stir in {qty:lemon} and serve. Loosen the grains gently so the vegetables remain in pieces."
          ],
          "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": 12,
        "servings": 4
      },
      "batches": 3,
      "capacityNote": "Use 3 batch(es) with your 2L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 55
    },
    {
      "dayIndex": 1,
      "date": "2026-10-27",
      "recipe": {
        "id": "bean-rice-bowls",
        "slug": "bean-rice-bowls",
        "title": "Bean rice bowls",
        "summary": "A soft pepper, tomato and black bean skillet served over separately cooked rice.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "rice",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "black-bean",
            "quantity": 480,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "bell-pepper",
            "quantity": 600,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "fresh-tomato",
            "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": 600,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 35,
        "steps": [
          {
            "id": "bean-rice-bowls-1",
            "instructions": "Cut 200g onions into 5mm dice, 600g bell pepper into 1cm squares and 400g fresh tomatoes into 1cm pieces. Heat 30ml olive oil in a broad skillet over medium heat. Cook the onion for 3 minutes, then add the pepper and cook for 6–8 minutes until softened and lightly golden. Lower the heat if the edges darken before the centres soften.",
            "ingredientRefs": [
              "onion",
              "bell-pepper",
              "fresh-tomato",
              "oil"
            ],
            "durationRange": [
              6,
              8
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "softened and lightly golden"
          },
          {
            "id": "bean-rice-bowls-2",
            "instructions": "Add the diced tomato, 480g black beans, 6g salt and 2g black pepper. Simmer uncovered for 5–7 minutes until the tomato breaks down and the beans steam throughout. If the topping is watery, simmer uncovered another 2 minutes; if dry, add a splash of processing water.",
            "ingredientRefs": [
              "black-bean",
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "bean-rice-bowls-1"
            ],
            "doneCondition": "the tomato breaks down and the beans steam throughout"
          },
          {
            "id": "bean-rice-bowls-3",
            "instructions": "With two burners, cook the rice while making the skillet topping; with one burner, finish the topping first and allow extra time. Rinse 320g rice. Put it in a fitted-lid saucepan with 600ml recipe water, checking the packet ratio first. Bring to a boil, reduce to low, cover and cook for 12–18 minutes until the liquid is absorbed and a grain is tender. If still chalky, add a little boiling processing water and cover for 3 minutes more. Rest off the heat for 5 minutes.",
            "ingredientRefs": [
              "rice",
              "water"
            ],
            "durationRange": [
              12,
              18
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "the liquid is absorbed and a grain is tender"
          },
          {
            "id": "bean-rice-bowls-4",
            "instructions": "Fluff the rice and divide it into bowls. Spoon the hot bean topping over it just before serving.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "bean-rice-bowls-2",
              "bean-rice-bowls-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "bean-rice-bowls-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": [
              "bean-rice-bowls-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": 2,
        "familyId": "saute-toss",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-bean-rice-bowls",
          "title": "Pepper and black bean topping",
          "ingredientIds": [
            "onion",
            "bell-pepper",
            "fresh-tomato",
            "oil",
            "black-bean",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 18,
          "finishMinutes": 22,
          "prepInstructions": [
            "Cut {qty:onion} into 5mm dice, {qty:bell-pepper} into 1cm squares and {qty:fresh-tomato} into 1cm pieces. Heat {qty:oil} in a broad skillet over medium heat. Cook the onion for 3 minutes, then add the pepper and cook for 6–8 minutes until softened and lightly golden. Lower the heat if the edges darken before the centres soften.",
            "Add the diced tomato, {qty:black-bean}, {qty:salt} and {qty:pepper}. Simmer uncovered for 5–7 minutes until the tomato breaks down and the beans steam throughout. If the topping is watery, simmer uncovered another 2 minutes; if dry, add a splash of 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 the rice while making the skillet topping; with one burner, finish the topping first and allow extra time. Rinse {qty:rice}. Put it in a fitted-lid saucepan with {qty:water}, checking the packet ratio first. Bring to a boil, reduce to low, cover and cook for 12–18 minutes until the liquid is absorbed and a grain is tender. If still chalky, add a little boiling processing water and cover for 3 minutes more. Rest off the heat for 5 minutes.",
            "Fluff the rice and divide it into bowls. Spoon the hot bean topping over it just before serving."
          ],
          "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": 2,
      "capacityNote": "Use 2 batch(es) with your 2L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 45
    },
    {
      "dayIndex": 2,
      "date": "2026-10-28",
      "recipe": {
        "id": "spinach-bean-pasta",
        "slug": "spinach-bean-pasta",
        "title": "Spinach and white bean pasta",
        "summary": "White beans give body to a lemon pasta sauce, with spinach wilted at the last moment.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "pasta",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "white-bean",
            "quantity": 480,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "spinach",
            "quantity": 400,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "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": 200,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 45,
        "steps": [
          {
            "id": "spinach-bean-pasta-1",
            "instructions": "Cut 200g onions into 5mm dice. Heat 30ml olive oil in a saucepan over medium-low heat and soften onion for 5 minutes until translucent, stirring to keep it pale.",
            "ingredientRefs": [
              "onion",
              "oil"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "translucent, stirring to keep it pale"
          },
          {
            "id": "spinach-bean-pasta-2",
            "instructions": "Add 480g white beans, 200ml recipe water, 6g salt and 2g black pepper. Simmer for 5 minutes until the beans are steaming; crush a few against the pan to lightly thicken the liquid. If it dries out, add a little processing water.",
            "ingredientRefs": [
              "white-bean",
              "water",
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "spinach-bean-pasta-1"
            ],
            "doneCondition": "the beans are steaming; crush a few against the pan to lightly thicken the liquid"
          },
          {
            "id": "spinach-bean-pasta-3",
            "instructions": "For one-pot cooking, transfer the bean base to a bowl. Boil about 2L processing water per two servings in the emptied pot. Cook 320g pasta for the packet time, about 8–12 minutes, until firm but no longer chalky. Drain, retaining a little cooking water.",
            "ingredientRefs": [
              "pasta"
            ],
            "durationRange": [
              8,
              12
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "spinach-bean-pasta-2"
            ],
            "doneCondition": "firm but no longer chalky"
          },
          {
            "id": "spinach-bean-pasta-4",
            "instructions": "Return the bean base and pasta to the pot. Wash and roughly chop 400g spinach into 3cm strips, then fold in over medium-low heat for 2–3 minutes until wilted. Stir in 40ml lemon juice; add a spoonful of retained pasta water if the sauce is dry.",
            "ingredientRefs": [
              "spinach",
              "lemon"
            ],
            "durationRange": [
              2,
              3
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "spinach-bean-pasta-3"
            ],
            "doneCondition": "wilted"
          },
          {
            "id": "spinach-bean-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": [
              "spinach-bean-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-spinach-bean-pasta",
          "title": "White bean pasta base",
          "ingredientIds": [
            "onion",
            "oil",
            "white-bean",
            "water",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 15,
          "finishMinutes": 18,
          "prepInstructions": [
            "Cut {qty:onion} into 5mm dice. Heat {qty:oil} in a saucepan over medium-low heat and soften onion for 5 minutes until translucent, stirring to keep it pale.",
            "Add {qty:white-bean}, {qty:water}, {qty:salt} and {qty:pepper}. Simmer for 5 minutes until the beans are steaming; crush a few against the pan to lightly thicken the liquid. If it dries out, add 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.",
            "For one-pot cooking, transfer the bean base to a bowl. Boil about 2L processing water per two servings in the emptied pot. Cook {qty:pasta} for the packet time, about 8–12 minutes, until firm but no longer chalky. Drain, retaining a little cooking water.",
            "Return the bean base and pasta to the pot. Wash and roughly chop {qty:spinach} into 3cm strips, then fold in over medium-low heat for 2–3 minutes until wilted. Stir in {qty:lemon}; add a spoonful of retained pasta water if the sauce is dry."
          ],
          "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": 18,
        "servings": 4
      },
      "batches": 3,
      "capacityNote": "Use 3 batch(es) with your 2L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 65
    },
    {
      "dayIndex": 3,
      "date": "2026-10-29",
      "recipe": {
        "id": "lemon-bean-wraps",
        "slug": "lemon-bean-wraps",
        "title": "Lemon bean wraps",
        "summary": "Half-mashed white beans make a creamy lemon filling for crisp vegetable wraps.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "tortilla",
            "quantity": 8,
            "unit": "count",
            "state": "cooked"
          },
          {
            "ingredientId": "white-bean",
            "quantity": 480,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "cabbage",
            "quantity": 400,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "carrot",
            "quantity": 300,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "lemon",
            "quantity": 40,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 20,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 6,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 12,
        "elapsedMinutes": 20,
        "steps": [
          {
            "id": "lemon-bean-wraps-1",
            "instructions": "Drain 480g white beans. Mash half with 40ml lemon juice, 6g salt and 2g black pepper; leave the other half whole for texture. The mash should hold together on a spoon rather than run.",
            "ingredientRefs": [
              "white-bean",
              "lemon",
              "salt",
              "pepper"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "lemon-bean-wraps-2",
            "instructions": "Heat 20ml olive oil in a skillet over medium-low heat. Add all the mashed and whole beans and cook for 5 minutes, stirring until steaming. If too stiff to spread, stir in a little processing water; if loose, cook uncovered briefly.",
            "ingredientRefs": [
              "oil"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lemon-bean-wraps-1"
            ],
            "doneCondition": "steaming"
          },
          {
            "id": "lemon-bean-wraps-3",
            "instructions": "Wash and dry 400g cabbage, then shred into 2mm ribbons. Grate 300g carrots coarsely. Warm 8 pieces plain flour tortillas in a dry pan for 20–30 seconds on each side until supple; check the actual brand ingredients.",
            "ingredientRefs": [
              "cabbage",
              "carrot",
              "tortilla"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lemon-bean-wraps-2"
            ],
            "doneCondition": "supple; check the actual brand ingredients"
          },
          {
            "id": "lemon-bean-wraps-4",
            "instructions": "Divide the bean filling and raw vegetables evenly between the warm tortillas. Fold in the sides and roll; add the crunchy vegetables just before serving so they stay crisp.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "lemon-bean-wraps-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "lemon-bean-wraps-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": [
              "lemon-bean-wraps-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": 2,
        "familyId": "filled-wraps",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-lemon-bean-wraps",
          "title": "Lemon white bean filling",
          "ingredientIds": [
            "white-bean",
            "lemon",
            "salt",
            "pepper",
            "oil"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 10,
          "finishMinutes": 8,
          "prepInstructions": [
            "Drain {qty:white-bean}. Mash half with {qty:lemon}, {qty:salt} and {qty:pepper}; leave the other half whole for texture. The mash should hold together on a spoon rather than run.",
            "Heat {qty:oil} in a skillet over medium-low heat. Add all the mashed and whole beans and cook for 5 minutes, stirring until steaming. If too stiff to spread, stir in a little processing water; if loose, cook uncovered briefly.",
            "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.",
            "Wash and dry {qty:cabbage}, then shred into 2mm ribbons. Grate {qty:carrot} coarsely. Warm {qty:tortilla} in a dry pan for 20–30 seconds on each side until supple; check the actual brand ingredients.",
            "Divide the bean filling and raw vegetables evenly between the warm tortillas. Fold in the sides and roll; add the crunchy vegetables just before serving so they stay crisp."
          ],
          "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": 8,
        "servings": 4
      },
      "batches": 2,
      "capacityNote": "Use 2 batch(es) with your 2L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 30
    },
    {
      "dayIndex": 4,
      "date": "2026-10-30",
      "recipe": {
        "id": "carrot-lentil-pot",
        "slug": "carrot-lentil-pot",
        "title": "Carrot and lentil pot",
        "summary": "A cumin-scented carrot and red lentil pot finished with spinach for a soft, spoonable dinner.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "lentil",
            "quantity": 320,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "carrot",
            "quantity": 600,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 200,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "spinach",
            "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": 1400,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 12,
        "elapsedMinutes": 45,
        "steps": [
          {
            "id": "carrot-lentil-pot-1",
            "instructions": "Rinse 320g red lentils. Cut 600g carrots into 1cm cubes and 200g onions into 5mm dice. Warm 30ml olive oil in a pot over medium heat and soften the vegetables for 5 minutes. Stir in 4g ground cumin for 30 seconds until fragrant; lower heat if it smells toasted sharply.",
            "ingredientRefs": [
              "lentil",
              "carrot",
              "onion",
              "oil",
              "cumin"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "fragrant; lower heat if it smells toasted sharply"
          },
          {
            "id": "carrot-lentil-pot-2",
            "instructions": "Add the lentils, 1400ml recipe water, 6g salt and 2g black pepper. Bring to a boil, reduce to low and partly cover for 20–30 minutes, stirring every 5 minutes until the carrots crush under a fork and the lentils are creamy. If it catches, lower the heat and add hot processing water in small amounts; record it.",
            "ingredientRefs": [
              "water",
              "salt",
              "pepper"
            ],
            "durationRange": [
              20,
              30
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "carrot-lentil-pot-1"
            ],
            "doneCondition": "the carrots crush under a fork and the lentils are creamy"
          },
          {
            "id": "carrot-lentil-pot-3",
            "instructions": "Wash 200g spinach, remove tough stalk ends and roughly chop into 3cm strips. Stir into the hot lentil base and simmer for 2–3 minutes until wilted throughout.",
            "ingredientRefs": [
              "spinach"
            ],
            "durationRange": [
              2,
              3
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "carrot-lentil-pot-2"
            ],
            "doneCondition": "wilted throughout"
          },
          {
            "id": "carrot-lentil-pot-4",
            "instructions": "Rest off the heat for 2 minutes. Stir once and divide between bowls; loosen with a small splash of hot processing water if it thickens while standing.",
            "ingredientRefs": [],
            "durationRange": [
              2,
              4
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "carrot-lentil-pot-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "carrot-lentil-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": [
              "carrot-lentil-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-carrot-lentil-pot",
          "title": "Carrot lentil base",
          "ingredientIds": [
            "lentil",
            "carrot",
            "onion",
            "oil",
            "cumin",
            "water",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 42,
          "finishMinutes": 8,
          "prepInstructions": [
            "Rinse {qty:lentil}. Cut {qty:carrot} into 1cm cubes and {qty:onion} into 5mm dice. Warm {qty:oil} in a pot over medium heat and soften the vegetables for 5 minutes. Stir in {qty:cumin} for 30 seconds until fragrant; lower heat if it smells toasted sharply.",
            "Add the lentils, {qty:water}, {qty:salt} and {qty:pepper}. Bring to a boil, reduce to low and partly cover for 20–30 minutes, stirring every 5 minutes until the carrots crush under a fork and the lentils are creamy. If it catches, lower the heat and add hot processing water in small amounts; record it.",
            "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.",
            "Wash {qty:spinach}, remove tough stalk ends and roughly chop into 3cm strips. Stir into the hot lentil base and simmer for 2–3 minutes until wilted throughout.",
            "Rest off the heat for 2 minutes. Stir once and divide between bowls; loosen with a small splash of hot processing water if it thickens while standing."
          ],
          "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate."
        },
        "finishAfterPrep": 8,
        "servings": 4
      },
      "batches": 3,
      "capacityNote": "Use 3 batch(es) with your 2L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 65
    }
  ],
  "shopping": [
    {
      "ingredientId": "couscous",
      "name": "Couscous",
      "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": "chickpea",
      "name": "Chickpeas",
      "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": "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": 1200,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 1200,
      "purchased": 2000,
      "remaining": 800,
      "unit": "g",
      "state": "raw",
      "packageQty": 1000,
      "packCount": 2,
      "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": 150,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 150,
      "purchased": 500,
      "remaining": 350,
      "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": 120,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 120,
      "purchased": 250,
      "remaining": 130,
      "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": 2600,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 2600,
      "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": "rice",
      "name": "Rice",
      "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": "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": "bell-pepper",
      "name": "Bell pepper",
      "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": "fresh-tomato",
      "name": "Fresh tomatoes",
      "required": 400,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 400,
      "purchased": 400,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 0,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Buy exact edible weight; record any trimming losses.",
      "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": "white-bean",
      "name": "White beans",
      "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 package: 240g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "spinach",
      "name": "Spinach",
      "required": 600,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 600,
      "purchased": 600,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 200,
      "packCount": 3,
      "notPurchased": false,
      "packAssumption": "Example package: 200g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "tortilla",
      "name": "Plain flour tortillas",
      "required": 8,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 8,
      "purchased": 8,
      "remaining": 0,
      "unit": "count",
      "state": "cooked",
      "packageQty": 8,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Reference recipe: wheat, water, oil, salt. Check the actual brand for milk, soy and other ingredients.",
      "retained": 0
    },
    {
      "ingredientId": "cabbage",
      "name": "Cabbage",
      "required": 400,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 400,
      "purchased": 800,
      "remaining": 400,
      "unit": "g",
      "state": "raw",
      "packageQty": 800,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 800g 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": "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
    }
  ],
  "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
    }
  ],
  "transitions": [],
  "prepComponents": [
    {
      "id": "prep-chickpea-couscous-pot",
      "title": "Sautéed couscous vegetables",
      "ingredientIds": [
        "zucchini",
        "carrot",
        "onion",
        "oil"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 20,
      "finishMinutes": 12,
      "prepInstructions": [
        "Cut 600g zucchini into 1cm cubes, 300g carrots into 5mm dice and 200g onions into 5mm dice. Heat 40ml olive oil in a broad pot over medium heat and cook the vegetables for 10–12 minutes, stirring, until carrot pieces are tender. Add a splash of processing water and cover for 2 minutes if carrot stays firm.",
        "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.",
        "Add 480g chickpeas, 400ml recipe water, 6g salt and 2g black pepper. Bring to a simmer for 3–5 minutes until the chickpeas are steaming. Check the couscous packet liquid ratio and record any change to the measured water.",
        "Stir in 320g couscous, cover and remove the pot from the heat for 5 minutes. If a grain is still dry in the centre, sprinkle over a little boiling processing water and cover for 2 minutes more.",
        "Fluff with a fork, stir in 40ml lemon juice and serve. Loosen the grains gently so the vegetables remain in pieces."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "chickpea-couscous-pot"
      ],
      "baseAmounts": {
        "zucchini": 300,
        "carrot": 150,
        "onion": 100,
        "oil": 20
      },
      "rawAmounts": [
        {
          "ingredientId": "zucchini",
          "quantity": 600,
          "unit": "g"
        },
        {
          "ingredientId": "carrot",
          "quantity": 300,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 40,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"zucchini\",\"quantity\":600,\"unit\":\"g\"},{\"ingredientId\":\"carrot\",\"quantity\":300,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":40,\"unit\":\"ml\"}]",
      "selected": false,
      "prepared": false,
      "preparedAt": null,
      "storage": null,
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 0,
          "recipeId": "chickpea-couscous-pot",
          "date": "2026-10-26"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-bean-rice-bowls",
      "title": "Pepper and black bean topping",
      "ingredientIds": [
        "onion",
        "bell-pepper",
        "fresh-tomato",
        "oil",
        "black-bean",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 18,
      "finishMinutes": 22,
      "prepInstructions": [
        "Cut 200g onions into 5mm dice, 600g bell pepper into 1cm squares and 400g fresh tomatoes into 1cm pieces. Heat 30ml olive oil in a broad skillet over medium heat. Cook the onion for 3 minutes, then add the pepper and cook for 6–8 minutes until softened and lightly golden. Lower the heat if the edges darken before the centres soften.",
        "Add the diced tomato, 480g black beans, 6g salt and 2g black pepper. Simmer uncovered for 5–7 minutes until the tomato breaks down and the beans steam throughout. If the topping is watery, simmer uncovered another 2 minutes; if dry, add a splash of 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 the rice while making the skillet topping; with one burner, finish the topping first and allow extra time. Rinse 320g rice. Put it in a fitted-lid saucepan with 600ml recipe water, checking the packet ratio first. Bring to a boil, reduce to low, cover and cook for 12–18 minutes until the liquid is absorbed and a grain is tender. If still chalky, add a little boiling processing water and cover for 3 minutes more. Rest off the heat for 5 minutes.",
        "Fluff the rice and divide it into bowls. Spoon the hot bean topping over it just before serving."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "bean-rice-bowls"
      ],
      "baseAmounts": {
        "black-bean": 240,
        "bell-pepper": 300,
        "onion": 100,
        "fresh-tomato": 200,
        "oil": 15,
        "salt": 3,
        "pepper": 1
      },
      "rawAmounts": [
        {
          "ingredientId": "black-bean",
          "quantity": 480,
          "unit": "g"
        },
        {
          "ingredientId": "bell-pepper",
          "quantity": 600,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "fresh-tomato",
          "quantity": 400,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 30,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"black-bean\",\"quantity\":480,\"unit\":\"g\"},{\"ingredientId\":\"bell-pepper\",\"quantity\":600,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"fresh-tomato\",\"quantity\":400,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":30,\"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": 1,
          "recipeId": "bean-rice-bowls",
          "date": "2026-10-27"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-spinach-bean-pasta",
      "title": "White bean pasta base",
      "ingredientIds": [
        "onion",
        "oil",
        "white-bean",
        "water",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 15,
      "finishMinutes": 18,
      "prepInstructions": [
        "Cut 200g onions into 5mm dice. Heat 30ml olive oil in a saucepan over medium-low heat and soften onion for 5 minutes until translucent, stirring to keep it pale.",
        "Add 480g white beans, 200ml recipe water, 6g salt and 2g black pepper. Simmer for 5 minutes until the beans are steaming; crush a few against the pan to lightly thicken the liquid. If it dries out, add 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.",
        "For one-pot cooking, transfer the bean base to a bowl. Boil about 2L processing water per two servings in the emptied pot. Cook 320g pasta for the packet time, about 8–12 minutes, until firm but no longer chalky. Drain, retaining a little cooking water.",
        "Return the bean base and pasta to the pot. Wash and roughly chop 400g spinach into 3cm strips, then fold in over medium-low heat for 2–3 minutes until wilted. Stir in 40ml lemon juice; add a spoonful of retained pasta water if the sauce is dry."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "spinach-bean-pasta"
      ],
      "baseAmounts": {
        "white-bean": 240,
        "onion": 100,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 100
      },
      "rawAmounts": [
        {
          "ingredientId": "white-bean",
          "quantity": 480,
          "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\":\"white-bean\",\"quantity\":480,\"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": "spinach-bean-pasta",
          "date": "2026-10-28"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-lemon-bean-wraps",
      "title": "Lemon white bean filling",
      "ingredientIds": [
        "white-bean",
        "lemon",
        "salt",
        "pepper",
        "oil"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 10,
      "finishMinutes": 8,
      "prepInstructions": [
        "Drain 480g white beans. Mash half with 40ml lemon juice, 6g salt and 2g black pepper; leave the other half whole for texture. The mash should hold together on a spoon rather than run.",
        "Heat 20ml olive oil in a skillet over medium-low heat. Add all the mashed and whole beans and cook for 5 minutes, stirring until steaming. If too stiff to spread, stir in a little processing water; if loose, cook uncovered briefly.",
        "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.",
        "Wash and dry 400g cabbage, then shred into 2mm ribbons. Grate 300g carrots coarsely. Warm 8 pieces plain flour tortillas in a dry pan for 20–30 seconds on each side until supple; check the actual brand ingredients.",
        "Divide the bean filling and raw vegetables evenly between the warm tortillas. Fold in the sides and roll; add the crunchy vegetables just before serving so they stay crisp."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "lemon-bean-wraps"
      ],
      "baseAmounts": {
        "white-bean": 240,
        "lemon": 20,
        "oil": 10,
        "salt": 3,
        "pepper": 1
      },
      "rawAmounts": [
        {
          "ingredientId": "white-bean",
          "quantity": 480,
          "unit": "g"
        },
        {
          "ingredientId": "lemon",
          "quantity": 40,
          "unit": "ml"
        },
        {
          "ingredientId": "oil",
          "quantity": 20,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 6,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 2,
          "unit": "g"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"white-bean\",\"quantity\":480,\"unit\":\"g\"},{\"ingredientId\":\"lemon\",\"quantity\":40,\"unit\":\"ml\"},{\"ingredientId\":\"oil\",\"quantity\":20,\"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": 3,
          "recipeId": "lemon-bean-wraps",
          "date": "2026-10-29"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    },
    {
      "id": "prep-carrot-lentil-pot",
      "title": "Carrot lentil base",
      "ingredientIds": [
        "lentil",
        "carrot",
        "onion",
        "oil",
        "cumin",
        "water",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 42,
      "finishMinutes": 8,
      "prepInstructions": [
        "Rinse 320g red lentils. Cut 600g carrots into 1cm cubes and 200g onions into 5mm dice. Warm 30ml olive oil in a pot over medium heat and soften the vegetables for 5 minutes. Stir in 4g ground cumin for 30 seconds until fragrant; lower heat if it smells toasted sharply.",
        "Add the lentils, 1400ml recipe water, 6g salt and 2g black pepper. Bring to a boil, reduce to low and partly cover for 20–30 minutes, stirring every 5 minutes until the carrots crush under a fork and the lentils are creamy. If it catches, lower the heat and add hot processing water in small amounts; record it.",
        "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.",
        "Wash 200g spinach, remove tough stalk ends and roughly chop into 3cm strips. Stir into the hot lentil base and simmer for 2–3 minutes until wilted throughout.",
        "Rest off the heat for 2 minutes. Stir once and divide between bowls; loosen with a small splash of hot processing water if it thickens while standing."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "carrot-lentil-pot"
      ],
      "baseAmounts": {
        "lentil": 160,
        "carrot": 300,
        "onion": 100,
        "cumin": 2,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 700
      },
      "rawAmounts": [
        {
          "ingredientId": "lentil",
          "quantity": 320,
          "unit": "g"
        },
        {
          "ingredientId": "carrot",
          "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": 1400,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 4,
      "signature": "[{\"ingredientId\":\"lentil\",\"quantity\":320,\"unit\":\"g\"},{\"ingredientId\":\"carrot\",\"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\":1400,\"unit\":\"ml\"}]",
      "selected": false,
      "prepared": false,
      "preparedAt": null,
      "storage": null,
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 4,
          "recipeId": "carrot-lentil-pot",
          "date": "2026-10-30"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    }
  ],
  "portionLabels": [],
  "leftovers": {
    "pantry": [
      {
        "lotId": "purchase-couscous",
        "source": "planned-purchase",
        "ingredientId": "couscous",
        "name": "Couscous",
        "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-carrot",
        "source": "planned-purchase",
        "ingredientId": "carrot",
        "name": "Carrots",
        "quantity": 800,
        "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": 350,
        "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": 130,
        "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-rice",
        "source": "planned-purchase",
        "ingredientId": "rice",
        "name": "Rice",
        "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-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-cabbage",
        "source": "planned-purchase",
        "ingredientId": "cabbage",
        "name": "Cabbage",
        "quantity": 400,
        "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-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-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."
      }
    ],
    "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:05.375Z"
  }
}
