where the money actually went.
budgeting apps want read access to your bank. that is a large amount of trust for what is, underneath, a categorised list of numbers with some sums at the bottom.
and the categories are never yours. every one of them has a taxonomy designed for an average person, so half your spending ends up in "other" and the report tells you nothing.
the version you build has your categories and no connection to anything. you type what you spent, which is slower and is also the entire security model.
typed in, not imported.
01 / what it isthe trade this page makes is explicit: you type every expense, and in return nothing is connected to your finances. no open banking consent, no third party holding a token against your account, no data set being built about your spending. for a lot of people that is worth ten seconds a day.
the second advantage is the categories. "the dog", "the flat", "things i regret at 11pm" are legitimate categories and they are the ones that make a monthly total mean something to you. a generic app cannot offer that because it has to work for everyone.
- your own categories, named the way you think
- entry in under ten seconds: amount, category, done
- this month’s total and each category’s, against last month
- recurring items entered once rather than every month
- a plain list you can actually audit
- export and import as json
- what it records
- amount, category, date, and a note if you want one
- where that goes
- localStorage in one browser. never sent to us
- what it computes
- totals by category and by month, and the comparison between them
- what it is not
- a budget authority, a forecast, or financial advice
see one in action.
02 / examplea month of spending across nine personal categories, with a running total and last month beside it
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 an expense tracker as a single web page. I will type entries in; nothing connects to a bank.
Ask me first:
- The categories I want, in my own words. Push me to be specific rather than generic.
- My currency.
- Whether I have regular monthly costs worth entering once rather than repeatedly.
- Whether I want a monthly budget per category, or just the totals.
- Whether the month runs calendar or from a payday.
Build from my answers. Do not invent categories, budgets or amounts, and do not suggest what I should be spending.
WHAT IT DOES
- Adding an expense is the fastest thing on the page: amount, category, and that is it. The date defaults to today and the keypad is numeric on mobile.
- The current period's total is the headline figure, with each category's total below it and last period's beside it for comparison.
- Recurring costs: entered once with their amount and frequency, counted automatically in each period, and clearly distinguished from things I typed today.
- A full list of entries, in date order, that I can read down and audit. The totals must be derived from it, so a wrong total is always a wrong entry.
- Editing and deleting entries.
- If I asked for budgets: show spent against budget as a number and a bar, without alarm language when I go over.
DESIGN
- Entry-first on mobile, review-first on a laptop.
- Numbers in a monospace font so columns align. Currency formatted consistently.
- Plain. No pie chart of nine categories — a labelled list of totals is more readable and more honest.
BE HONEST ON THE PAGE
- Say the data is stored in this browser only, is not uploaded, and does not sync.
- Say the page does arithmetic on what I entered and is not financial advice.
- Do not claim bank connections, statement import, or receipt scanning. None are possible here.
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="expense-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
- this page is worth something after two months, when you have a comparison. claim it so there is a second month, and keep the address to yourself.
one month of data tells you nothing.
05 / keeping it aroundthe page stops serving 24 hours after publishing, with a 7-day recovery window behind it. an expense tracker needs months before it says anything.
claimed, it is permanent. your figures are in the browser either way — what an account buys is that the page which reads them is still there in march.
- keep it around
- the comparison between months is the product, and it needs the page to exist for months.
- custom url
- an address you can open quickly after paying for something, which is the only moment you will actually log it.
- stable updates
- categories change as life does. change the page without moving it.
questions.
06 / questionscan it read my bank statements?
no. there is no connection to any bank and no file import, so every entry is typed. that is the cost of a page that has no access to your accounts and nothing to leak.
where do my figures go?
into your browser’s storage on the device you used. they are never sent to us — we hold the html page, not its contents — and someone opening your url sees an empty tracker.
is it a budgeting system?
only if you asked for budgets, and even then it is arithmetic: spent against a number you set. it will not tell you what to spend, flag you as overspending, or offer advice.
can i see a year at a time?
ask for it. monthly totals across a year is a reasonable thing for the page to compute, and it is more useful than most charts — but say so in the first message so the data shape supports it.