decide once, eat all week.
the hard part of dinner is not cooking it. it is deciding, at six in the evening, with nothing thawed and nobody agreeing.
meal planning fixes that, and meal planning apps make it a chore of its own: recipe imports, nutrition databases, a subscription, and a library of meals nobody in your house will eat.
the version that works is a page holding the twenty things you actually cook, a week to drop them into, and a shopping list that falls out of the result.
a week grid and a meal bank.
01 / what it isplanning meals is a two-part problem and most tools only solve the glamorous half. the grid — seven slots, fill them in — is trivial. the part that makes it work is a bank of meals specific to your household, with the ingredients attached, so choosing is picking rather than remembering.
because you describe the bank rather than importing a database, everything in it is something someone in your house will eat. that is the difference between a plan you follow and a plan you make on sunday and abandon on tuesday.
- a bank of the meals your household actually eats
- a week you fill by picking from it, not by typing
- ingredients per meal, so the shopping list builds itself
- a note of what you ate recently, so the rotation does not collapse to four things
- somewhere for the takeaway night to be an honest entry
- export and import as json
- what it holds
- your meal bank with ingredients, and the current week’s plan
- where that goes
- localStorage in one browser. the other adult in the house sees their own copy
- the shopping list
- generated from the meals you planned, editable before you shop
- what it does not do
- nutrition, recipe import, or telling you what to eat
see one in action.
02 / examplea week of dinners chosen from a bank of twenty-two household regulars
the live example is still being built — the prompt below is the one it was made with.
copy this, then make it yours.
03 / starting prompta starting point, not a template — the point of an agent is that the result is yours. change the sections to match what you want, and remove anything you don’t need.
Build me a weekly meal planner as a single web page.
Ask me first:
- The meals my household actually cooks, as many as I can list. This is the most important answer.
- Roughly what ingredients each one needs, if I know them — I can fill gaps later.
- How many people I am cooking for, and whether that changes during the week.
- Anything nobody here will eat.
- Whether I plan dinners only, or other meals too.
Build from my answers. Do not invent recipes, do not add meals I did not name, and do not import anything from anywhere.
WHAT IT DOES
- A week grid: the days, each with a slot per meal I plan. Assigning a meal means picking from my bank, not typing it again.
- A meal bank listing everything I cook, with its ingredients. I can add to it, edit it, and add a meal straight into the week and into the bank in one action.
- A shopping list generated from the week's plan: every ingredient from every planned meal, combined where the same thing appears twice, grouped sensibly, and editable before I shop — I will already have half of it.
- A note of when each meal was last planned, so I can see the rotation collapsing before it does.
- Space for honest entries: leftovers, takeaway, "out". These are part of a real week and should not be missing from the page.
- Let me clear the week and start the next one without losing the bank.
DESIGN
- The week is the page on a laptop; on a phone, one day at a time with the week reachable.
- Picking a meal should be two taps. If it takes a form, this page will not survive a month.
- Plain and quick to scan. This gets read at a counter while something is boiling.
BE HONEST ON THE PAGE
- Say the plan and the meal bank are stored in this browser only, so another person in the house opening the same url sees their own empty copy.
- Do not add nutrition information, calorie counts or dietary advice.
- Do not claim to import recipes from websites. It cannot.
STORING THE DATA
- Save everything to localStorage in the browser, automatically, as I go. No
accounts, no login, no server call.
- On the page, say plainly that data lives in this browser only and does not
sync to other devices. Do not bury it.
- Give me an "export" button that copies or downloads everything as JSON, and an
"import" that reads the same JSON back. That is the only way my data can move
between devices, so it is not optional.
- Never lose what I have already entered. If the stored data is from an older
version of the page, read what you can rather than throwing it away.
DELIVERY
- Produce one self-contained HTML file. Inline the CSS and JavaScript.
- No build step, no server, no framework, no package install, no external
requests at runtime.
- Mobile-first and responsive; it has to be usable one-handed on a phone and
still look right on a laptop.
- Accessible: semantic HTML, real contrast, visible keyboard focus, labelled
controls, touch targets big enough to hit, and respect reduced-motion.
- Use placeholders where information is missing. Do not invent facts, numbers,
names, dates, prices, or results I have not given you.
- Before you call it finished, use it yourself: enter real-looking data, reload
the page, and confirm nothing is lost or mangled.
PUBLISHING
Publish the finished page to HTMLShare and give me the link.
Use exactly one of the two paths below, preferring the first. Make the call
directly. Do not route it through a code sandbox, container, or computer-use
session — that is where the request gets blocked, and it is never necessary.
1. An HTMLShare integration or connector, if you have one configured.
The page is permanent and owned by my account. Report the url and the
siteId. There is no claimUrl or manageToken on this path — do not go
looking for one, and do not switch paths in order to produce one.
2. Otherwise, publish anonymously over REST. No account, key, or signup is
needed:
POST https://api.htmlshare.net/v1/publish
content-type: application/json
{"html": "<!doctype html> ... "}
The reference is https://htmlshare.net/docs and, for the full schema,
https://api.htmlshare.net/openapi.json
Report these from the response, in your reply and never inside the page:
url the public page
claimUrl a private link that is mine alone. opening it is how I keep
the page past its 24-hour expiry, or set an email reminder
before it goes. it carries the manage token, so it must
never appear in the published HTML or anywhere a visitor
could see it.
manageToken the only thing that can edit or delete this page later. it is
returned once and never again, so tell me what it is.
Tell me which of the two you used. If the path you reach for first is
unavailable in your environment, say so and tell me what you are switching to
before you publish — a permanent page on my account and a 24-hour anonymous
page are different things, and which one I get is my decision, not a detail.
If I ask for a change afterwards, update the existing page instead of
publishing again, so the URL I have already shared keeps working — through the
same integration on path 1, or with the manage token as an X-Manage-Token
header on path 2.
RECIPE MARKER
Include this tag in the <head>, exactly as written:
<meta name="htmlshare-recipe" content="meal-planner">
It tells htmlshare which recipe the page came from, so the library can count
that this one was actually made. It carries nothing else.give it a url.
04 / publishing ithow you publish depends on how you’re working.
- with an integration
- if your assistant already has htmlshare connected — mcp or another supported integration — just ask it to publish the finished page and hand back the url. the page belongs to your account and is permanent. when you want a change, ask for an update to that same page rather than a new one.
- with no integration
- the prompt tells the assistant to post the html to the rest api instead, which needs no account and no key. it comes back with a live url you can open immediately, a private claim link, and a manage token. the claim link is how the page stops being temporary — keep it.
- by hand
- nothing stops you doing it yourself: have the assistant give you the html file and drop it on the htmlshare home page. same url, same page, one more step.
- what matters here
- the meal bank takes a few weeks to become genuinely yours and is the reason this page keeps working. claim it so that work has somewhere permanent to live.
the meal bank is worth more than any one week.
05 / keeping it aroundfine for planning one week to see whether you like the shape. the page stops serving after 24 hours with a 7-day recovery window behind it.
claimed, the page and its meal bank stay at one url. week two is when this recipe starts paying, and week two is after the anonymous page is gone.
- keep it around
- anonymous pages expire in 24 hours, which is shorter than one planning cycle.
- custom url
- this gets opened on a phone in a kitchen by someone not looking for it. a typeable address helps.
- stable updates
- the meal bank grows, the household changes, the page changes with it — at the same address.
questions.
06 / questionscan my partner see the plan?
they can open the url, but they will get their own empty copy — each browser stores separately and there is no shared state. what households usually do is keep the plan on one device and share the shopping list by screenshot or export.
can it import recipes from a website?
no. the page makes no outside requests. paste the recipe to your assistant and have it added to the meal bank properly — which also strips out the eight paragraphs before the ingredients.
does it do nutrition?
no, deliberately. this is about deciding what to cook, not about counting anything. if you want a food log, that is a different page and it still only adds up numbers you supply.
what if the week goes wrong?
change it. the plan is not a commitment and the page should not treat it as one — no adherence score, no completion percentage. swap tuesday for takeaway and move on.