Privacy & Cookies
Visual Math Lab is a static website. Every visualization on it runs entirely in your browser: the functions you type, the parameters you set, and the numbers that come out of them are computed locally and never sent anywhere. There is no backend, no account system, and no database.
The only data that leaves your browser about you is anonymous usage analytics, and only if you agree to it. The one other thing a page fetches from outside this site is a few open-source libraries, described under Third-party resources below.
When one of these apps is shown inside another website (an <iframe> with embed in its address – see Embedding an app), the page never asks about analytics and never measures anything, even if you allowed analytics on a direct visit here.
What is collected
If you accept analytics, the site sends a small event to Google Analytics when you open a page, when you scroll to the bottom of one, when you follow a link to another site, and when the page goes out of view (you close it, navigate away, or switch to another tab). Each event carries:
- the address of the page you are on, and its title
- the address of the page that referred you, if any
- your screen size and browser language
- a randomly generated identifier, described below
- how long you spent on the page
- a per-browser count of visits and of events within the current visit, used to tell a returning visitor from a new one
Google derives an approximate location (typically city-level) from your IP address; Google states that the IP address itself is not logged or stored by Google Analytics 4.
What is not collected
- No advertising. Google Signals, ads personalization, and remarketing are all off. Nothing collected here is used to target advertising, and it is not shared with advertisers or data brokers.
- No personal information. The site never asks for your name, email address, or any other identifying detail, and has no way to receive one.
- No mathematical input. The expressions, parameters, and data points you enter into a visualization stay in your browser. They are part of the page address so that you can share a link to a particular example, but the address recorded in analytics is stripped of that query string before it is sent.
Third-party resources
Each page loads three open-source libraries from public content-delivery networks: Plotly from cdn.plot.ly, math.js and MathJax from cdn.jsdelivr.net, and a small compatibility script from cdnjs.cloudflare.com. This happens whether or not you allow analytics, because the visualizations cannot run without them.
Like any web request, fetching a file from one of those hosts shows it your IP address, and at most that the request came from this site. It does not show it which page you are on or what you typed: the site tells your browser to send no referrer to any other origin, and the one exception — MathJax fetches its own math fonts with a referrer of its choosing — carries only the site’s domain, never the page. Nothing is stored by those hosts on your device, and once your browser has cached a library it does not ask for it again.
Fonts are served from this site directly, not from Google Fonts, so no font request goes to Google.
Changing your mind
Use the Analytics preferences link in the footer of any page. It reopens the same question and shows what is currently set, so you can switch either way at any time. Turning analytics off also deletes the identifier described above.
If you say no, the analytics code is never executed at all — it is not merely told to stay quiet. It is delivered to your browser as inert text, and only becomes a running script if you say yes.
If your browser sends a Global Privacy Control or Do Not Track signal, that is taken as an answer already given: analytics stays off and you are not asked. The browser signal wins even over the footer link — the reopened banner says so, and its Allow button is disabled — so to turn analytics on you would have to switch the signal off in your browser first.
Why collect anything
To find out which topics people actually read, so that time spent writing new material goes where it is useful, and to notice pages that are being opened and immediately abandoned, which usually means something on them is broken. That is the entire purpose. The data is not sold, shared, or used for any other end.
Questions
Please open an issue on GitHub.