Meal Timing for Athletes: Why Context Beats Macros
There is no such thing as a universally healthy food; there is only food that fits the specific physiological slot of your training day.
There is no such thing as a universally healthy food; there is only food that fits the specific physiological slot of your training day.
A generic tracker treats food as a list of macros. It does not know when in the day the food is landing, and it does not know whether the food fits that moment. The result is meal plans built from macro totals that read fine on paper and land wrong on the plate. Salmon at 7 am. Rice at 10 pm. Chicken 30 minutes before a session. All arithmetically valid, all timing-blind.
KEXBI's food database carries a small but load-bearing block on every food called mealSlotFit. It is a 0 to 1 score for each of 11 named meal windows. The scores are derived, not user-remembered, and they let the Meal Architect route foods to the right time of day without asking the athlete to know the physiology behind it. This is the fourth article in the fuel-database series.
A day of eating for an athlete does not have three windows. It has closer to eleven. Some are anchor meals (breakfast, lunch, dinner, snack). Some are training-window slots that appear only on session days (pre-workout at T minus 120, T minus 60, T minus 30, intra-workout, post-workout immediate, post-workout meal). Some are peripheral slots that carry outsized weight for recovery (pre-bed).
Each slot has its own physiological brief. Pre-workout at T minus 30 is a fast-clear window: fat is off, fibre is off, complex protein is off, only liquid or fast carbs land. Pre-bed is a hormone-support window: casein-adjacent slow protein is on, high-GI carbs are off. Post-workout immediate is an insulin-sensitive window: fast carbs and fast protein land, fat is off. Reading a food as "healthy" collapses these into one bucket. Reading a food as "0.97 lunch, 0.0 post-immediate, 0.33 pre-bed" respects the slots.
Each per-slot score is derived from a small number of inputs that live on the food document itself. Five of them do most of the work.
Fast under 60 min, moderate 60 to 120, slow over 120. Anchors moderate; peri-workout wants fast; pre-bed wants slow.
Low, medium, high. Pre-workout medium; post-workout immediate high; pre-bed low.
Grams per 100 g. T minus 30 caps fat at 8 g. Anchor slots tolerate fat freely.
Grams per 100 g. T minus 60 caps fibre at 5 g. Higher fibre is fine at anchors.
Whey, casein-dominant, casein-moderate, lean, fatty, plant, none. Whey for post-immediate; casein-adjacent for pre-bed; lean for anchors.
The scoring function reads these five values off the food and generates a per-slot number by applying the slot's brief. A slot that wants fast digestion, low fibre, and low fat (T minus 30 pre-workout) reads chicken breast and returns 0.10. The same slot reads dextrose and returns 0.90. The same food (chicken breast) at a slot that wants moderate digestion, lean protein, and cultural fit (lunch) reads 0.97. Nothing about the food changed; the slot changed.
The clearest way to see the routing map is to lay one food across all 11 slots. Chicken breast is a useful case study because it is a classic anchor protein that is also just as clear about which slots it does not fit.
| Slot | Score | Reading |
|---|---|---|
| Lunch | 0.97 | Anchor fit. Moderate digestion clears by mid-afternoon. |
| Dinner | 0.97 | Anchor fit. Cultural default, lean protein. |
| Post-workout meal | 0.73 | Good fit. Lean protein for the rebuild window at 60 min plus. |
| Pre-bed | 0.33 | Marginal. Moderate digestion misses the pre-bed casein preference. |
| Pre-workout T-120 | 0.30 | Marginal. Slot usually calls for slower carbs and higher volume. |
| Breakfast | 0.27 | Low. Cooking effort and cultural convention penalise. |
| Snack | 0.27 | Low. Requires cooking; not a typical snack. |
| Pre-workout T-60 | 0.20 | Low. Digestion too slow for the tighter window. |
| Pre-workout T-30 | 0.10 | Off limits. Solid protein too close to session sits heavy. |
| Post-workout immediate | 0.00 | Off limits. MPS window calls for whey speed. |
| Intra-workout | 0.00 | Off limits. Solid protein during work degrades performance. |
The pre-bed slot has a specific physiological brief. The athlete is heading into a sleep window where hormone release peaks in the first three hours [1]. The feeding aim in that window is to hold amino acid availability across the sleep without spiking insulin. That combination lands on casein-adjacent slow protein: cottage cheese, Greek yoghurt, milk, whey-casein blends. The T-half of about 65 to 80 minutes on those proteins matches the sleep window.
Chicken breast is a lean, moderate-speed protein. Its T-half is closer to 90 minutes, but its amino-acid release curve is not the slow drip the pre-bed slot needs. The score reads 0.33: not banned, not preferred. The Meal Architect does not offer chicken breast for the 10 pm slot unless nothing better is on the pantry. The alternative shows up higher in the ranking, and the athlete does not need to know why.
The post-workout immediate window rewards speed. Insulin sensitivity is elevated, muscle glycogen is depleted, and the MPS window opens for a brief peak [2]. The routing target is a fast carb (dextrose, banana, white rice, sports gel) paired with a fast protein (whey isolate). Solid moderate-speed protein arrives too slow to catch the peak. It works fine at 60 to 90 minutes post-training, in the post-workout meal slot; it does not work at the 15-minute mark.
Chicken breast reads 0.00 for the post-workout immediate slot. The score is not being harsh; it is being honest. Whey isolate reads 0.95 for the same slot. The engine picks whey when it can, chicken when the athlete's plan or pantry does not carry whey, and the post-workout meal at 90 minutes when the immediate window has already closed.
Each per-slot score sits inside a rubric that a sports dietitian would recognise on instinct. The rubric was built by a cross-model consensus process (three LLMs scoring the same slot on the same food, with variance measured), then reviewed by a registered dietitian, then anchored against sports-nutrition consensus statements [3,4]. The pipeline is not one AI giving an opinion. It is an ensemble with variance flagged and a human backstop.
The result is a set of scores that behaves like a trained dietitian would. It respects the physiology of each slot. It handles edge cases (fasted training, keto-adapted athletes, plant-only diets) through modifier layers that adjust the base scores by context. It is auditable: the reason a specific food scored 0.27 at breakfast is traceable to the rubric line that produced it, not buried in a model weight nobody can inspect.
A meal plan built without slot-fit scoring is a meal plan built on macro totals alone. The totals can be right and the day can still land wrong. Chicken breast three times on a training day looks fine on paper and misses the post-workout window, misses the pre-bed window, and offers no fast carb around the session. That is not a failure of the athlete's choice. It is a failure of the tool that gave them the choice.
KEXBI's food database carries the routing map on the food, not in the app's marketing copy. Every food, 11 slot scores, derived from digestion speed, GI, fat, fibre, and protein type, anchored in consensus and RD review. The Meal Architect uses the map. The athlete sees the meal. The maths lands in the background.
The 11-slot taxonomy is KEXBI's implementation choice. The per-slot rubric is anchored in Kerksick 2017 and Thomas 2016 for the training-window slots, in Van Cauter 2004 and Res 2012 for the pre-bed window. Cross-model scoring uses a three-LLM panel (Claude, Gemini, ChatGPT); inter-rater variance thresholds trigger RD review. The example chicken breast scores are the live entries in the verifiedPantryItems dataset; scores may drift as more RD-reviewed sources land.