Privacy
This is a personal log that happens to be readable by anyone. It has no accounts, no analytics and no advertising, and it collects nothing about you. There is exactly one place where anything leaves your browser, and you have to press a button to make it happen.
N=1, not medical advice. This page describes how the site handles data, which is a different thing from being legal advice about your data.
Everything you log stays in your browser
Sessions, the plans you build, the weights and reps you type in, your own movements and their links, your readiness numbers — all of it is written to this browser’s local storage on this device. It is not uploaded. There is no server that holds it, which also means there is no server that can be asked for it, breached for it, or sold with it.
The flip side is honest: clearing your site data deletes it, and it does not follow you to another device or another browser. Nobody can send it back to you, including me.
Readiness data never leaves the device. At all.
Recovery, HRV, resting heart rate, sleep, sleep performance, strain, and whatever you type into the notes field — that is health data, and it is the most revealing thing on this site. It is never put in a request, never synced, never backed up anywhere. The one server this site talks to has no endpoint that would accept it: a request carrying it would be answered with a 404 before anything read the body.
The Copy the prompt and Copy brief buttons put text on your clipboard. If you then paste that into Whoop, Claude or anything else, the data goes wherever you pasted it, under that company’s terms rather than these. That is your decision each time, which is exactly why it is a copy button and not an integration.
The one request: the shared video library
The Videos page has a shared library at
api.notaroutine.life. Your browser asks it for the list when that page
opens, and posts to it when you press Share it or report an entry.
Nothing else on the site talks to it, and every page works normally when it is
unreachable — the shared list goes empty and says so.
An entry in that library is five things and nothing else:
- The movement it shows, chosen from the list.
- The link, which must point at YouTube, Instagram, Vimeo or
TikTok. Everything after the address is stripped before it is stored — share
links carry identifiers like
igshidandutm_source, and some of those name whoever copied the link. - Your note, if you wrote one.
- Whether it has been reported, and which of four reasons was given. There is no free-text box anywhere in that flow.
- A random id, so a report can say which entry it means. It is generated fresh and carries no order and no origin.
There is no column for who submitted it, when, from where, or with what. There is no timestamp at all, and entries are ordered by movement name and then by that random id, so the list cannot be read back as a record of who was here when. Two entries from the same person cannot be linked to each other, by me or by anybody else.
No accounts, no cookies, no analytics
No email address, no username, no phone number, no password. No cookies of any kind, including the ones sites set for their own analytics. No Google Analytics, no Plausible, no pixels, no embedded players, no fonts loaded from anyone else’s server — the two typefaces are files in this repository. Nothing on any page makes a request to a third party.
What the hosts see, because it would be dishonest not to say
The site is served by GitHub Pages, and the shared library runs on Cloudflare. Any computer that serves you a file necessarily receives the request that asked for it, which includes your IP address. That is true of every website and I cannot make it untrue; what I can do is not use it. The Worker keeps no logs — request observability is turned off — and nothing about a request is written to the database.
The rate limit that stops one person flooding the library is Cloudflare’s own, counted at their edge. What it is handed is a hash of the connecting address rather than the address, and it is a counter that expires after a minute, not a record.
Reporting something in the shared library
Every shared entry has a report button, and it asks which of four things is wrong before it sends anything. No account, no explanation needed, no free-text box: there is deliberately nowhere in that flow to type something about yourself, or about anyone else.
Two of those four outcomes are different, and the button says so before you press it:
- Unsafe — take it down now. One report hides the entry for everybody, immediately, before I have looked at it. It stays hidden until I review it, and I may put it back. A false hide costs somebody an hour of attention; the alternative is a movement that hurts people staying up on my domain while a queue is drained, and that is the worse of the two.
- Dead link, wrong movement, or spam. These mark the entry for review and leave it visible. A broken link is not an emergency, and a spam report is the easiest thing in the world to send for the wrong reason.
The first tier is still abusable by anyone determined — there is no login to stop them. The trade is deliberate, and it is narrowed to the one reason where being wrong in that direction is the cheaper mistake.
Anything else — a link that should come down, a question about this page — goes to hello@notaroutine.life. That address is a person, not a signup.
Deleting things
Your own data: clear this site’s data in your browser, or use the clear buttons on the builder and sessions pages. It is gone at that point, everywhere, because there was only ever the one copy.
Something you shared: report it, or email the address above. Since nothing ties an entry to you, I cannot find “everything you submitted” on request — that is the cost of not knowing who you are, and it is the right cost.
What isn’t working
- One unsafe report still hides an entry, and that is abusable. Anyone determined enough could hide the whole library one entry at a time. Splitting reports into two tiers narrowed the blast radius; it did not close it. There is no moderation queue and no way to appeal except email. If it becomes a problem the fix is a review step, not a login.
- Reviewing reports is a person running a database query. There is no admin screen and no notification. Something reported on a Friday may sit hidden until someone thinks to look.
- Local-only storage loses things. People clear site data by accident, phones get replaced, and a browser can evict local storage under pressure. Right now the answer is that your log lives in one browser and nowhere else, which is private and fragile in equal measure.
- Nothing here has been audited. The claims on this page are checkable — the site and the Worker are both open source, and the tests assert some of them — but nobody independent has looked.
- This page can go stale. If a feature ships and this page doesn’t change with it, this page is wrong. That has not happened yet, and saying so here is the only guard against it.