Data retention
Draft under review. This text is being checked by a lawyer and may change before Learn Vedic Math is launched.
Owner of this policy: the information security coordinator, Madhav Srinivasan, the site's operator (see how we keep the site secure). Reviewed at least once a year, and whenever what the site collects changes.
Principles
- Keep as little as possible, for as short a time as possible.
- Prefer the Player's device to any server. What is only on the device is the device owner's to keep or delete.
- No information from a child under 13 is kept on any server we control, beyond what our host and analytics process for internal operations and the anonymous feedback taps described below (fixed choices, the Mode and the day; no free text, no identifier, no age; ADR 0017).
- Deletion is automatic wherever the tool allows it, so it does not depend on someone remembering.
What we keep, why, and for how long
| Information | Where | Purpose | Business need | Deleted | How |
|---|---|---|---|---|---|
| Players, progress, settings, Device board | The Player's browser (localStorage) | Let the Player keep playing | The game does not work without it | When the Player is removed or site data is cleared | By the device owner (Me page or browser settings) |
| World board entry: Nickname, avatar color, score, time, expiry, random ID (Players 13 and older only) | Google Firestore, in the site's own Firebase project | Show the World board | Boards are part of the game | No longer readable once it expires, 30 days after its last update (the rules refuse reads of any Board older than 28 days, which is before any of its entries can expire, and the app hides expired entries too); then physically deleted by Firestore's TTL clean-up, which runs in the background and usually finishes within a few days of expiry | Firestore TTL policy on exp; rules refuse longer exp and older Boards |
| Anonymous sign-in record for that random ID (Players 13 and older only) | Google Firebase Authentication | Let a Player update their own entry | Stops one Player from overwriting another | World boards are switched off for now, so no such record exists. When they are switched on, this row will say when these records are deleted | To be set with the Firebase project, before World boards are switched on |
| App Check / reCAPTCHA assessment | Keep scripts from posting fake scores | Fair Boards | We do not keep it; Google keeps it under its terms for reCAPTCHA Enterprise. World boards are switched off for now, so none is made today | ||
| Request logs (IP address, browser, path) | Cloudflare | Deliver pages, stop attacks | Running a website | Per Cloudflare's standard log handling; we do not export or store them | Cloudflare |
| CSP reports (directive, blocked origin, page path, browser family) | Cloudflare Workers Logs | Find security problems | Security | After Workers Logs' retention period, a few days (Cloudflare sets it by plan) | Automatic |
| Cloudflare Web Analytics (aggregate page loads, no cookies) | Cloudflare | Know traffic and speed | Running and improving the site | Kept by Cloudflare as totals, under its own retention; no per-person data exists | Cloudflare |
| GoatCounter counts (fixed-word events, path, referrer, browser, country, screen size; no IP stored, no cookie) | GoatCounter | Learn which parts help people learn | Improving the site | Per-visit records: the time is still being set in GoatCounter's "data retention" setting, and this policy will say it once it is; totals kept as totals | GoatCounter setting |
| Talk with the Family: a message (the Skill, the question's numbers, the words of that visit) and its reply (Players 13 and older who turned it on) | Our Worker (in memory, for the request), then Anthropic (the Claude model, under its API terms) | Let Bolt and the Family answer a question about the method | Help that fixed lines cannot give | Not kept: discarded once the reply is returned; the Worker logs one fixed word per message and nothing of what was said | Nothing stored |
| Talk with the Family: the session ticket from the Turnstile check | The Player's browser (sessionStorage), in a request header | Prove the bot check passed | Keep scripts from running up the bill | 30 minutes, or when the browser session ends; never stored on a server | The browser; the Worker only verifies it |
| Talk with the Family: the count of messages per connection address this hour (the address only as a keyed hash whose key changes every day) | Our VoiceLedger Durable Object (Cloudflare) | About 20 messages an hour per address | Bound the cost of the AI model inside the daily and monthly caps | When its hour ends (deleted at the next request after that) | Automatic (expiry on each row) |
| Turnstile assessment | Cloudflare | Keep scripts from sending messages | Bound the cost | We do not keep it; Cloudflare keeps it under its terms for Turnstile | Cloudflare |
| Feedback answers: the Mode (Explorer, Challenger or Pro), the day (never a time), the fixed choices tapped, and, from Players 13 and older only, an optional note with email addresses, phone numbers and long numbers removed | Cloudflare D1 (database learnvedicmath-feedback), behind our Worker | Learn what is fun, what is too hard and what to build next, and hear about problems | Deciding what to fix and build | 12 months after the answer's day. Any single answer sooner, on request or when the owner sees a note that names a person. D1's Time Travel can restore the database to a point in its own window (7 days on the Free plan, 30 days on the Paid plan), so a deleted answer is gone for good at most that long after its deletion | Automatic: a daily scheduled job deletes every answer older than 12 months; the owner deletes single answers on the results page |
| Feedback: the count of sends per connection address for the day (the address only as a keyed hash whose key changes every day) | Cloudflare D1 (feedback_quota) | About 20 sends a day from one address | Keep scripts from flooding the answers | After its day: deleted at the next send and by the daily job | Automatic |
| Feedback: the session ticket from the Turnstile check (Players 13 and older who write a note) | The Player's browser, in a request header | Prove the bot check passed before a note is accepted | Keep scripts from sending notes | 30 minutes, or when the browser session ends; never stored or logged on a server | The browser; the Worker only verifies it |
| Hand-off payload from sbmadhav.com | Only in the URL fragment, on the device | Move progress to the new site | One-time move | Removed from the address bar at once; never sent to a server | Import page |
| Emails to privacy@, hello@, security@ | Cloudflare Email Routing (passes through), then the owner's Gmail | Answer questions and requests | Required contact for parents | 12 months after the conversation ends, or 30 days after a deletion request is completed, whichever is sooner | Owner deletes; reviewed each quarter |
Old site's World board data (sbmadhav.com, project sbmadhav-vedic-math) | Google Firestore | None after the move | None | Writes stop when the old address starts sending visitors here; the project is deleted when the move is finished (Google purges it 30 days later) | Owner, as part of the move |
There are no backups of any of the server-side data above, and no copies outside the tools listed, apart from D1's own Time Travel window for the feedback answers (named in its row).
Requests to delete
A parent, or a Player 13 or older, can ask at privacy@learnvedicmath.com for World board entries to be deleted (give the Nickname, color and date). We delete them, confirm by email, and then delete the email thread within 30 days. There is never anything server-side for a Player under 13 except anonymous feedback taps, which hold nothing that ties them to a Player and are deleted after 12 months.
Review
At each annual review (part of our security program) the coordinator checks every row against what the site really does (the game's note for grown-ups, the Firebase set-up, the Firestore deletion setting, the GoatCounter setting), and updates this policy and the published version together.