{
  "schemaVersion": 1,
  "engineVersion": 3,
  "version": 1,
  "weekId": "white-beans-beyond-soup",
  "title": "White beans beyond soup",
  "goal": "Use white beans as a warm spread, a cold salad, a pasta partner, a soup thickener and a skillet addition. Keep bread dry until dinner and cook Friday’s potatoes fresh.",
  "servings": 2,
  "firstDate": "2026-10-26",
  "prepStartHour": 19,
  "prepStartMinute": 0,
  "input": {
    "servings": 2,
    "mealStartDate": "2026-10-26",
    "potLitres": 4,
    "availableEquipment": [
      "stove",
      "oven"
    ],
    "packages": {
      "white-bean": 230
    },
    "excludeTags": [],
    "prepSelections": [
      "prep-white-bean-tomato-toast",
      "prep-roast-pepper-bean-soup"
    ],
    "preparedBatches": {},
    "thawedPortions": {},
    "pantryItems": []
  },
  "dinners": [
    {
      "dayIndex": 0,
      "date": "2026-10-26",
      "recipe": {
        "id": "white-bean-tomato-toast",
        "slug": "white-bean-tomato-toast",
        "title": "Creamy white bean and tomato toast",
        "version": 2,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "white-bean",
            "quantity": 300,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "bread",
            "quantity": 200,
            "unit": "g",
            "state": "cooked"
          },
          {
            "ingredientId": "fresh-tomato",
            "quantity": 250,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "garlic",
            "quantity": 8,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "lemon",
            "quantity": 20,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 15,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 3,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 1,
            "unit": "g",
            "state": "dry"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 18,
        "elapsedMinutes": 20,
        "potLitres": 2,
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-13",
          "licenseStatus": "Original project content; MIT"
        },
        "familyId": "filled-wraps",
        "summary": "Garlic white beans become a warm coarse spread, with diced fresh tomato added to crisp toast.",
        "batchServings": 4,
        "steps": [
          {
            "id": "white-bean-tomato-toast-1",
            "instructions": "Mince 8g garlic. Heat 15ml olive oil in a saucepan over medium-low heat and stir garlic for 30 seconds until fragrant without browning. Add 300g white beans, 3g salt and 1g black pepper with a splash of processing water.",
            "ingredientRefs": [
              "garlic",
              "oil",
              "white-bean",
              "salt",
              "pepper"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "fragrant without browning"
          },
          {
            "id": "white-bean-tomato-toast-2",
            "instructions": "Cook for 5–7 minutes, stirring until steaming, then mash about two-thirds with a fork. The spread should hold a soft mound. If thin, simmer uncovered briefly; if stiff, loosen with a small splash of processing water.",
            "ingredientRefs": [],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "white-bean-tomato-toast-1"
            ],
            "doneCondition": "steaming, then mash about two-thirds with a fork"
          },
          {
            "id": "white-bean-tomato-toast-3",
            "instructions": "Cut 250g fresh tomatoes into 1cm dice and drain loose juice. Stir 20ml lemon juice into the hot bean spread.",
            "ingredientRefs": [
              "fresh-tomato",
              "lemon"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "white-bean-tomato-toast-2"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "white-bean-tomato-toast-4",
            "instructions": "Toast 200g plain bread in a dry skillet over medium heat for 1–2 minutes per side until crisp. Spread the warm beans over the toast and add the raw tomato. Serve immediately so the base does not become soggy.",
            "ingredientRefs": [
              "bread"
            ],
            "durationRange": [
              1,
              2
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "white-bean-tomato-toast-3"
            ],
            "doneCondition": "crisp"
          },
          {
            "id": "white-bean-tomato-toast-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": [
              "white-bean-tomato-toast-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 72,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "makeAhead": {
          "id": "prep-white-bean-tomato-toast",
          "title": "Garlic white bean spread",
          "ingredientIds": [
            "garlic",
            "oil",
            "white-bean",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 12,
          "finishMinutes": 10,
          "prepInstructions": [
            "Mince {qty:garlic}. Heat {qty:oil} in a saucepan over medium-low heat and stir garlic for 30 seconds until fragrant without browning. Add {qty:white-bean}, {qty:salt} and {qty:pepper} with a splash of processing water.",
            "Cook for 5–7 minutes, stirring until steaming, then mash about two-thirds with a fork. The spread should hold a soft mound. If thin, simmer uncovered briefly; if stiff, loosen with a small 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.",
            "Cut {qty:fresh-tomato} into 1cm dice and drain loose juice. Stir {qty:lemon} into the hot bean spread.",
            "Toast {qty:bread} in a dry skillet over medium heat for 1–2 minutes per side until crisp. Spread the warm beans over the toast and add the raw tomato. Serve immediately so the base does not become soggy."
          ],
          "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": 10,
        "servings": 2
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 4L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 10
    },
    {
      "dayIndex": 1,
      "date": "2026-10-27",
      "recipe": {
        "id": "tomato-bread-bean-salad",
        "slug": "tomato-bread-bean-salad",
        "title": "Tomato, bread and bean salad",
        "version": 2,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "bread",
            "quantity": 180,
            "unit": "g",
            "state": "cooked"
          },
          {
            "ingredientId": "fresh-tomato",
            "quantity": 350,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "cucumber",
            "quantity": 150,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "white-bean",
            "quantity": 240,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "onion",
            "quantity": 40,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "lemon",
            "quantity": 20,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 15,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 3,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 1,
            "unit": "g",
            "state": "dry"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 20,
        "elapsedMinutes": 25,
        "potLitres": 2,
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-13",
          "licenseStatus": "Original project content; MIT"
        },
        "familyId": "cold-assembly",
        "summary": "Toasted bread absorbs just enough tomato dressing while white beans make the salad substantial.",
        "makeAheadNote": "Assemble this salad at dinner so the bread stays lightly crisp. Keep drained beans, whole vegetables and bread separate until then; check opened-package limits.",
        "batchServings": 4,
        "steps": [
          {
            "id": "tomato-bread-bean-salad-1",
            "instructions": "Tear 180g plain bread into 2cm pieces. Dry-toast in a broad skillet over medium-low heat for 5–7 minutes, turning often, until the edges are crisp. Spread on a plate to cool; lower the heat if small pieces brown early.",
            "ingredientRefs": [
              "bread"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "the edges are crisp"
          },
          {
            "id": "tomato-bread-bean-salad-2",
            "instructions": "Cut 350g fresh tomatoes into 2cm chunks, 150g cucumber into 1cm cubes and 40g onions into fine 3mm dice. Put in a bowl with 3g salt; let stand for 5 minutes so a little tomato juice collects.",
            "ingredientRefs": [
              "fresh-tomato",
              "cucumber",
              "onion",
              "salt"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-bread-bean-salad-1"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "tomato-bread-bean-salad-3",
            "instructions": "Drain 240g white beans. Whisk 20ml lemon juice, 15ml olive oil and 1g black pepper into the tomato juices and fold the beans into the vegetables.",
            "ingredientRefs": [
              "white-bean",
              "lemon",
              "oil",
              "pepper"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-bread-bean-salad-2"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "tomato-bread-bean-salad-4",
            "instructions": "Add the cooled bread and toss gently. Rest for 3–5 minutes until the outside absorbs dressing but the centre still has bite. If very juicy, lift the vegetables into a second bowl before adding bread; serve promptly and keep leftovers chilled.",
            "ingredientRefs": [],
            "durationRange": [
              3,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-bread-bean-salad-3"
            ],
            "doneCondition": "the outside absorbs dressing but the centre still has bite"
          },
          {
            "id": "tomato-bread-bean-salad-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 cold promptly. Keep dressed salads and cut produce covered at 4°C or below and refrigerate within two hours, or one hour above 32°C. Follow the shortest ingredient use-by or opened-package limit; these cold components need no reheating.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "tomato-bread-bean-salad-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 48,
          "reheatC": null,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "makeAhead": null,
        "servings": 2
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 4L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 25
    },
    {
      "dayIndex": 2,
      "date": "2026-10-28",
      "recipe": {
        "id": "zucchini-ribbon-pasta",
        "slug": "zucchini-ribbon-pasta",
        "title": "Zucchini ribbon and lemon bean pasta",
        "version": 2,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "pasta",
            "quantity": 160,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "zucchini",
            "quantity": 350,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "white-bean",
            "quantity": 240,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "garlic",
            "quantity": 8,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "lemon",
            "quantity": 25,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 15,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 3,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 1,
            "unit": "g",
            "state": "dry"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 22,
        "elapsedMinutes": 25,
        "potLitres": 4,
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-13",
          "licenseStatus": "Original project content; MIT"
        },
        "familyId": "saute-toss",
        "summary": "Wide zucchini ribbons cook briefly around white beans and pasta, with lemon added off the heat.",
        "processingWaterMl": 2000,
        "makeAheadNote": "Cook fresh so the thin zucchini ribbons retain their shape. Keep the beans and whole zucchini separate under their package storage instructions until dinner.",
        "batchServings": 4,
        "steps": [
          {
            "id": "zucchini-ribbon-pasta-1",
            "instructions": "Use a vegetable peeler to shave 350g zucchini lengthways into broad thin ribbons; cut the firm centre into 3mm strips. Mince 8g garlic. Boil about 2L processing water per two servings in a large pot.",
            "ingredientRefs": [
              "zucchini",
              "garlic"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "zucchini-ribbon-pasta-2",
            "instructions": "Cook 160g pasta for the packet time, about 8–12 minutes, until firm but no longer hard in the centre. Reserve a cup of cooking water, then drain and use the emptied pot for the sauce if cooking with one pot.",
            "ingredientRefs": [
              "pasta"
            ],
            "durationRange": [
              8,
              12
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "zucchini-ribbon-pasta-1"
            ],
            "doneCondition": "firm but no longer hard in the centre"
          },
          {
            "id": "zucchini-ribbon-pasta-3",
            "instructions": "Heat 15ml olive oil over medium-low heat. Stir garlic for 30 seconds without browning, then add 240g white beans, 3g salt and 1g black pepper with a spoonful of retained pasta water. Heat for 3–4 minutes until beans steam; add zucchini and toss for 2 minutes until ribbons bend but stay intact.",
            "ingredientRefs": [
              "oil",
              "white-bean",
              "salt",
              "pepper"
            ],
            "durationRange": [
              3,
              4
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "zucchini-ribbon-pasta-2"
            ],
            "doneCondition": "beans steam; add zucchini and toss for 2 minutes until ribbons bend but stay intact"
          },
          {
            "id": "zucchini-ribbon-pasta-4",
            "instructions": "Add pasta and 25ml lemon juice off the heat. Toss gently with retained water a spoonful at a time until glossy. If ribbons shed excess liquid, return to medium heat briefly; avoid prolonged simmering that turns them mushy.",
            "ingredientRefs": [
              "lemon"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "zucchini-ribbon-pasta-3"
            ],
            "doneCondition": "glossy"
          },
          {
            "id": "zucchini-ribbon-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": [
              "zucchini-ribbon-pasta-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 72,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "makeAhead": null,
        "servings": 2
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 4L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 25
    },
    {
      "dayIndex": 3,
      "date": "2026-10-29",
      "recipe": {
        "id": "roast-pepper-bean-soup",
        "slug": "roast-pepper-bean-soup",
        "title": "Roast pepper and white bean soup",
        "version": 2,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "bell-pepper",
            "quantity": 400,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "onion",
            "quantity": 150,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "white-bean",
            "quantity": 300,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "canned-tomato",
            "quantity": 200,
            "unit": "g",
            "state": "canned"
          },
          {
            "ingredientId": "garlic",
            "quantity": 10,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "paprika",
            "quantity": 2,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 500,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "bread",
            "quantity": 160,
            "unit": "g",
            "state": "cooked"
          },
          {
            "ingredientId": "oil",
            "quantity": 15,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 3,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 1,
            "unit": "g",
            "state": "dry"
          }
        ],
        "equipment": [
          "stove",
          "oven"
        ],
        "activeMinutes": 22,
        "elapsedMinutes": 55,
        "potLitres": 4,
        "provenance": {
          "type": "AI-assisted original",
          "accessedAt": "2026-10-13",
          "licenseStatus": "Original project content; MIT"
        },
        "familyId": "tray-roast",
        "summary": "Roasted pepper and onion give a smoky edge to a chunky, hand-mashed white bean soup.",
        "batchServings": 4,
        "steps": [
          {
            "id": "roast-pepper-bean-soup-1",
            "instructions": "Heat the oven to 220°C. Halve 400g bell pepper, removing stems and seeds; cut 150g onions into 2cm wedges. Toss with 15ml olive oil and place peppers skin-side up with onion beside them. Roast for 25–30 minutes until pepper skins blister in patches and flesh softens. Turn onion halfway; move browned pieces aside.",
            "ingredientRefs": [
              "bell-pepper",
              "onion",
              "oil"
            ],
            "durationRange": [
              25,
              30
            ],
            "equipmentIds": [
              "stove",
              "oven"
            ],
            "dependsOn": [],
            "doneCondition": "pepper skins blister in patches and flesh softens"
          },
          {
            "id": "roast-pepper-bean-soup-2",
            "instructions": "Let peppers cool just enough to handle, about 5 minutes. Pull off loose blackened skin where it lifts easily, then chop flesh and onion into 1cm pieces. Put in a pot with 300g white beans, 200g canned tomatoes, minced 10g garlic, 2g ground paprika, 500ml recipe water, 3g salt and 1g black pepper.",
            "ingredientRefs": [
              "white-bean",
              "canned-tomato",
              "garlic",
              "paprika",
              "water",
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              7
            ],
            "equipmentIds": [
              "stove",
              "oven"
            ],
            "dependsOn": [
              "roast-pepper-bean-soup-1"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "roast-pepper-bean-soup-3",
            "instructions": "Simmer over medium-low heat for 10 minutes until garlic is tender and beans steam throughout. Mash half the beans against the pot to thicken the soup. If too watery, simmer uncovered; if thick, add a little processing water. No blender is needed.",
            "ingredientRefs": [],
            "durationRange": [
              10,
              12
            ],
            "equipmentIds": [
              "stove",
              "oven"
            ],
            "dependsOn": [
              "roast-pepper-bean-soup-2"
            ],
            "doneCondition": "garlic is tender and beans steam throughout"
          },
          {
            "id": "roast-pepper-bean-soup-4",
            "instructions": "Toast 160g plain bread in a dry skillet or the warm oven until lightly crisp. Ladle soup into bowls and serve toast separately.",
            "ingredientRefs": [
              "bread"
            ],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove",
              "oven"
            ],
            "dependsOn": [
              "roast-pepper-bean-soup-3"
            ],
            "doneCondition": "lightly crisp"
          },
          {
            "id": "roast-pepper-bean-soup-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",
              "oven"
            ],
            "dependsOn": [
              "roast-pepper-bean-soup-4"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          }
        ],
        "storagePolicy": {
          "maxRefrigeratedHours": 72,
          "reheatC": 74,
          "sourceRefs": [
            "usda",
            "storage"
          ]
        },
        "makeAhead": {
          "id": "prep-roast-pepper-bean-soup",
          "title": "Roast pepper bean soup",
          "ingredientIds": [
            "bell-pepper",
            "onion",
            "oil",
            "white-bean",
            "canned-tomato",
            "garlic",
            "paprika",
            "water",
            "salt",
            "pepper"
          ],
          "freezable": true,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 50,
          "finishMinutes": 12,
          "prepInstructions": [
            "Heat the oven to 220°C. Halve {qty:bell-pepper}, removing stems and seeds; cut {qty:onion} into 2cm wedges. Toss with {qty:oil} and place peppers skin-side up with onion beside them. Roast for 25–30 minutes until pepper skins blister in patches and flesh softens. Turn onion halfway; move browned pieces aside.",
            "Let peppers cool just enough to handle, about 5 minutes. Pull off loose blackened skin where it lifts easily, then chop flesh and onion into 1cm pieces. Put in a pot with {qty:white-bean}, {qty:canned-tomato}, minced {qty:garlic}, {qty:paprika}, {qty:water}, {qty:salt} and {qty:pepper}.",
            "Simmer over medium-low heat for 10 minutes until garlic is tender and beans steam throughout. Mash half the beans against the pot to thicken the soup. If too watery, simmer uncovered; if thick, add a little processing water. No blender is needed.",
            "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.",
            "Toast {qty:bread} in a dry skillet or the warm oven until lightly crisp. Ladle soup into bowls and serve toast separately."
          ],
          "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": 2
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 4L 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": "cabbage-potatoes",
        "slug": "cabbage-potatoes",
        "title": "Cabbage and white bean potatoes",
        "summary": "Small potato cubes steam beneath a lid before cabbage and white beans join the pan.",
        "version": 1,
        "locale": "en",
        "baseServings": 2,
        "ingredients": [
          {
            "ingredientId": "potato",
            "quantity": 400,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "cabbage",
            "quantity": 300,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "white-bean",
            "quantity": 240,
            "unit": "g",
            "state": "drained"
          },
          {
            "ingredientId": "onion",
            "quantity": 100,
            "unit": "g",
            "state": "raw"
          },
          {
            "ingredientId": "oil",
            "quantity": 15,
            "unit": "ml",
            "state": "raw"
          },
          {
            "ingredientId": "salt",
            "quantity": 3,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "pepper",
            "quantity": 1,
            "unit": "g",
            "state": "dry"
          },
          {
            "ingredientId": "water",
            "quantity": 150,
            "unit": "ml",
            "state": "raw"
          }
        ],
        "equipment": [
          "stove"
        ],
        "activeMinutes": 15,
        "elapsedMinutes": 40,
        "steps": [
          {
            "id": "cabbage-potatoes-1",
            "instructions": "Cut 400g potatoes into 1cm cubes, 300g cabbage into 5mm ribbons and 100g onions into 5mm dice. Heat 15ml olive oil in a deep skillet over medium heat. Soften onion for 3 minutes without browning.",
            "ingredientRefs": [
              "potato",
              "cabbage",
              "onion",
              "oil"
            ],
            "durationRange": [
              3,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "cabbage-potatoes-2",
            "instructions": "Add potatoes and 150ml recipe water. Bring to a simmer, cover and reduce to medium-low for 12–15 minutes, stirring halfway, until a fork enters the cubes with slight resistance. If liquid disappears while potatoes are firm, add a small splash of processing water and cover again.",
            "ingredientRefs": [
              "water"
            ],
            "durationRange": [
              12,
              15
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "cabbage-potatoes-1"
            ],
            "doneCondition": "a fork enters the cubes with slight resistance"
          },
          {
            "id": "cabbage-potatoes-3",
            "instructions": "Add cabbage, 240g white beans, 3g salt and 1g black pepper. Cover for 5–8 minutes until potato centres are fully tender and beans steam throughout. Uncover and cook for 2 minutes if liquid pools in the bottom.",
            "ingredientRefs": [
              "white-bean",
              "salt",
              "pepper"
            ],
            "durationRange": [
              5,
              8
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "cabbage-potatoes-2"
            ],
            "doneCondition": "potato centres are fully tender and beans steam throughout"
          },
          {
            "id": "cabbage-potatoes-4",
            "instructions": "Fold gently so the beans stay mostly whole. Spoon onto plates, scraping up the soft onion and pan juices.",
            "ingredientRefs": [],
            "durationRange": [
              1,
              5
            ],
            "equipmentIds": [
              "stove"
            ],
            "dependsOn": [
              "cabbage-potatoes-3"
            ],
            "doneCondition": "Complete the stated preparation, texture and serving checks before continuing."
          },
          {
            "id": "cabbage-potatoes-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": [
              "cabbage-potatoes-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": "saute-toss",
        "batchServings": 4,
        "makeAhead": {
          "id": "prep-cabbage-potatoes",
          "title": "Cabbage, potato and bean skillet",
          "ingredientIds": [
            "potato",
            "cabbage",
            "onion",
            "oil",
            "water",
            "white-bean",
            "salt",
            "pepper"
          ],
          "freezable": false,
          "storageKind": "cooked",
          "serveCold": false,
          "maxRefrigeratedHours": 72,
          "prepMinutes": 38,
          "finishMinutes": 10,
          "prepInstructions": [
            "Cut {qty:potato} into 1cm cubes, {qty:cabbage} into 5mm ribbons and {qty:onion} into 5mm dice. Heat {qty:oil} in a deep skillet over medium heat. Soften onion for 3 minutes without browning.",
            "Add potatoes and {qty:water}. Bring to a simmer, cover and reduce to medium-low for 12–15 minutes, stirring halfway, until a fork enters the cubes with slight resistance. If liquid disappears while potatoes are firm, add a small splash of processing water and cover again.",
            "Add cabbage, {qty:white-bean}, {qty:salt} and {qty:pepper}. Cover for 5–8 minutes until potato centres are fully tender and beans steam throughout. Uncover and cook for 2 minutes if liquid pools in the bottom.",
            "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.",
            "Fold gently so the beans stay mostly whole. Spoon onto plates, scraping up the soft onion and pan juices."
          ],
          "qualityNotes": "Refrigerate for up to 72 hours; potato texture is better without freezing. Reheat gently with a splash of water."
        },
        "freezable": false,
        "finishAfterPrep": 10,
        "servings": 2
      },
      "batches": 1,
      "capacityNote": "Use 1 batch(es) with your 4L pot. Keep each load below 80% of capacity; roast no more than four servings per tray.",
      "finishMinutes": 40
    }
  ],
  "shopping": [
    {
      "ingredientId": "white-bean",
      "name": "White beans",
      "required": 1320,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 1320,
      "purchased": 1380,
      "remaining": 60,
      "unit": "g",
      "state": "drained",
      "packageQty": 230,
      "packCount": 6,
      "notPurchased": false,
      "packAssumption": "Example package: 230g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "bread",
      "name": "Plain bread",
      "required": 540,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 540,
      "purchased": 800,
      "remaining": 260,
      "unit": "g",
      "state": "cooked",
      "packageQty": 400,
      "packCount": 2,
      "notPurchased": false,
      "packAssumption": "Reference loaf: wheat, water, yeast, salt. Actual products may differ.",
      "retained": 0
    },
    {
      "ingredientId": "fresh-tomato",
      "name": "Fresh tomatoes",
      "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": "garlic",
      "name": "Garlic",
      "required": 26,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 26,
      "purchased": 26,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 0,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Buy exact edible weight; record any trimming losses.",
      "retained": 0
    },
    {
      "ingredientId": "lemon",
      "name": "Lemon juice",
      "required": 65,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 65,
      "purchased": 250,
      "remaining": 185,
      "unit": "ml",
      "state": "raw",
      "packageQty": 250,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 250ml usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "oil",
      "name": "Olive oil",
      "required": 75,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 75,
      "purchased": 500,
      "remaining": 425,
      "unit": "ml",
      "state": "raw",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500ml usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "salt",
      "name": "Salt",
      "required": 15,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 15,
      "purchased": 250,
      "remaining": 235,
      "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": 5,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 5,
      "purchased": 50,
      "remaining": 45,
      "unit": "g",
      "state": "dry",
      "packageQty": 50,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 50g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "cucumber",
      "name": "Cucumber",
      "required": 150,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 150,
      "purchased": 150,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 0,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Buy exact edible weight; record any trimming losses.",
      "retained": 0
    },
    {
      "ingredientId": "onion",
      "name": "Onions",
      "required": 290,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 290,
      "purchased": 500,
      "remaining": 210,
      "unit": "g",
      "state": "raw",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "pasta",
      "name": "Pasta",
      "required": 160,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 160,
      "purchased": 500,
      "remaining": 340,
      "unit": "g",
      "state": "dry",
      "packageQty": 500,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 500g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "zucchini",
      "name": "Zucchini",
      "required": 350,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 350,
      "purchased": 350,
      "remaining": 0,
      "unit": "g",
      "state": "raw",
      "packageQty": 0,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Buy exact edible weight; record any trimming losses.",
      "retained": 0
    },
    {
      "ingredientId": "bell-pepper",
      "name": "Bell pepper",
      "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": "canned-tomato",
      "name": "Canned tomatoes",
      "required": 200,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 200,
      "purchased": 400,
      "remaining": 200,
      "unit": "g",
      "state": "canned",
      "packageQty": 400,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 400g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "paprika",
      "name": "Ground paprika",
      "required": 2,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 2,
      "purchased": 40,
      "remaining": 38,
      "unit": "g",
      "state": "dry",
      "packageQty": 40,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 40g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "water",
      "name": "Recipe water",
      "required": 650,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 650,
      "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": "potato",
      "name": "Potatoes",
      "required": 400,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 400,
      "purchased": 1000,
      "remaining": 600,
      "unit": "g",
      "state": "raw",
      "packageQty": 1000,
      "packCount": 1,
      "notPurchased": false,
      "packAssumption": "Example package: 1000g usable quantity. Confirm label/edible weight.",
      "retained": 0
    },
    {
      "ingredientId": "cabbage",
      "name": "Cabbage",
      "required": 300,
      "prepared": 0,
      "pantryUsed": 0,
      "initial": 0,
      "net": 300,
      "purchased": 800,
      "remaining": 500,
      "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": "make-prep-white-bean-tomato-toast",
      "late": false,
      "minimumFinish": 0,
      "minimumStart": 0,
      "duration": 12,
      "resources": [
        "person",
        "stove"
      ],
      "dependsOn": [
        "check"
      ],
      "label": "Prepare Garlic white bean spread in 1 load(s). Mince 8g garlic. Heat 15ml olive oil in a saucepan over medium-low heat and stir garlic for 30 seconds until fragrant without browning. Add 300g white beans, 3g salt and 1g black pepper with a splash of processing water. Cook for 5–7 minutes, stirring until steaming, then mash about two-thirds with a fork. The spread should hold a soft mound. If thin, simmer uncovered briefly; if stiff, loosen with a small 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.",
      "start": 5,
      "end": 17
    },
    {
      "id": "portion-prep-white-bean-tomato-toast",
      "late": false,
      "minimumFinish": 0,
      "duration": 5,
      "resources": [
        "person"
      ],
      "dependsOn": [
        "make-prep-white-bean-tomato-toast"
      ],
      "label": "Divide Garlic white bean spread into 1 labelled Y/1 shares. Chill promptly in shallow containers; refrigerate or freeze within 2 hours, or 1 hour above 32°C.",
      "start": 17,
      "end": 22
    },
    {
      "id": "simmer-3",
      "late": false,
      "minimumFinish": 0,
      "minimumStart": 0,
      "duration": 50,
      "resources": [
        "person",
        "stove",
        "oven"
      ],
      "dependsOn": [
        "check"
      ],
      "label": "Prepare Roast pepper bean soup in 1 load(s). Heat the oven to 220°C. Halve 400g bell pepper, removing stems and seeds; cut 150g onions into 2cm wedges. Toss with 15ml olive oil and place peppers skin-side up with onion beside them. Roast for 25–30 minutes until pepper skins blister in patches and flesh softens. Turn onion halfway; move browned pieces aside. Let peppers cool just enough to handle, about 5 minutes. Pull off loose blackened skin where it lifts easily, then chop flesh and onion into 1cm pieces. Put in a pot with 300g white beans, 200g canned tomatoes, minced 10g garlic, 2g ground paprika, 500ml recipe water, 3g salt and 1g black pepper. Simmer over medium-low heat for 10 minutes until garlic is tender and beans steam throughout. Mash half the beans against the pot to thicken the soup. If too watery, simmer uncovered; if thick, add a little processing water. No blender is needed. 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.",
      "start": 22,
      "end": 72
    },
    {
      "id": "freeze-3",
      "late": false,
      "minimumFinish": 0,
      "duration": 5,
      "resources": [
        "person"
      ],
      "dependsOn": [
        "simmer-3"
      ],
      "label": "Divide Roast pepper bean 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": 72,
      "end": 77
    }
  ],
  "transitions": [
    {
      "from": "white-bean-tomato-toast",
      "componentId": "prep-white-bean-tomato-toast",
      "to": "white-bean-tomato-toast",
      "dayIndex": 0,
      "preparedAt": "2026-10-25T19:22:00",
      "useAt": "2026-10-26T18:00:00",
      "storageType": "refrigerated",
      "hours": 22.633333333333333,
      "allowed": true,
      "action": "Refrigerate promptly at 4°C or below. Reheat cooked food to 74°C, checked with a thermometer.",
      "freezeAt": null,
      "thawAt": null,
      "thawed": false,
      "plannedThawAt": null,
      "useBy": "2026-10-28T19:22:00",
      "portion": "Y/1"
    },
    {
      "from": "roast-pepper-bean-soup",
      "componentId": "prep-roast-pepper-bean-soup",
      "to": "roast-pepper-bean-soup",
      "dayIndex": 3,
      "preparedAt": "2026-10-25T20:17:00",
      "useAt": "2026-10-29T18:00:00",
      "storageType": "frozen",
      "hours": 93.71666666666667,
      "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-25T20:17:00",
      "thawAt": "2026-10-28T20:00:00",
      "thawed": false,
      "plannedThawAt": "2026-10-28T20:00:00",
      "useBy": "2026-10-29T20:00:00",
      "portion": "Y/1"
    }
  ],
  "prepComponents": [
    {
      "id": "prep-white-bean-tomato-toast",
      "title": "Garlic white bean spread",
      "ingredientIds": [
        "garlic",
        "oil",
        "white-bean",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 12,
      "finishMinutes": 10,
      "prepInstructions": [
        "Mince 8g garlic. Heat 15ml olive oil in a saucepan over medium-low heat and stir garlic for 30 seconds until fragrant without browning. Add 300g white beans, 3g salt and 1g black pepper with a splash of processing water.",
        "Cook for 5–7 minutes, stirring until steaming, then mash about two-thirds with a fork. The spread should hold a soft mound. If thin, simmer uncovered briefly; if stiff, loosen with a small 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.",
        "Cut 250g fresh tomatoes into 1cm dice and drain loose juice. Stir 20ml lemon juice into the hot bean spread.",
        "Toast 200g plain bread in a dry skillet over medium heat for 1–2 minutes per side until crisp. Spread the warm beans over the toast and add the raw tomato. Serve immediately so the base does not become soggy."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "white-bean-tomato-toast"
      ],
      "baseAmounts": {
        "white-bean": 300,
        "garlic": 8,
        "oil": 15,
        "salt": 3,
        "pepper": 1
      },
      "rawAmounts": [
        {
          "ingredientId": "white-bean",
          "quantity": 300,
          "unit": "g"
        },
        {
          "ingredientId": "garlic",
          "quantity": 8,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 15,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 3,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 1,
          "unit": "g"
        }
      ],
      "portions": 1,
      "servings": 2,
      "signature": "[{\"ingredientId\":\"white-bean\",\"quantity\":300,\"unit\":\"g\"},{\"ingredientId\":\"garlic\",\"quantity\":8,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":15,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":3,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":1,\"unit\":\"g\"}]",
      "selected": true,
      "prepared": false,
      "preparedAt": "2026-10-25T19:22:00",
      "storage": "refrigerated",
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 0,
          "recipeId": "white-bean-tomato-toast",
          "date": "2026-10-26"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ],
      "finishTaskId": "portion-prep-white-bean-tomato-toast",
      "useBy": "2026-10-28T19:22:00",
      "openedAt": null
    },
    {
      "id": "prep-roast-pepper-bean-soup",
      "title": "Roast pepper bean soup",
      "ingredientIds": [
        "bell-pepper",
        "onion",
        "oil",
        "white-bean",
        "canned-tomato",
        "garlic",
        "paprika",
        "water",
        "salt",
        "pepper"
      ],
      "freezable": true,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 50,
      "finishMinutes": 12,
      "prepInstructions": [
        "Heat the oven to 220°C. Halve 400g bell pepper, removing stems and seeds; cut 150g onions into 2cm wedges. Toss with 15ml olive oil and place peppers skin-side up with onion beside them. Roast for 25–30 minutes until pepper skins blister in patches and flesh softens. Turn onion halfway; move browned pieces aside.",
        "Let peppers cool just enough to handle, about 5 minutes. Pull off loose blackened skin where it lifts easily, then chop flesh and onion into 1cm pieces. Put in a pot with 300g white beans, 200g canned tomatoes, minced 10g garlic, 2g ground paprika, 500ml recipe water, 3g salt and 1g black pepper.",
        "Simmer over medium-low heat for 10 minutes until garlic is tender and beans steam throughout. Mash half the beans against the pot to thicken the soup. If too watery, simmer uncovered; if thick, add a little processing water. No blender is needed.",
        "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.",
        "Toast 160g plain bread in a dry skillet or the warm oven until lightly crisp. Ladle soup into bowls and serve toast separately."
      ],
      "qualityNotes": "Freeze promptly on preparation day for dinners outside the refrigerated window. Texture may soften after freezing; keep the fresh finish separate.",
      "recipeIds": [
        "roast-pepper-bean-soup"
      ],
      "baseAmounts": {
        "bell-pepper": 400,
        "onion": 150,
        "white-bean": 300,
        "canned-tomato": 200,
        "garlic": 10,
        "paprika": 2,
        "water": 500,
        "oil": 15,
        "salt": 3,
        "pepper": 1
      },
      "rawAmounts": [
        {
          "ingredientId": "bell-pepper",
          "quantity": 400,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 150,
          "unit": "g"
        },
        {
          "ingredientId": "white-bean",
          "quantity": 300,
          "unit": "g"
        },
        {
          "ingredientId": "canned-tomato",
          "quantity": 200,
          "unit": "g"
        },
        {
          "ingredientId": "garlic",
          "quantity": 10,
          "unit": "g"
        },
        {
          "ingredientId": "paprika",
          "quantity": 2,
          "unit": "g"
        },
        {
          "ingredientId": "water",
          "quantity": 500,
          "unit": "ml"
        },
        {
          "ingredientId": "oil",
          "quantity": 15,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 3,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 1,
          "unit": "g"
        }
      ],
      "portions": 1,
      "servings": 2,
      "signature": "[{\"ingredientId\":\"bell-pepper\",\"quantity\":400,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":150,\"unit\":\"g\"},{\"ingredientId\":\"white-bean\",\"quantity\":300,\"unit\":\"g\"},{\"ingredientId\":\"canned-tomato\",\"quantity\":200,\"unit\":\"g\"},{\"ingredientId\":\"garlic\",\"quantity\":10,\"unit\":\"g\"},{\"ingredientId\":\"paprika\",\"quantity\":2,\"unit\":\"g\"},{\"ingredientId\":\"water\",\"quantity\":500,\"unit\":\"ml\"},{\"ingredientId\":\"oil\",\"quantity\":15,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":3,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":1,\"unit\":\"g\"}]",
      "selected": true,
      "prepared": false,
      "preparedAt": "2026-10-25T20:17:00",
      "storage": "frozen",
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 3,
          "recipeId": "roast-pepper-bean-soup",
          "date": "2026-10-29"
        }
      ],
      "eligibleStorage": [
        "refrigerated",
        "frozen"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ],
      "finishTaskId": "freeze-3",
      "useBy": null,
      "openedAt": null
    },
    {
      "id": "prep-cabbage-potatoes",
      "title": "Cabbage, potato and bean skillet",
      "ingredientIds": [
        "potato",
        "cabbage",
        "onion",
        "oil",
        "water",
        "white-bean",
        "salt",
        "pepper"
      ],
      "freezable": false,
      "storageKind": "cooked",
      "serveCold": false,
      "maxRefrigeratedHours": 72,
      "prepMinutes": 38,
      "finishMinutes": 10,
      "prepInstructions": [
        "Cut 400g potatoes into 1cm cubes, 300g cabbage into 5mm ribbons and 100g onions into 5mm dice. Heat 15ml olive oil in a deep skillet over medium heat. Soften onion for 3 minutes without browning.",
        "Add potatoes and 150ml recipe water. Bring to a simmer, cover and reduce to medium-low for 12–15 minutes, stirring halfway, until a fork enters the cubes with slight resistance. If liquid disappears while potatoes are firm, add a small splash of processing water and cover again.",
        "Add cabbage, 240g white beans, 3g salt and 1g black pepper. Cover for 5–8 minutes until potato centres are fully tender and beans steam throughout. Uncover and cook for 2 minutes if liquid pools in the bottom.",
        "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.",
        "Fold gently so the beans stay mostly whole. Spoon onto plates, scraping up the soft onion and pan juices."
      ],
      "qualityNotes": "Refrigerate for up to 72 hours; potato texture is better without freezing. Reheat gently with a splash of water.",
      "recipeIds": [
        "cabbage-potatoes"
      ],
      "baseAmounts": {
        "potato": 400,
        "cabbage": 300,
        "white-bean": 240,
        "onion": 100,
        "oil": 15,
        "salt": 3,
        "pepper": 1,
        "water": 150
      },
      "rawAmounts": [
        {
          "ingredientId": "potato",
          "quantity": 400,
          "unit": "g"
        },
        {
          "ingredientId": "cabbage",
          "quantity": 300,
          "unit": "g"
        },
        {
          "ingredientId": "white-bean",
          "quantity": 240,
          "unit": "g"
        },
        {
          "ingredientId": "onion",
          "quantity": 100,
          "unit": "g"
        },
        {
          "ingredientId": "oil",
          "quantity": 15,
          "unit": "ml"
        },
        {
          "ingredientId": "salt",
          "quantity": 3,
          "unit": "g"
        },
        {
          "ingredientId": "pepper",
          "quantity": 1,
          "unit": "g"
        },
        {
          "ingredientId": "water",
          "quantity": 150,
          "unit": "ml"
        }
      ],
      "portions": 1,
      "servings": 2,
      "signature": "[{\"ingredientId\":\"potato\",\"quantity\":400,\"unit\":\"g\"},{\"ingredientId\":\"cabbage\",\"quantity\":300,\"unit\":\"g\"},{\"ingredientId\":\"white-bean\",\"quantity\":240,\"unit\":\"g\"},{\"ingredientId\":\"onion\",\"quantity\":100,\"unit\":\"g\"},{\"ingredientId\":\"oil\",\"quantity\":15,\"unit\":\"ml\"},{\"ingredientId\":\"salt\",\"quantity\":3,\"unit\":\"g\"},{\"ingredientId\":\"pepper\",\"quantity\":1,\"unit\":\"g\"},{\"ingredientId\":\"water\",\"quantity\":150,\"unit\":\"ml\"}]",
      "selected": false,
      "prepared": false,
      "preparedAt": null,
      "storage": null,
      "retainedPortions": 0,
      "scheduledPortions": 1,
      "uses": [
        {
          "dayIndex": 4,
          "recipeId": "cabbage-potatoes",
          "date": "2026-10-30"
        }
      ],
      "eligibleStorage": [
        "refrigerated"
      ],
      "pantryAllocations": {},
      "sourceRefs": [
        "fda-storage",
        "fda-chill",
        "foodsafety-cold-storage"
      ]
    }
  ],
  "portionLabels": [
    {
      "id": "prep-white-bean-tomato-toast-1",
      "componentId": "prep-white-bean-tomato-toast",
      "title": "Garlic white bean spread",
      "portion": "Y/1",
      "portionNumber": 1,
      "servings": 2,
      "preparedAt": "2026-10-25T19:22:00",
      "storage": "refrigerated",
      "originalStorage": "refrigerated",
      "freezeAt": null,
      "plannedThawAt": null,
      "thawAt": null,
      "thawed": false,
      "useBy": "2026-10-28T19:22:00",
      "dinnerDate": "2026-10-26",
      "recipeId": "white-bean-tomato-toast",
      "status": "planned",
      "instructions": "Refrigerate promptly at 4°C or below. Reheat cooked food to 74°C, checked with a thermometer."
    },
    {
      "id": "prep-roast-pepper-bean-soup-1",
      "componentId": "prep-roast-pepper-bean-soup",
      "title": "Roast pepper bean soup",
      "portion": "Y/1",
      "portionNumber": 1,
      "servings": 2,
      "preparedAt": "2026-10-25T20:17:00",
      "storage": "frozen",
      "originalStorage": "frozen",
      "freezeAt": "2026-10-25T20:17: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": "roast-pepper-bean-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-white-bean",
        "source": "planned-purchase",
        "ingredientId": "white-bean",
        "name": "White beans",
        "quantity": 60,
        "unit": "g",
        "state": "drained",
        "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-bread",
        "source": "planned-purchase",
        "ingredientId": "bread",
        "name": "Plain bread",
        "quantity": 260,
        "unit": "g",
        "state": "cooked",
        "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": 185,
        "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-oil",
        "source": "planned-purchase",
        "ingredientId": "oil",
        "name": "Olive oil",
        "quantity": 425,
        "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": 235,
        "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": 45,
        "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-onion",
        "source": "planned-purchase",
        "ingredientId": "onion",
        "name": "Onions",
        "quantity": 210,
        "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": 340,
        "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-canned-tomato",
        "source": "planned-purchase",
        "ingredientId": "canned-tomato",
        "name": "Canned tomatoes",
        "quantity": 200,
        "unit": "g",
        "state": "canned",
        "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-paprika",
        "source": "planned-purchase",
        "ingredientId": "paprika",
        "name": "Ground paprika",
        "quantity": 38,
        "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-potato",
        "source": "planned-purchase",
        "ingredientId": "potato",
        "name": "Potatoes",
        "quantity": 600,
        "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-cabbage",
        "source": "planned-purchase",
        "ingredientId": "cabbage",
        "name": "Cabbage",
        "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."
      }
    ],
    "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:00.838Z"
  }
}
