What we do and don't send.
Promote is local-first. Your games, analyses, and coach conversations live on your machine. We collect a small amount of anonymous, aggregated usage data to understand how players use Promote and where to focus. This page lists exactly what's in it.
What's in the ping (anonymized)
Sent at most once every 24 hours from installs that have the toggle on. Default is on; you can switch it off at any time in Settings.
- •Anonymous install ID (a random UUID, created on first launch, never tied to your name or accounts).
- •App version and operating system (Mac or Windows).
- •Counts of games analyzed, puzzle attempts (total and first-try), training sessions completed, and coach/LLM calls made.
- •Your primary time control (rapid, blitz, bullet, classical, daily) — the format you play most.
- •Your current rating and rating change over the last 30 and 90 days, derived from your imported games.
- •Install age in days (from the anonymous ID's creation).
What the ping never contains
- ✕Your name.
- ✕Your Chess.com or Lichess usernames.
- ✕Your FIDE ID or national federation ID.
- ✕PGN or any game content (moves, positions, openings).
- ✕Coach conversations, LLM prompts, or LLM responses.
- ✕Finding content (the actual weakness patterns the app detects).
- ✕Your IP address. The telemetry server strips it on arrival.
- ✕Any identifier that could be used to find you in a chess database.
One honest caveat: the list above covers the automatic usage ping. If you voluntarily submit a bug report via the Report Issue button, the attached screenshot and the note you type may contain any of these things, because you chose to send them. See the Report Issue section below.
How we use it
Everything published on promotechess.com is an aggregate across all opted-in installs. We never publish per-user numbers. Examples of what the data supports:
- The live counters on the homepage.
- Internal product decisions (which features are used, which aren't).
- Rough sense of whether the app is helping the average player improve.
How to turn it off
Open Settings → Usage stats and flip the toggle. Future pings stop immediately. Past anonymous pings remain in aggregate numbers since there's no way to link them back to you.
See the exact payload
From within the app, Settings → Usage stats → See exactly what's shared shows the actual JSON that would be sent next, built from your live local data. No hand-waving.
Other cloud calls the app makes
These are separate from telemetry. Each is triggered by you, not by background code:
- Chess.com and Lichess: when you connect an account and import games, we fetch them directly from the public APIs.
- LLM provider (OpenRouter): when you use Coach or get move commentary, the relevant position or game excerpt is sent to the model you've chosen. No other content is attached.
- Auto-update: Promote checks a signed manifest on launch to see if a new version is out.
- Report Issue: when you click the Report Issue button and press Send, a screenshot of your current view plus the note you typed plus a bit of anonymized context go to our feedback server. Details in the next section.
Report Issue (the button in the corner)
Promote has a Report Issue button in every view so you can send us a bug or a gripe with one click. Because it's a deliberate user action and not background telemetry, we're honest about what it contains, which is more than anything else the app sends:
- •A PNG screenshot of whatever is on screen at the moment you press the button. If your name, rating, a game, or a Coach conversation is visible, it's in the screenshot. The modal shows you the exact capture before it's sent.
- •The note you type. Whatever you write, verbatim.
- •Your anonymous install UUID. The same random ID used for telemetry. It lets us see if the same install is hitting the same bug repeatedly.
- •App version, operating system, and the name of the current view (e.g. "coach", "puzzles"). Nothing about that view's content beyond the screenshot.
When it fires: only when you click Report Issue, review the attached screenshot in the modal, and press Send. It never fires in the background.
Where it goes: our Cloudflare feedback worker at feedback.dweisman81.workers.dev. The screenshot is stored in a private Cloudflare R2 bucket; the metadata in a private Cloudflare D1 database. Only Daniel can access either.
How to turn it off: don't click it. If you'd like a bug report you already sent deleted, email the address below with the report ID (shown in the confirmation toast) or enough detail for us to find it, and we'll remove the screenshot from R2 and the row from D1.
Retention
Anonymous ping rows are retained for up to 180 days. After that they're deleted from the aggregation database. Coach conversations sent to OpenRouter are subject to that provider's retention policy; see openrouter.ai/privacy.
Who's responsible for your data
The data controller for Promote is Daniel Weisman, an independent developer based in the United States. Reachable at dweisman81@gmail.com for any privacy question, request, or concern.
Why we're allowed to process it
For readers in jurisdictions that require us to name a legal basis (the EU and UK, under GDPR):
- Consent for the anonymous usage ping. You can withdraw it any time by flipping the toggle off in Settings.
- Contract performance for the features you actively use: importing games, running analysis, Coach replies. Without processing that data the feature can't work.
- Legitimate interest for the auto-update check, which exists to ship you security and bug fixes.
Your rights
Whatever data-protection regime you live under (GDPR, UK GDPR, CCPA, or others), these are yours:
- Access. Everything non-anonymous is already on your device. From within the app, Settings → Usage stats → See exactly what's shared shows the only thing that leaves it.
- Deletion. Settings → Danger Zone → Factory Reset wipes all your games, analyses, and profile locally. We cannot identify or delete your past anonymous pings individually, since they're not tied to you. You can stop all future ones with the toggle.
- Rectification. Update profile fields (name, usernames, federation IDs) any time in Settings.
- Portability. Your games are stored locally in a standard SQLite database at the app's data directory; your PGNs are always recoverable from Chess.com / Lichess directly.
- Objection. Email the address below and we'll handle it.
- No sale. We do not sell your information, under any definition of "sell," including the CCPA's expanded one. There's no data broker, no ad network, no affiliate tracking.
If you believe your rights have been violated and we haven't resolved it, you can lodge a complaint with your local data-protection authority.
International transfers
Promote's telemetry, key provisioning, and update hosting are on Cloudflare (United States). The Coach feature routes through OpenRouter (United States) to whatever LLM you've selected. The underlying model provider may be anywhere. If you're outside the US, the data relevant to a given feature call may be processed in the US.
Children
Promote is not directed at children under 13, and we do not knowingly collect personal information from them. If you believe a child has submitted personal information, email us and we'll delete it.
Changes to this policy
Substantive changes are announced at the top of this page and, for paying users, by email before they take effect. The date below reflects the last meaningful change.
Questions
Email Daniel at dweisman81@gmail.com.