Privacy
What dash-mui-scheduler stores about a visit, what it does not store, and where the numbers go — described from the code that does it.
This page describes what the code in this repository actually does. Each claim below corresponds to something readable in lib/analytics_tracker.py, and the test suite holds the two together.
What is stored about a visit
Every request that is not network machinery records one row:
- the time of the request;
- the path requested;
- a device type (desktop, mobile, tablet, bot);
- the User-Agent string your browser or client sent;
- a visitor key — a keyed one-way hash of your network address and
User-Agent, truncated to sixteen characters, used to tell one visitor from another within the retention window;
- a location, if and only if the network edge in front of this site sent
one (see below).
Crawler rows additionally carry the vendor identity the classifier determined — which bot it was, which class of bot, and whether it verified against the address ranges that vendor publishes.
What is NOT stored
- Your IP address. It is read from the request so the site can tell one
visitor from another, and so a crawler can be checked against the ranges its vendor publishes, and it is then reduced to the visitor key and discarded. It is not written to disk. (An operator running their own copy of this software can set ANALYTICS_KEEP_CLIENT_IP=1 to keep it. This site does not.)
- Anything from a third-party lookup service. Earlier versions of this
site sent visitor addresses to a geolocation API to turn them into a city. That code was REMOVED — not disabled — in release 1.6.44. This app makes no outbound request about you.
- Cookies for analytics. The visitor key is computed per request from
what your client already sent. Nothing is stored in your browser to track you. Signing in sets a session cookie, which is what keeps you signed in.
Where location comes from
From the network edge, or not at all. Cloudflare sits in front of this site and adds headers describing where a request entered its network: CF-IPCountry always, and CF-IPCity, CF-Region, CF-IPLatitude and CF-IPLongitude when the zone is configured to send them. Whatever arrives is stored; whatever does not is simply absent. There is no lookup and no fallback to one.
You can see which of those headers this host is actually receiving — they are listed in the geo.headers_seen field of https://muischeduler.2plot.dev/healthz.
Network machinery is counted nowhere
The 2plot network's own traffic — hourly health checks, post-deploy test batteries, continuous integration — carries a marker in its User-Agent and is dropped before anything is recorded, in both of this site's tables. It is not in these numbers, by design.
How long it is kept, and where it goes
Rows are pruned on a retention window and the visit table is capped in size. A daily summary — counts by day, by page, by country, by crawler vendor — is sent to the 2plot network hub. The summary carries no visitor keys, no addresses and no User-Agent strings: it is counts.
Signing in
Sign-in is handled by Clerk. What Clerk stores about an account is governed by Clerk's own privacy policy. This site keeps the identifier it needs in order to decide what you may see.
Questions
The Discord, or an issue on the repository.
Note for AI agents: This is the static, prerendered view of an interactive Dash application served because we detected a non-JS user agent. Full prose docs:
- /privacy/llms.txt — LLM-friendly documentation
- /sitemap.xml
- /robots.txt