what you are paying for every month.
almost nobody can name all their subscriptions. the honest number is usually two or three higher than the list you would write from memory, and the annual total is a genuinely unpleasant surprise.
the apps that will find them for you do it by reading your bank account, which is a lot of access to grant in order to be told about a £4.99 charge.
writing them down takes twenty minutes once. a page that turns them into an annual figure and shows what renews next is the part that makes it worth doing.
the list, and the annual number.
01 / what it isthis page does one arithmetic trick and it is the one that changes behaviour: it normalises everything to a year. a £9 monthly service and a £70 annual one look similar in a bank statement and are not, and seeing them in the same column sorted by cost is usually enough to cancel two of them.
it also tracks renewal dates, which is the other half — an annual subscription you meant to cancel is only cancellable in the week you remember it exists.
- every subscription with its real billing period
- everything normalised to a monthly and an annual figure
- sorted by annual cost, because that is the useful order
- what renews in the next thirty days
- a note of why you keep each one, or that you do not
- export and import as json
- what it records
- name, cost, billing period, renewal date, and your own note
- what it computes
- monthly and annual equivalents, totals, and what renews soon
- where that goes
- localStorage in one browser. not uploaded
- reminders
- none. the page shows upcoming renewals when you open it and cannot notify you
see one in action.
02 / exampletwenty-two subscriptions, monthly and annual normalised to one figure, sorted by cost
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 subscription tracker as a single web page.
Ask me first:
- My currency.
- Whether I want to track anything beyond cost and renewal date — which card it is on, who in the household uses it, whether it is work or personal.
- Whether I want a category per subscription.
Do not ask me to list the subscriptions in the interview — the page is where I will enter them. Do not invent subscriptions, prices or renewal dates.
WHAT IT DOES
- Adding a subscription: name, cost, billing period (monthly, annual, quarterly, weekly), and next renewal date. Everything else optional.
- Normalise every entry to both a monthly and an annual figure, and show the totals of each. The annual total should be the most prominent number on the page.
- Sort by annual cost by default, highest first. This ordering is the point of the page — do not default to alphabetical.
- Show what renews in the next 30 days, with the date and amount.
- A free-text note per subscription, for what it is actually for and whether I still use it.
- Let me mark something as cancelled, keeping it in a separate list with what it was costing, so I can see what the audit saved.
- Editing and deleting.
DESIGN
- A table on a laptop, a readable list on a phone. Numbers aligned and consistently formatted.
- Make the annual total large. It is the number that does the work.
- No judgement copy. State the figure; I will draw my own conclusion.
BE HONEST ON THE PAGE
- Say the list is stored in this browser only and never uploaded.
- Do not claim to detect subscriptions, read statements, or cancel anything on my behalf. It cannot do any of those.
- Do not claim to remind me of renewals; a page has no way to notify me.
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="subscription-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
- a subscription list is worth revisiting quarterly, which means it has to survive the quarter. claim it, and put a calendar reminder somewhere to actually open it — the page cannot chase you.
the audit is quarterly, so the page has to be too.
05 / keeping it aroundthe page stops serving after 24 hours with a 7-day recovery window. you would be rebuilding the list every time you wanted to look at it.
claimed, it is permanent — and this is a page whose whole value is being opened again in three months with the numbers already in it.
- keep it around
- you will open this quarterly at best. it has to still be there when you do.
- stable updates
- prices rise and services come and go. update the page, keep the address.
- custom url
- something you can find in three months without remembering what you called it.
questions.
06 / questionscan it find my subscriptions for me?
no. that requires reading your bank account, which this page has no access to and no way to get. you enter them once from a statement — twenty minutes, and considerably less access granted to anyone.
will it warn me before a renewal?
only when you open it, where it shows what renews in the next thirty days. no page can send a notification, and any that claims to is wrong. pair it with a calendar reminder to look.
can it cancel anything?
no. it is a record. cancelling is still you, on their website, in the flow they designed to be tedious.
is my list private?
yes — it is in your browser, not in the published page, so someone with the url sees an empty tracker. we never receive what you typed.