Privacy Policy
Effective date: August 28, 2026
This page explains what data this site does and does not collect. Two third-party services are involved, and they are deliberately not the same kind of thing:
- Cloudflare Web Analytics runs on every page for every visitor. It sets no cookie and stores nothing on your device, which is why it is not gated behind a consent question.
- Google Analytics runs only if you explicitly allow it, and it does set cookies.
Each is described in its own section below.
No accounts
Harmony Gym does not ask you to create an account or sign in anywhere on the site. The only form on the site is the optional feedback form described below, and it never asks for anything beyond a message — the email field on it is optional too.
Local progress (localStorage)
Some lessons remember where you left off — for example, which exercises you have already completed. This progress is saved only in your browser’s local storage (localStorage) on your own device. It is never sent to us or to any server, and clearing your browser data will erase it.
Advertising
This site does not serve advertising. There are no ad scripts on any page, no advertising cookies are set, and no information about your visit is sent to any advertising network.
The site may carry advertising in the future. If that happens, this policy will be updated to describe it — including which network is used and what it collects — before the first ad is served. Until you read that here, there are no ads.
Visitor measurement (Cloudflare Web Analytics)
This site uses Cloudflare Web Analytics on every page, for every visitor, and it is not covered by the consent banner. This section explains what it does and why it is not gated.
It exists to answer one question: which pages people actually read, and where they arrived from. That is what tells us which lessons and articles are worth writing more of.
It sets no cookie. Cloudflare Web Analytics uses no client-side state of any kind — no cookie, no localStorage, no identifier written to your browser. Nothing is stored on your device and nothing persists between your visits, so there is no profile accumulating against you and nothing on your side to switch off. That is the specific reason no consent is asked for it, and it is the only reason: if it stored an identifier, it would sit behind the banner like Google Analytics does.
For each page view it records the address of the page (host and path), the referring link or search engine you arrived from if there was one, your country, your browser, your operating system, your device type (desktop, mobile or tablet), how the page was loaded (a fresh visit, a reload, back or forward), and performance timings such as how long the page took to load.
On your IP address, plainly. Loading the beacon means your browser makes a request to Cloudflare, so your IP address is part of that request while it is in transit — this is true of every request to every website, including this one. Cloudflare uses it to derive your country and then removes it during processing rather than storing it against your page view. Cloudflare states that it does not use IP addresses, browser User-Agent strings or similar attributes to fingerprint visitors or to track them over time, and that it counts “visits” as page views arriving from a different site rather than by recognising people who come back. So no per-visitor identifier is created or kept.
This policy does not call that data anonymous, because that word would be doing more work than the facts support. What is accurate: nothing identifies you in what we can see, no identifier is stored in your browser or attached to your page view, and each field listed above is shared with very large numbers of other people. What is also accurate: the request carrying it necessarily contained your IP address, and what happens to it after that is Cloudflare’s handling under Cloudflare’s own privacy terms rather than something this site performs or can demonstrate to you.
This is separate from the infrastructure-level logs described under the feedback form below, which Cloudflare keeps as the operator of the network serving this site whether or not this beacon exists. If you browse with JavaScript disabled, or block the script, the beacon does not run and nothing is measured.
Analytics (Google Analytics 4)
This site can use Google Analytics 4 to see which lessons and pages people actually use, in aggregate. It is used to decide what to build or fix next; it is not used to identify you individually, and the data is not sold or shared.
Nothing loads until you say yes. On your first visit a banner asks whether analytics may be used. Until you answer, and permanently if you decline, no Google Analytics script is requested, no request is made to Google from this site, and no _ga cookie is set. This applies to every visitor, everywhere — there is no country detection and no different treatment by region.
If you allow it, the Google Analytics script is loaded and sets its own cookies (_ga and similar) in your browser to distinguish one visit from another. If you later decline, this site stops loading the script and clears those cookies where it is able to.
Your answer is stored in your own browser under the key mtg-consent-v1 in localStorage. It is never sent to a server, which means it is specific to that browser on that device: clearing your browsing data resets the question, and answering on one device does not answer for another. If your browser blocks local storage, nothing is remembered — and nothing is loaded.
Your choices
You can review or change your analytics choice at any time on the Privacy Preferences page, which shows the answer currently stored in your browser and lets you switch it. That page is linked from the footer of every page on this site.
Declining costs you nothing: every lesson, exercise and feature works identically either way, and no part of the site is withheld.
That choice covers Google Analytics, which is what the banner asks about. It does not switch off Cloudflare Web Analytics, which has no switch here because it stores nothing on your device — if you want to stop it as well, blocking the script or browsing with JavaScript disabled does that, and the site keeps working.
Most browsers also let you block or delete cookies, and you can clear localStorage at any time in your browser settings — which will reset both your analytics answer and any saved progress on this site. If you browse with JavaScript disabled, no analytics is loaded at all.
Feedback form
If you use the feedback form, the message you type, the language of the page you were on, the path of that page, and the date and time you sent it are stored in a database (Cloudflare D1) that only the site’s operator can access.
The email field on that form is optional. If you leave it blank, your message is stored with no way for us to know who sent it or to reply — it is anonymous. If you fill it in, that address is stored alongside your message so we can write back.
This information is used only to decide what to build or fix next, and, when you leave an email, to reply to you. It is never used for advertising and never shared with anyone, including Google.
This section describes what this site’s own database stores. It does not cover Cloudflare’s operation of its network: Cloudflare serves every request to this site and, like any host, keeps its own infrastructure-level logs of that traffic, separate from and outside of what we store here.
To ask us to remove a message you sent, get in touch through the Contact page below and describe the message, or roughly when you sent it, so we can find it.
Microphone
One exercise on this site asks you to sing a note back, and that one needs to hear you. Your browser will ask for permission the first time; nothing opens until you allow it.
While that exercise is running, sound from your microphone is analysed in your browser to work out what pitch you are singing. It is never recorded, never written to storage, and never sent anywhere — not to this site’s operator, not to Cloudflare, not to anyone. What comes out of the analysis is a number: the frequency, which the exercise compares to the note it asked for. That number is not stored either.
The microphone is released the moment the exercise ends, and whenever you leave the page. Your browser’s recording indicator going out is the visible proof of that — and if you ever see it stay on after a drill has finished, that is a bug and we would like to hear about it.
Every other exercise on this site works with no microphone at all, and the singing one still explains itself and plays its notes if you decline.
Contact
If you have questions about this privacy policy, please get in touch through the Contact page.
Changes to this policy
This policy may be updated from time to time as the site or the services it relies on change. The date at the top of this page reflects the version currently in effect.