Our Table Tonight

Turn a meal plan into a shopping list without double-buying

Why a list written from memory double-buys

A shopping list written from memory fails in two directions at once. It buys things you already have, because three of the week's recipes each want an onion and you write “onions” down three times without noticing. And it forgets things you need, because Thursday's dinner was still an idea rather than a decision when you wrote the list, so nothing from it made the page.

The fix is not a better list. It is to stop writing one. If you decide the meals first, the list is no longer a separate act of memory — it is the ingredients those meals need, added up. To generate a grocery list from a meal plan you fill the days, choose the range you are actually shopping for, and let the app do the adding up: scale each recipe to the number of people eating, merge the repeats into one line, and skip the nights you are not cooking.

Our Table Tonight does this from the meal planner. It is a free beta. What follows is the method, then exactly what the generation step does and does not do, so you know what still needs your eyes before you leave the house.

Step one: plan the week before you think about shopping

The list can only be as complete as the plan. Fill the slots you intend to cook — breakfast, lunch, dinner and any snacks — and mark the nights you are not cooking as eat-out or leftovers rather than leaving them empty. An empty slot and a takeaway night look identical to you and completely different to the generator: it will produce a list for a week with three dinners in it quite happily, and you will find the gap on Wednesday.

Two things about a slot change the shopping, so set them while you are planning rather than afterwards:

  • Servings. Each slot can override the recipe's own serving count. Six people on Sunday and two on Monday is one recipe planned twice with different numbers, and the list reflects both. The recipe itself is never changed.
  • Sides. A meal is one main plus as many sides as you add. Sides are ordinary slots, so their ingredients reach the list exactly like the main's does. A side you meant to cook but never added to the plan is a side you have not bought for.

Step two: choose the range you actually shop for

Generation runs from the planner's header, where you pick a From and a To date. It starts on the week you are looking at, but the range is yours to set, and the useful part is that it does not have to be a week. Shop in two-day runs and generate two days. Do one big shop on Saturday and a top-up midweek, and generate Saturday to Tuesday, then Wednesday to Friday. Going away for a fortnight afterwards? Generate the fortnight. The only rule the app enforces is that the end date is not before the start date.

Ranges that cross a week boundary are fine. The planner keeps each meal on the week its own date belongs to, and generation collects by date rather than by week, so a shop that straddles two plans still comes out as one list.

What generation actually does

One request, and the app works through every home-cooked slot in the range — mains and sides, every meal type, every plan the range touches. For each one it does this:

  1. Collects the ingredients from the recipe on the slot, with their quantities and units.
  2. Scales them by the slot's servings override against the recipe's own serving count. A four-serving recipe planned for six is multiplied by one and a half.
  3. Merges duplicates by ingredient, so the onion in three different recipes becomes one line with the quantities added together, rather than three lines you buy three times.
  4. Rounds what is left. Count-type units — pieces, cloves, whole things — round up to a whole item, because you cannot buy 2.4 onions. Everything else rounds to two decimal places.
  5. Skips the nights you are not cooking. Eat-out slots have no ingredients at all, and leftovers slots are deliberately left out too: the food for those was bought for the night you cooked it.

The result is saved as a list named for its dates — “Meal plan — 2026-03-30 to 2026-04-05” — so a month of shops does not become five lists called “Shopping”. On the list page items are grouped into categories, with anything uncategorised gathered under Other, and unchecked items sit above checked ones inside each group.

Example

Produce

  • 2 onions
  • 1 head garlic
  • 400g mixed greens

Dairy

  • 250g butter
  • 1L milk

Pantry

  • 1 tin chopped tomatoes
  • 500g pasta

Step three: shop from one list, not from a photograph of one

If the plan belongs to a household, so does the list it generated. Everyone in that household opens the same list, and check-offs sync between them as they happen: one of you ticks the milk in the dairy aisle and it goes quiet on the other's phone at the far end of the shop. Checked items dim and strike through rather than vanishing, so you can still see what has been picked up.

This is the part that stops two people double-buying. Merging fixes the duplicates inside the plan; a shared, live list fixes the duplicates between shoppers. A screenshot of a list sent over a message does neither.

There is a check-all and an uncheck-all for the whole list. Uncheck-all is the more useful of the two: it resets a list you want to walk through again without generating a new one.

What it cannot do

Two limits are worth knowing before you trust a list completely.

It merges what it can match

Merging is strongest when an ingredient is matched to an entry in the ingredient list. Where it is not — an ingredient typed in as free text — the app falls back to matching the names as written, so “onion” merges with “onion” but not with “brown onion” or “onions, diced”. Those stay separate lines. That is not wrong, exactly, but it is two lines where you wanted one, and two lines is how you end up with two bags. Entering the same ingredient the same way each time is the whole fix.

It does not know your kitchen

The list is what the week's recipes require, not what you are missing. Nothing in the app tracks a pantry, so the flour, the oil and the half tin of paprika you already own are all on it. Read down the list once before you go and check off the things already in the cupboard. That pass takes a minute and is the only manual step left in the routine.

The routine, once it settles

  1. Fill the week's slots, including the nights you are not cooking.
  2. Set servings on any slot feeding a different number of people.
  3. Pick the From and To dates that match the shop you are about to do.
  4. Generate, then check off what you already have.
  5. Shop from the shared list rather than a copy of it.

The plan is the input and the list is the output. Anything you change about the week — swapping Thursday, raising Sunday's servings, dropping a side — changes what the next generated list contains, which means the list only has to be right once: when you plan it.

Related guides

Try this in your own week

Our Table Tonight is a free beta. Sign in if you already have an account, or join the waitlist and we'll email you when a spot opens.

Sign in