All documentation
Documentation

The rest of life

Recipes and the meal plan

A recipe register on every plan, import from a link or a paste, export that reads back in, and a weekly grid that knows who is cooking and what needs buying.

Two things live here and they are gated differently, so it is worth separating them before anything else.

The recipe register is yours on every plan, including Free. It is a database of what you cook, searchable offline, and one person cooking for themselves is a perfectly good reason to have one.

The weekly meal plan is part of the family suite. It is the coordination half: which dish on which night, who is cooking, and what that means for the shopping list.

The register

Open Recipes from the sidebar. A recipe holds a title, an emoji, a description, how many it serves, prep and cook minutes, ingredients, steps, tags, and the link you got it from. Favourites sort to the top.

Ingredients are structured rather than a blob of text: each one has a name, an amount, and an aisle. The aisle is what lets a week of meals become a shopping list sorted the way you actually walk a supermarket, and it fills itself in from the ingredient name unless you set it.

Search runs against the local database over titles, descriptions and tags, so it works with the phone in your hand and no signal in the shop.

Getting recipes in

Three ways, and none of them asks you to retype anything.

From a link. Paste a recipe URL. The page is fetched on the server, and what happens next depends on what the site publishes. A site with proper structured recipe data is read directly, exactly and for free. TheMealDB links come straight from their API. A Margin recipe file sitting at a URL is read back losslessly. If none of that is there, the readable text goes to the assistant, which extracts what it can and marks the result for you to check before saving. That last route is the only one that costs an AI action.

If the site returns an error, is behind a login, or has nothing recipe-shaped on it, you get told which of those happened and are pointed at pasting the text instead.

From a paste or a file. Drop in markdown, plain text, or a Margin recipe JSON file, up to 1 MB. A structured file is parsed with no model involved at all. Free text goes through a check first: something with a title, ingredients and steps is accepted outright; a list of items with no cooking verbs is refused as what it is, usually a shopping list; only the genuinely ambiguous middle costs an AI action.

By hand, which is still the fastest route for a family recipe nobody ever wrote down.

Every import shows you a review screen before it writes anything. Clean results arrive ticked; anything the checker was unsure about arrives unticked and expanded, so you opt in after reading rather than opting out after saving.

If you paste more than a handful of recipes and the checker needs the assistant, it works through up to ten at a time. Fifty is the ceiling for a single import.

Getting them out

Export downloads every recipe as one JSON file, named for the date. It runs entirely in your browser with no server in the loop, which is why it still works on a lapsed plan and offline.

That file imports straight back, into this workspace or another one, with nothing lost. The file itself carries a plain sentence explaining what it is and how to read it back, so it is still useful to a person who has never heard of us.

There are also two fill-in templates to download, one JSON and one markdown, if you would rather type a batch than click through a form.

The weekly plan

Seven days across, four slots down: breakfast, lunch, dinner and snack. Drag a dish between slots to move it. A slot can hold more than one dish.

Tap a slot and you either pick a saved recipe or type something free-form. Both are first-class. "Leftovers" and "Eat out" are real answers to what is for dinner, and typing them is how you record a week honestly.

Each planned meal can carry how many it is for, who is cooking, and a note for whoever that is. The servings number overrides the recipe's own, and the ingredient amounts scale with it.

Deleting a recipe does not blank your week. The plan keeps the dish's name as text, because a deleted recipe should cost you the recipe, not the record of what you ate.

Food rules are set once for the household rather than per recipe: what you do not eat, what nobody will touch, a default number of servings, and a free note. The assistant reads them before planning a week.

From the plan to the shop

One button on the shopping list turns this week's meals into items on it.

It reads every planned meal that points at a saved recipe, scales each ingredient by the servings you planned for, and combines them. The same ingredient across three dinners becomes one line, with the amounts added when the units agree and joined when they do not, so you get "2 lb + a pinch" rather than a silently wrong number.

Free-text meals contribute nothing, because "Eat out" has no ingredients.

Anything already sitting unchecked on the list is skipped, so pressing the button twice does not double your list. See The shopping list.

That one button needs a connection. Everything else on both surfaces works offline.

What each plan gives you

The register is on every plan and holds 25 recipes on Free, 200 on Pro and Team, and 500 on Family.

A bulk import that would overrun the cap fills to it and tells you how many did not fit and why, rather than failing or silently truncating. Nothing you have already saved is ever removed.

The weekly plan needs a Family plan and a family workspace. See Plans and limits.

Checked against the running product on