CalcHive › Nutrition › Weekly Meal Planner

Weekly Meal Planner

Last updated: October 2, 2026. Maintained by CalcHive, JAE's Holding Solutions LLC.

Add up a week of meals you already named. This is a planner, not a recipe generator.

Type each meal's calories and grams, drop it into a day, and read the daily total against a target you set. Nothing on this page invents a menu or looks up a food.

Estimate only, not medical advice. This does not diagnose or treat any condition or replace a doctor or registered dietitian. If you are pregnant, under 19, managing a medical condition or an eating disorder, or on a prescribed diet, get individual guidance.

Daily targets

Leave a target blank if you do not want a difference for that column. A link from another calculator can prefill calories and protein from the address bar (?kcal=2000&protein=120).

1 in the repeat box means a meal can show up tomorrow but not twice today. 2 means not today and not the next day. 0 turns the rule off. The calorie grid is not multiplied by the household number.

My meals

These are your rows. Calories and grams are whatever you type from a label, a recipe you already trust, or the macro calculator. Ingredient lines are optional and are only used for the grocery handoff.

Week

How this weekly meal planner works

The page is a grid and a sum. You keep a short list called My meals. Each row has a name, calories, protein grams, and optional carbohydrate grams, fat grams, and ingredient lines. The week is seven days, Monday through Sunday, and each day has four slots: breakfast, lunch, dinner, and snack. A slot is either empty or one of your rows. The script does not contain a food database, a recipe library, or a model that writes meals. If a slot is empty, that slot adds nothing.

A day's calories are the sum of the calories on the slots you filled. Protein, carbohydrate, and fat grams add the same way. The difference versus a target is that daily total minus the target you typed. A positive difference means the day is over the target. A negative difference means it is under. Zero means the sum landed on the target. If you leave a target blank, that column has no difference. Zero as a target is a real target, and the difference is the day's total minus zero. Weekly average is the sum of the seven daily totals divided by 7. Empty days count as zero. The page does not drop empty days and then divide by the number of days you happened to fill, because the label is a week, not "days you touched."

The protein share of calories is 4 times protein grams, divided by the calories for that same total, then shown as a percent. The 4 is the general factor of 4 calories per gram of protein. The same factors, 4 for carbohydrate and 9 for fat, are used only as a check, and only on a meal where you typed all three gram fields. That check is 4 times protein plus 4 times carbohydrate plus 9 times fat. It is compared with the calories you typed for that meal. The typed calories are what the daily sum uses. The check does not replace them. If you have a Nutrition Facts label, use the label's calorie number as the typed calories. Labels can use other allowed methods and they round the declared calories. This page does not re-round your typed calories to the nearest 10. The macro calculator is the page that spends a calorie budget into grams. This planner starts after you already have numbers.

Fill my week shuffles only the meals on your list. It is deterministic. The same list, the same repeat window, and the same seed produce the same grid. Re-roll adds 1 to the seed and fills again. The repeat window is the number you type. A value of 1 blocks a second use on the same day and allows the meal on the next day. A value of 2 blocks the same day and the next day. A value of 0 does not block repeats. The generator walks Monday breakfast through Sunday snack. For each slot it builds the list of meals that are not blocked, then picks one with a seeded random draw. If every meal is blocked, the slot stays empty and the warning names it. The rule is not relaxed to force a full calendar. With four meals and a window of 2, a day that already used all four meals leaves the next day empty. That is the rule working, not a broken button. Add more meals or shorten the window if you want every slot filled.

Cooking for N does not multiply the calorie grid. The grid stays the plan you entered, which is the right shape when the targets are one person's targets from the TDEE calculator or the protein intake calculator. N is applied only to ingredient lines in the grocery text. A line that starts with a number, a fraction, or a mixed number is multiplied. "1 cup oats" with N set to 4 becomes "4 cup oats". "1/2 cup milk" becomes "2 cup milk". "1 1/2 tsp salt" becomes "6 tsp salt". The unit word is left as you typed it, so the grocery list generator can parse the line. A line with no leading number, such as "salt to taste", is kept and marked with the multiplier in parentheses. Copy grocery lines, then paste into that tool. This page does not merge cups with ounces. The grocery tool's own rule is the one that refuses that merge.

Save on this device writes the meals, the seven-by-four grid, the targets, the household number, the repeat window, and the seed into this browser's local storage under the key calchive.weekly-meal-planner.v1. That copy stays on the device. It is not uploaded. Opening the page later in the same browser restores it. Clear saved plan deletes the key and clears the form. Reset clears the form on screen and leaves a saved copy in place until you clear it or you wipe site data. Another phone will not see the plan. A query string can still set targets after a restore, which is how a link such as ?kcal=2000&protein=120 can drop numbers into the target boxes without replacing your meal list.

The planner does not estimate how many calories you need. Mifflin-St Jeor, on the TDEE page, was derived on adults ages 19 to 78. This grid will add numbers you type for anyone, including a child, and it will not refuse them. It also will not tell you those numbers are appropriate. If you are under 19, pregnant, or on a prescribed diet, the red box at the top is the instruction that matters. The day names are labels. They are not a night-shift schedule, and this page does not give timing advice.

Worked examples

These examples are the arithmetic the script runs. The Monday meals are names and numbers you would type. They are not a suggested menu and they are not looked up from a database. Load Monday example fills the same four rows, sets the targets to 2,000 kcal and 120 g protein, sets cooking-for to 4, and places the four meals on Monday only. The other six days stay empty.

Monday slots: breakfast 450 kcal and 30 g protein, lunch 600 kcal and 40 g protein, dinner 700 kcal and 45 g protein, snack 250 kcal and 15 g protein. The daily total is 450 + 600 + 700 + 250 = 2,000 kcal, and 30 + 40 + 45 + 15 = 130 g protein. Against a target of 2,000 kcal and 120 g protein, the calorie difference is 0 and the protein difference is +10 g. Protein's share of Monday's calories is 4 × 130 ÷ 2,000 = 26 percent. The other six days are zero, so the weekly sum is still 2,000 kcal and 130 g protein. The weekly average is that sum divided by 7, which is 285.7 kcal and 18.6 g protein. The weekly protein share uses the sums, not those rounded averages: 4 × 130 ÷ 2,000 is still 26 percent. Dividing 4 × 18.6 by 285.7 would be a different, slightly off figure, and the page does not do that.

Repeating that Monday on all seven days makes the weekly average 2,000 kcal and 130 g protein. The daily difference stays 0 kcal and +10 g protein on every day. The page is still only adding the rows you placed. It has not decided that repeating one day is a good or a bad week.

Change only the snack to 400 kcal and 15 g protein. Monday is then 450 + 600 + 700 + 400 = 2,150 kcal, and protein is still 130 g. The calorie difference versus 2,000 is +150 kcal. Protein is 4 × 130 ÷ 2,150 = 24.2 percent of those calories. The result is a gap you can read. The script does not remove the snack to force the day back to 2,000.

A separate check, not part of the Monday sum unless you type the grams: dinner entered as 700 kcal, 45 g protein, 60 g carbohydrate, and 20 g fat. The 4, 4, and 9 line is 4 × 45 + 4 × 60 + 9 × 20 = 180 + 240 + 180 = 600 kcal, which is 100 kcal lower than the typed 700. The daily total still uses 700, because that is the calorie figure you typed. The 600 is a flag that the grams and the calories do not describe the same energy total under the plain factors. Use the label's calories when you have a label.

Grocery handoff, with cooking-for set to 4, and with these lines typed on the breakfast row only: "1 cup oats", "1/2 cup milk", and "1 1/2 tsp salt". The scaled lines are "4 cup oats", "2 cup milk", and "6 tsp salt". Monday's calories stay 2,000. They are not multiplied by 4. If that breakfast is also placed on other days, each placement adds another copy of the scaled lines, and the grocery list generator can add matching lines together. The quantities above are lines typed for the example. They are not a standard recipe and they are not prices.

When to use this

Use it when you already know what you intend to eat and you want the week added up in one place. A typical path on this site is the TDEE page for a maintenance estimate, the macro page for grams, the protein page if the question is grams per kilogram, then this grid, then the grocery list, then the meal prep portion calculator once a batch exists. You can skip ahead. If you already have a calorie target, type it here and do not reopen the TDEE page.

Use it when you want a shuffle of meals you have already described, with a repeat rule you can read. That is the whole of "fill my week." It is the wrong tool if you want a generator to name dinners, invent grams, or write a shopping list from a cuisine you did not type. Use the grocery list when the job is scaling and merging ingredient lines from recipes. Use the protein cost calculator when the job is price per gram from a package you bought. Use the household grocery budget calculator when the job is a USDA food-plan cost you paste, compared with spending you type. This grid does not know prices.

It is a reasonable scratch pad before you cook, and a poor substitute for a diet a clinician already wrote. Pair a body-weight question with the BMI calculator only if you want that screening index. BMI is not an input here, and this page does not turn a calorie difference into pounds.

Common mistakes

Treating fill my week as a menu writer. The button can only place meals that are already on the list. If the list has one meal, the week is that meal, or blank slots, depending on the repeat window. The seed changes which eligible meal is drawn. It does not create a fifth meal.

Reading the household number as a calorie multiplier. Cooking for 4 changes "1 cup oats" into "4 cup oats" in the grocery text. The Monday total stays 2,000 kcal if that is what the slots add up to. If four people are each eating the full grid, the grocery scale is the right lever. If you instead wanted the grid itself to show four people's calories, you would be mixing a household total with a one-person target. The targets on this form are applied to the unscaled grid.

Dividing the weekly average by something other than 7, or expecting empty days to disappear. A Monday of 2,000 kcal and six empty days averages 285.7 kcal, not 2,000. If you only care about days you eat at home, the daily lines are the ones to read. The average is still the seven-day mean, because that is what the label says.

Using the rounded weekly averages to recompute the protein percent. The percent is 4 times total protein grams divided by total calories. Rounding 130 ÷ 7 to 18.6 and 2,000 ÷ 7 to 285.7, then dividing, is a second rounding. The result panel uses the unrounded sums for the percent and rounds only the number it prints.

Pasting a meal name into the grocery tool and expecting nutrients to come back. The grocery lines are the ingredient text you typed, scaled. A meal with no ingredient lines contributes its name only, and the grocery parser will not invent amounts for a name. Cups and ounces of the same food stay split once they reach the grocery page, on purpose.

Assuming the saved plan is an account. The browser key is local. A private window, a cleared cache, or a different device starts empty. The address-bar targets are not a save. They only fill the target fields when the page opens.

Limitations

Four slots a day, and a meal list you maintain by hand. There is no barcode scan, no restaurant database, and no automatic leftover. Carbohydrate and fat are optional, so a day can show calories and protein with carbohydrate and fat still at zero because you left them blank. Blank is not a claim that the meal has no carbohydrate. It is an empty field. The 4, 4, and 9 check stays silent until all three gram fields on that meal have a number, including a typed zero.

The repeat rule understands meals as whole rows. It does not understand ingredients. Oats at breakfast and oats inside a different row are two meals, and both can land inside the window. The rule also does not know that two names are the same dish. "Chili" and "chili bowl" can both be placed. Edit the list if you want them treated as one row.

Quantity scaling reads only a leading number. "1 cup oats" scales. "oats, 1 cup" does not, and it is marked with the multiplier instead. Mixed numbers need the whole number, a space, and the fraction, as in "1 1/2 tsp salt". The scaler does not convert units and does not pluralize "cup" into "cups". The grocery list page is where unit families are handled.

Nothing here is a floor on calories, a ceiling on protein, or a variety score. A day over the target is a subtraction result. A protein percent is 4 times grams divided by calories. The page does not compare that percent with a recommended band. The macro calculator is where adult percent bands are shown, and those bands are not copied into this grid as a pass or a fail. People under 19, pregnant people, and anyone on a prescribed diet should not use the targets on this page as their plan.

Local storage can fail in a locked-down browser. When it does, the warning says the plan was not stored. Print, copy, and CSV are the copies that leave the page as files or clipboard text. Those files are yours. This site does not keep them.

FAQ

Is this a recipe generator or an AI meal plan?

No. The grid adds calories and grams you type, or that you pick from meals you saved on this page. Fill my week only shuffles those meals. It does not invent recipes, look up nutrients, or call an outside service.

How should I split calories across breakfast, lunch, dinner, and a snack?

This page does not set a per-meal target. Type the calorie and protein targets for the day, then put whatever you plan to eat in the slots. The daily total is the sum of the slots. The difference is that sum minus the target you typed.

What happens when a day is over the calorie target?

The difference is positive. The page shows that gap. It does not delete a meal, cut a portion, or tell you the day is unsafe. If the target itself came from the TDEE calculator, that target is an estimate. This grid does not re-check it against a medical limit.

Can I save the plan?

Save on this device writes the meals, the grid, and the targets into this browser's local storage under the key calchive.weekly-meal-planner.v1. CalcHive's servers do not receive that copy. Clearing site data for this browser, or Clear saved plan, removes it. Another device or another browser will not see it.

Does variety get scored?

No. The optional no-repeat rule is a scheduling limit you set, measured in days, so the same saved meal is not placed again inside that window. It is not a nutrition score. If every saved meal is already inside the window, the slot stays blank instead of breaking the rule.

How does the household number affect the totals?

It scales ingredient quantities in the grocery text only. Daily calories and grams stay as you entered them for one person's plan. Cooking for 4 turns a line you wrote as 1 cup oats into 4 cup oats. Paste those lines into the grocery list generator if you want them merged.

What if I work nights and the day labels do not match my schedule?

The seven columns are Monday through Sunday labels for a planning grid. They are not a shift schedule and they do not time meals. Rename the meal, not the day, if you eat your main meal at 2 a.m. This page does not give night-shift advice.

Related calculators

Sources

Checked October 2, 2026. This planner's own arithmetic is the sum, the difference, the seven-day average, and 4 times protein grams divided by calories you type. It does not reprint a food table.

← Back to Nutrition calculators