Skip to content

8. Personalise

This step is a filter, not a design step. It may change which food fills a portion. It may not change how many portions are in a slot.

Where a constraint cannot be satisfied without changing a count, go back to step 5, rebuild the daily distribution with that group excluded, and re-run 6 and 7. That loop is expected, not a failure.

Apply the constraints in the order below — hard exclusions first, because everything after them is choosing among what remains.

1. Hard exclusions

Nothing on this list ever appears in the menu, including inside a combination suggestion or a "for example".

Source Read as
health_allergies Absolute. Free text — read it whole, including severity
nut_intolerances Absolute
nut_pattern Vegetarian, vegan, pescatarian, halal, kosher — structural
nut_dislikes Absolute. A disliked food in a menu is a menu the client ignores

Read the exceptions in free text

nut_dislikes = "I don't eat fish except tuna, and no coriander" is three facts, and a menu built on "dislikes fish" loses the tuna. Free text is read whole, and the exception is the part that matters.

Where free text is genuinely ambiguous — a severe allergy without a food named clearly enough to exclude — that is a conditional stop, not a guess.

Patterns, concretely

nut_pattern Effect
Vegetarian No meat, fish. Eggs and dairy stay. Legumes carry most protein
Vegan Also no eggs, dairy. Dairy portions → 0, rebuild from step 5. Flag B12 — see Supplements
Pescatarian Fish and seafood stay; no meat or poultry
Halal / Kosher No pork; kosher additionally separates meat and dairy — no option may combine them in one meal
Low carb / keto Conflicts with the 45% target. Build to the target and say why in Notes for you; do not silently build a low-carb plan
Paleo No grains, legumes or dairy. Very tight against this portion system — rebuild from step 5 and expect the fibre target to be hard
Intermittent fasting A scheduling constraint — see step 6
Mediterranean Already what this menu builds. No change

2. Medical constraints carried from step 2

Finding Effect on the options
Type 2 / pre-diabetes Starch always paired with fat, fibre or protein — never alone. Even spread across slots. A line in the menu that their clinician reviews the carbohydrate targets
Thyroid disorder Soy to one portion a day, separated from medication. Timing note only
High blood pressure No added salt in options; olives and tinned fish noted as salty. No other change
Perimenopause / post-menopause The protocol — cruciferous daily, phytoestrogen daily, protein per meal
Digestive symptoms Fibre ramp, cooked over raw cruciferous, sugar alcohols out
Iron supplement Separate from coffee and dairy portions
Vitamin D supplement Placed with the slot that has a fat portion

3. Practical constraints

These decide whether the menu is followed at all, and they are underweighted far more often than the clinical ones.

Cooking

nut_cooking_confidence (1–5), nut_who_cooks, nut_who_shops.

1–2 No option may need more than one cooking step. Tinned legumes, pre-cooked grains, raw vegetables, grilled or baked protein. No recipe requiring timing
3 One option per slot may be more involved; the rest are simple
4–5 No constraint
nut_who_cooks = someone else Options must be describable to that person. Simpler, more conventional dishes
nut_who_cooks = nobody, eat out See below

Meals out

nut_meals_out. Above about 5 a week, the menu that only works at home fails most of the time.

Give each main slot one option that is orderable — grilled protein with salad and a starch side is available almost everywhere. Say in Notes for you that restaurant food is cooked in oils this menu avoids and that this is a reason to cook at home where possible, stated once and without repetition.

Budget

pref_budget. Where it is tight, lean on the cheap end of every group: legumes, eggs, seasonal vegetables, tinned fish, oats, tahini. Avoid salmon, berries out of season, pre-prepared anything. Never comment on the budget itself.

Household

nut_household_eating. Where the household eats very differently, prefer options that are a variation on a shared meal — the same dish with a different starch portion — over options requiring a separate meal to be cooked.

Travel and shift work

life_travel weekly or constant: at least one option per slot needing no kitchen. life_shift_work: the anchored schedule from step 6.

Accessibility and eating limitation

pref_accessibility, nut_eating_limitation + its detail. Chewing or swallowing difficulty, standing to cook, getting food to the mouth — each constrains texture or preparation directly. Read the detail field and apply what it actually says.

4. Preference

Last, and only among what has survived. nut_ffq shows what the client already eats often; where two options are otherwise equal, choose the food already in their week. nut_appetite = "Low" argues for denser options within the same counts; "Large" for higher-volume ones — more vegetables, more whole fruit.

life_energy_crash = "Yes, most days" puts the afternoon snack squarely in the slump and gives it protein and fat rather than fruit alone.

The count check

After every substitution, count the option back against its slot. This is the only invariant this step has, and the substitution most likely to break it is the one that swaps an animal protein for legumes — because legumes carry a starch portion too.

Swap: 90 g chicken (3 protein) → 1½ cups lentils (3 protein + 3 starch)
Slot was 4 starch · 3 protein → now 7 starch · 3 protein   ✗
Fix:   drop the rice from 4 starch to 1                     ✓

What this step must not do

  • Not change portion counts. Ever. Go back to step 5.
  • Not drop fruit or vegetables for a preference. A disliked vegetable is replaced by another vegetable, not removed.
  • Not argue with a stated pattern. A client who says vegan gets a vegan menu. The menu may note what it cannot cover; it does not relitigate.
  • Not add a food the client excluded, however small the quantity or however well it fits.
  • Not narrow the menu to safety. Four options that are all rice and chicken satisfy every constraint and fail the client.

Previous: 7. Plate & combinations · Next: 9. Assemble & check