Mahj Trainer Privacy Policy

Last updated: November 7, 2026

Mahj Trainer works without an account. Practice progress, streaks, review history, onboarding choices, and preferences are stored locally on your device.

Purchases

Apple (on iPhone and iPad) and Google Play (on Android) process Mahj+ purchases. RevenueCat verifies entitlement status and may process an anonymous app user ID, transaction and entitlement information, and limited technical app or device context. To learn which screens lead to a membership, the app also sends RevenueCat counts of where and how often the Mahj+ offer was shown, the dates of the first offer and of a purchase, how many times the app was opened before the first offer, and which screen a purchase started from. It does not receive your practice content, name, or email. See RevenueCat's privacy policy.

Feedback

On iPhone and iPad, Send Feedback and the one question asked when a membership is ending send what you write straight to the developer. Supabase stores it. Each message also carries the app version, iOS version, device model, language and region setting, and whether you are a Mahj+ member. No name, email or account is attached. Messages are read to fix problems and improve the app, and are kept only as long as that takes. Because nothing ties a message to you, email us what you sent and roughly when if you want it removed.

Monthly challenge scores

On iPhone and iPad, after you play a round of the monthly challenge, the app sends your month score (points and days played) to our Supabase database with a random code that is made on your device and changes every month. No name, email, account or device identifier goes with it. The server answers with how many players have scores that month and how many are below yours, so the app can show where you stand. Nobody, including other players, can read the scores. Scores are used only for that percentage. Because nothing ties a score to you, it cannot be found to remove later.

Usage analytics

Mahj Trainer sends PostHog, our analytics provider, how the app is used: screens opened, settings and plans chosen, repeated taps, practice answers and results, onboarding and purchase steps, app opens, crash reports, and device details such as model, system version and language. PostHog uses your IP address to estimate your city and country, then discards the address. All of this is tied to the random ID RevenueCat holds for your purchases, and RevenueCat sends PostHog your trial and subscription events under that ID. We use it only to understand how the app is used and improve it. It is not used for ads or to track you across other apps, and what you type in feedback is left out. PostHog keeps it for up to a year. You can turn it off in Settings › Share Usage Data.

Ad attribution

If you install Mahj Trainer from an Apple Ads search ad, Apple's AdServices framework tells RevenueCat which campaign and keyword led to the install. This uses no advertising identifier and does not track you across other apps. We use it only to measure whether our ads pay for themselves.

Facebook and Instagram ads

Mahj Trainer no longer tracks you. Versions after 1.4.2 do not include Meta's SDK, do not ask to track you, and send Meta nothing. Since October 29, 2026 our servers and RevenueCat have also stopped sending Meta trial or purchase events for every version.

On iPhone and iPad, version 1.4.2 and earlier still include Meta's SDK, which tells Meta when the app is installed and opened, and ask once whether to allow tracking. If you allowed it, the SDK can read your device's advertising identifier. Before October 29, 2026, trial and purchase events were sent to Meta with that identifier, Meta's anonymous app ID, your IP address and basic device details, so Meta could match them to the ad you saw. If you did not allow it, the identifier was never shared. Updating the app removes the SDK, and you can change your answer any time in Settings › Privacy & Security › Tracking. See Meta's privacy policy.

Our server keeps a record of each trial it checked before that date (RevenueCat's anonymous app user ID, the transaction and product IDs and the start time), with no name, email or practice content.

Mahj in ChatGPT

The Mahj Trainer plugin for ChatGPT runs on a Cloudflare Workers server we operate. When ChatGPT calls it, the server receives only what the tool needs: a lesson or practice topic, a mah jongg term, the tile names you ask it to read, or the answer you give to a practice question. It sends back lessons, questions, a checked answer or a rack read. It has no account and no database, and nothing is linked to your ChatGPT identity.

The server keeps nothing after it answers. It writes no logs, and Cloudflare's Workers Logs, Logpush and tail workers are all turned off for it, so no copy of your tiles, questions or answers is stored. Cloudflare carries each request as our host and, like any web host, processes your IP address and request details to deliver it and protect its network, and keeps that data only as long as Cloudflare's privacy policy allows. OpenAI handles your conversation under OpenAI's privacy policy. You can remove the plugin any time in ChatGPT's settings.

Mahj in Claude

The Mahj Trainer connector for Claude runs on the same Cloudflare Workers server. When Claude calls it, the server receives only what the tool needs: a lesson or practice topic, a mah jongg term, the tile names you ask it to read, or the answer you give to a practice question. It sends back lessons, questions, a checked answer or a rack read. It has no account and no database, and nothing is linked to your Claude identity. It never reads your conversation history, memory or files.

The server keeps nothing after it answers, exactly as described under Mahj in ChatGPT: no logs, no stored tiles, questions or answers, and Cloudflare carries each request only as our host. Its interactive cards load no outside content beyond the font Claude itself supplies. Anthropic handles your conversation under Anthropic's privacy policy. You can disconnect or remove the connector any time in Claude under Customize › Connectors. Questions about this section go to jackwallner+m@gmail.com.

What we do not collect

No account, tracking pixel, precise location, contacts, photos, microphone, or health data. The advertising identifier is used only by the older versions described above, and only if you allowed tracking. We do not sell personal information.

Retention and deletion

Local practice data remains until you delete it or remove the app. Apple, Google Play and RevenueCat retain transaction records as needed to process and restore purchases. Support emails and in-app feedback contain whatever you choose to send and are used to answer or act on it. The ChatGPT plugin and the Claude connector keep nothing past each request, as described under Mahj in ChatGPT and Mahj in Claude.

Children and changes

Mahj Trainer is not directed at children under 13 and does not knowingly collect personal information from children. We may update this policy when the app or its services change.

Contact

Questions? Email jackwallner+m@gmail.com.