write down what you ate.
most food logging fails at the same place: the search box. you ate a bowl of the thing you always make, and the app wants you to pick between four hundred entries called "chicken soup", each with a different number attached.
the version that works is the one you will actually do — your own meals, named the way you name them, portioned the way you portion them.
so build that. an agent makes a page with your regular meals as one-tap buttons and a text box for everything else, and it is yours by the end of the message.
a diary, not a database.
01 / what it isthe useful thing about food logging is rarely the total. it is noticing on thursday that the last three bad afternoons all followed the same lunch. that needs a diary you keep honestly, which means it has to be quicker to log than to skip.
this page optimises for that and gives up the rest. there is no nutrition database behind it, so if you want calories you type them once when you save a meal and the page reuses the number. that is less accurate than a lookup and considerably more likely to still be happening in three weeks.
- your regular meals as one-tap buttons
- a free-text line for everything else, with no required fields
- optional numbers — calories or protein — only if you want to count something
- a day view that is the page, and a week you can read back
- no search box, no barcode scanner, no food database
- export and import as json
- what it records
- what you ate, when, and any numbers you chose to attach
- where that goes
- localStorage in one browser. not synced, not uploaded
- the numbers
- arithmetic on what you typed. no food database, no lookups, no accuracy claim
- what it is not
- nutritional or medical advice, and the page says so
see one in action.
02 / examplea day of eating with eight saved regulars and a free-text box for the rest
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 food log as a single web page. It is a diary, not a calorie database.
Ask me first:
- The meals I eat regularly, so they can be saved as one-tap entries.
- Whether I want to count anything numeric — calories, protein, both, or nothing.
- Whether I log by meal (breakfast/lunch/dinner/snack) or just by time of day.
- Whether I want to note anything else alongside food, such as how I felt afterwards.
Build from that. Do not invent meals, portion sizes, or nutrition numbers. If I want calories, I will tell you them — never estimate them for me.
WHAT IT DOES
- Today is the page. My saved regular meals are buttons; tapping one logs it with the current time.
- A free-text box logs anything not saved, with no required fields. "two slices of the leftover pizza" is a valid entry and must not be rejected or turned into a form.
- Let me save any free-text entry as a new regular, so the button list grows into my actual diet.
- If I asked to count something: a total for the day, shown plainly, and the number attached to each saved meal editable at any time. State on the page that these are numbers I supplied, not looked up.
- A week view I can read back — days in rows, entries in order. This is the part that makes a pattern visible.
- Editing and deleting entries has to be easy.
WHAT IT MUST NOT HAVE
- No search box against a food database. There is no database.
- No barcode scanning. A self-contained page cannot do it.
- No estimated calories, no macro breakdown you inferred, no "healthy" or "unhealthy" labelling of anything I ate.
- No daily target unless I asked for one, and no commentary when I go over or under it.
DESIGN
- Fast and quiet. Logging should feel like writing a line, not filling a form.
- Mobile-first: this gets used standing in a kitchen holding a plate.
BE HONEST ON THE PAGE
- Say the log is stored in this browser only.
- Say that any numbers are arithmetic on what I entered, with no nutritional database behind them, and that this is not nutritional or medical advice.
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="food-tracker">
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 saved-meal list is the asset here — it takes a couple of weeks to become genuinely yours. claim the page so that work is not sitting behind a url that expires tonight.
the saved meals are the part worth keeping.
05 / keeping it aroundfine for a day of trying it. the page stops serving after 24 hours, with a 7-day recovery window — and your saved meals were in the browser, so a fresh page starts empty.
claim it and you keep both: a permanent url, and the page that knows your eighteen regular meals. that list is why the log survives past week one.
- keep it around
- your saved-meal list takes weeks to build and lives in a page that expires in 24 hours unless you claim it.
- custom url
- a page you open three times a day should have an address you can type without looking it up.
- stable updates
- diets change. so does what you want to count. the page can change at the same address.
questions.
06 / questionsdoes it know how many calories are in things?
no. there is no food database and no lookup — if you want a number it is one you typed, saved against your own meal, and reused. that is less precise than an app and much more honest about where the figure came from.
is this nutritional advice?
no. it is a diary that adds up numbers you supplied. the page says so, and anything involving actual dietary decisions belongs with a professional who knows your situation.
can i scan barcodes?
no — that needs a camera pipeline and a product database, neither of which exists in a self-contained page. the saved-meal buttons are the substitute, and for most people they are faster than scanning anyway.
who can see what i eat?
nobody. entries are in your browser’s storage, not in the published html, so someone opening your url sees an empty log. we never receive what you typed.