Last updated: September 3, 2026
This draft was generated from a direct review of the Mahjong Caddie (iOS and Android) and Mahjong Keeper (backend) source code as it exists today. Every factual claim below reflects something confirmed in the codebase, not an assumption about what the app “probably” does.
1. Introduction
Mahjong Caddie (“Caddie,” “the app,” “we,” “us”) is a mobile scoring and statistics companion app for Zung Jung Mahjong, available on iOS and Android. Caddie can optionally connect to Mahjong Keeper (“Keeper”), our backend service, to back up your player profile, sync data across devices, and support club/tournament features. This Privacy Policy explains what data Caddie and Keeper collect, how it is used, and the choices available to you.
Operator:
Limit Cycle Entertainment Systems LLC
Contact Email:
2. Information Collected
Caddie is designed to be usable entirely offline, without an account. Most data described below is only collected if you choose to create a Mahjong Keeper account.
2.1 Without a Keeper account (local-only use)
If you never sign in to Keeper, the app stores the following only on your device, and it is never transmitted anywhere:
- Saved games and archived game history
- Your local player profile and statistics (ratings, pattern stats)
- Opponent “cards” (name and stats) captured from other players you’ve played against at a table, cached locally on your device
- Photos taken for hand-scanning are held in memory only during tile recognition and are never saved to disk or uploaded (see §2.7, Camera Usage)
You can delete this data at any time from within the app: individual saved games, “Delete All Saved Games,” or a full local data reset that clears your local profile and statistics.
2.2 Account Information (if you create a Mahjong Keeper account)
Creating a Keeper account requires:
- Email address — used for sign-in and account recovery.
- Password — handled entirely by our authentication provider (Supabase Auth). Caddie and Keeper never receive or store your password in plain text.
Optionally, if you fill in your player profile, we also store:
- First name, last name, and/or a preferred display name
- City, state/region, and country — entered manually by you (not derived from device location; see §2.9, Location)
- Your in-game statistics, ratings, and pattern data, so they can sync across devices and appear on club/tournament leaderboards if you choose to participate in those
2.3 Gameplay Data
Gameplay data includes completed and in-progress games, hand records, and the statistics calculated from them (win rate, deal-in rate, rating, etc.). This is generated entirely on-device. If you sign in to Keeper, you may choose to back this data up so it can be restored on another device; backup is opt-in, not automatic on install.
2.4 Tournament Data
If you participate in a club-run tournament, your results (name, placement, score) may be published by the tournament’s organizing club to Keeper’s public tournament records. Once published, tournament results are treated as a permanent historical record and remain visible even if you later delete your Keeper account — see §3, Data Retention, and §5, User Rights.
2.5 Device Information
We collect the following technical information only if you enable push notifications:
- A push notification device token (issued by Firebase Cloud Messaging)
- An app installation identifier (a random ID generated by the app, not tied to your device’s hardware serial number or advertising ID)
- App version, device locale, and time zone (used to schedule reminders correctly and localize notification content)
2.6 Analytics
Caddie does not use any analytics or crash-reporting SDK. We do not use Firebase Analytics, Crashlytics, Mixpanel, Amplitude, Sentry, or any comparable service, on either platform. In-app statistics (your win rate, ratings, graphs, etc.) are calculated locally from your own game history and are not a form of tracking.
2.7 Camera Usage
Caddie’s camera access is used for one purpose: photographing a mahjong hand so the app can automatically recognize the tiles for scoring, using on-device machine learning. The photo is processed in memory and is not saved to your photo library, not stored by the app, and never uploaded to our servers. You can always review and correct the recognized tiles before they’re used.
2.8 Notifications
If you sign in to Keeper and enable notifications, we send push notifications for the event types you opt into: new club events, a weekly digest, day-before and one-hour reminders, cancellations and changes, and registration-window openings. You control these individually in Notification Settings, and can disable all push notifications at the operating-system level at any time.
2.9 Location
Caddie does not access or collect your device’s GPS location. “Near Me” club and event features are based on the city, state, and country you optionally enter in your player profile — not your device’s actual location. On Android, the app requests the ACCESS_FINE_LOCATION permission only on Android versions where it is required by the operating system for Bluetooth Low Energy scanning to function (a platform requirement unrelated to determining your location); the app does not read or use your location value even when this permission is granted.
2.10 Purchases and Billing
Caddie does not use Apple’s In-App Purchase (StoreKit) or Google Play Billing. Event tickets, club supporter subscriptions, and donations are purchased through a web-based Stripe Checkout page, opened from within the app in your device’s browser. Caddie never receives, transmits, or stores your payment card details. Payment processing is handled entirely by Stripe; our backend stores only transaction identifiers, order records, and amounts needed for receipts, refunds, and your purchase history — never card numbers.
2.11 Third-Party Services
We share limited data with the following service providers, each acting on our behalf for the specific purpose described:
| Service | Purpose | Data shared |
|---|---|---|
| Stripe | Payment processing for tickets, subscriptions, donations | Email, name, purchase amount, transaction metadata. Stripe handles all card data directly; we never see it. |
| Firebase Cloud Messaging (Google) | Delivering push notifications | Device push token, notification content, your user ID (for internal routing only) |
| Resend | Sending transactional emails (e.g. purchase receipts, account-related emails) | Recipient email address, email subject/content |
We do not sell your data, and we do not share it with advertisers or data brokers. We do not use any advertising SDK.
3. Data Retention
We retain information for as long as necessary to provide the Services and for the purposes described in this Privacy Policy. Unless otherwise stated below, information is retained until you delete it, delete your account, or applicable legal or business requirements require longer retention.
- Local data remains on your device until you delete it or uninstall the app.
- Keeper account data is retained until you delete your account.
- Tournament results may be retained indefinitely as part of the historical record of organized tournaments.
- Payment records may be retained as required for accounting, tax, fraud prevention, and legal compliance.
- System logs and audit records may be retained as reasonably necessary to maintain the security and integrity of the Services.
4. Security
- Passwords are never stored or seen by Caddie or Keeper in plain text; authentication is
handled by our backend’s identity provider. - Payment card data is handled entirely by Stripe and never touches our servers.
- Backend data access is restricted by default: most data can only be read or written through
controlled server-side functions with built-in permission checks, not direct database
access. - Bluetooth table-sync data is transmitted only between devices at the same table during
active play, using standard Bluetooth Low Energy link-layer encryption, and is not
persisted after the session ends. - We use reasonable technical and organizational measures to protect your personal information.
However, no method of transmitting data over the Internet or storing electronic information is completely secure, and we cannot guarantee absolute security. - If we become aware of a security incident affecting your personal information, we will investigate the
incident and provide any notifications required by applicable law.
5. User Rights
You can, at any time:
- Export/view your data: your player card and statistics are visible to you in the app.
- Correct your data: profile fields (name, display name, city/state/country) are editable directly in the app.
- Delete local data: remove individual saved games, all saved games, or perform a full local data reset, all from within the app, without needing an account.
- Delete your account: from Account settings, “Delete Account and Keeper Data” permanently removes your Keeper login, player profile, private statistics, and the link between your identity and any tournaments you played in. Your local data on the device you’re using is not affected by this and remains until you clear it separately. Published tournament results remain as an anonymized historical record — the record stays, but it’s no longer linked to your deleted account.
- If you have a Mahjong Keeper account, you may request access to, correction of, or deletion of your personal information by contacting us using the contact information provided below. We will respond to requests in accordance with applicable law.
6. Children’s Privacy
Mahjong Caddie is not directed to children under the age of 13, and we do not knowingly collect personal information from children under 13. If we become aware that we have collected personal information from a child under 13 without appropriate parental consent, we will take reasonable steps to delete that information. If you believe a child has provided us with personal information, please contact us using the contact information provided in this Privacy Policy.
7. International Users
Mahjong Caddie may be used by individuals in countries outside the location where our services are hosted. By using the app, you understand that your information may be transferred to and processed in the country where our backend services are located. We take reasonable steps to protect personal information in accordance with this Privacy Policy and applicable law.
8. Changes to This Policy
We may update this Privacy Policy from time to time to reflect changes to the app, our services, or applicable laws. When we make material changes, we will notify users through an in-app notice and update the “Last Updated” date at the top of this Privacy Policy. Your continued use of Mahjong Caddie after the updated Privacy Policy becomes effective constitutes acceptance of the revised Policy.
9. Contact Information
If you have questions about this Privacy Policy or our privacy practices, you may contact us at:
Email: info@zungjungmovement.org
We will make reasonable efforts to respond to privacy-related inquiries in a timely manner.
Appendix: Officer/Club-Admin Visibility (supporting detail for §2 and §5)
If you are an officer or owner of a club, you can see additional information about that club’s members that a regular player cannot see about other players: member roster (name, join date), event RSVP and ticket-purchase history, supporter-subscription status, and a log of administrative actions taken by officers/owners (bans, credit grants, etc.). This access is limited to members of that specific club and does not expose data from other clubs, private saved games, or payment card details.
The visibility described in this Appendix is a core feature of Mahjong Caddie’s club management system. By joining a club or participating in club events through the app, you acknowledge that authorized club owners and officers may access the information described above as necessary to administer the club, manage events, and provide member services.