Privacy
Effective September 4, 2026. What changed in this version.
Ooh La Mahj is a game of American mah jongg. This policy describes what the app collects and stores — which is little. You can try the game without giving us anything; after your first few hands we ask for an email address so your hands and settings can follow you between the app and the website. Beyond that the app asks for almost nothing about you.
What Ooh La Mahj stores on your device
Game settings, your display name (whatever you choose to type — it can be anything), your card choices, your book of winning hands and the journal of hands you've made, a count of the hands you've finished and the days you've played (which decides when the app invites you to share it with a friend), an email address you've typed into a scheduling poll (so you needn't type it twice), a sign-in token if you have signed in, a record of your last sixty solo hands (what you were dealt, passed, drew and discarded, and how the hand ended — kept on the device only, so the app can look back at how a hand went), and a randomly generated code that isn't your name.
All of it lives in your browser's own storage on your device. You can remove it at any time by clearing this site's stored data through your browser or device settings, or with Forget This Device in the app.
What reaches our server
When you play with other people, the moves you make and your chosen display name pass through our game server to the other players at that table. While a table is open, its state — hands, discards, chat — is held in the server's memory, with a working copy kept in our database (hosted by Supabase) so that a server restart doesn't destroy a live game. When the table closes, that state is deleted from both places on the schedule below; we never keep the contents of a finished hand.
For 30 days after a table closes, we keep a short record of who hosted it and who tried to join, so a friend who arrives a little late doesn't hit a dead end, and so we can look into an abuse report if one comes in. That record holds first names only. It is then deleted.
Scheduled games and polls keep the names and times you entered until a day after the last proposed time has passed. A Standing Table — its name, its members' first names, and the keys that hold their seats — stays until the host ends it or a member leaves.
While you're seated at a table on the web, the page may keep a single-use seat pass in its own address bar. It exists so that opening your table on another device — say, tapping "open in the app" from Safari — moves your one seat instead of seating you twice. The pass is a random code tied to that table alone, works once, and expires on its own within hours. It identifies your seat, not you.
If you block someone, that stays until you undo it. If you send us a report, we keep it for up to two years, so a pattern involving the same person doesn't start from zero each time.
The server also counts how the app is used — screens opened, games finished, that sort of thing — tagged to that random code rather than to your name, together with a yes-or-no of whether the device is signed in and, when you arrived by a link a friend sent you or by a shared picture, a tag saying so (the tag says nothing about who sent it). The detailed records are deleted after 60 days; the running totals are kept.
The first time our server sees a new device, it uses the connecting IP address once to look up an approximate city, keeps the city, and does not store the IP address. That's how we know roughly where people are playing from. It is city-level and nothing finer.
Table Talk
If you turn on Table Talk, your voice is carried directly between the players at your table — it does not pass through our server, and we never record or store what's said. We could not produce a recording if we were asked to, because none exists.
To help two devices find each other, the app uses public connection helpers (STUN servers) run by Cloudflare and Google. They see the network addresses involved in setting up the call and never receive any audio. When two devices cannot reach each other directly — common on mobile networks — the call may be carried through a relay run by Cloudflare. The relay passes the encrypted audio along without being able to decode it (WebRTC encrypts the call end to end between the players' devices), it stores nothing, and it never touches our own server. We still cannot produce a recording, because none exists anywhere.
Text chat at the table lives only as long as the table does, and is never written to disk. Everyone at your table can hear and read you, and any of them could be recording on their own — that's outside anything we control.
Sharing a winning hand
When you win and tap SHARE, the app makes a picture of your winning hand — the tiles, the hand's name, the points, and the date, nothing else — and uploads that picture to our server so your friends receive a link that shows it. The link is a random code: anyone who has the link can see the picture, so share it as you would a photo. Keepsake pictures are deleted after 90 days, and you can ask us to remove one sooner by writing to privacy@oohlamahj.com with the link. If you'd rather nothing be uploaded at all, don't tap SHARE — nothing about a win leaves your device on its own.
What we don't collect
No surnames, no phone numbers, no contacts, no calendars, no photos, no precise location, no advertising identifiers, and no tracking of you across other apps or websites.
What we don't do with it
We don't sell your information, and we don't share it with advertisers. A short list of outside services helps us run the app — Cloudflare (delivery, visit counting, and the voice connection helper and relay above), Supabase (our database), Resend (email delivery), Apple (push notifications and the iOS app), Google (a connection helper), and Render (our hosting provider). Each processes data only to provide its service to us, not for its own marketing.
Your email address, if you offer it
An address you give for a scheduled game or poll is kept with that game and deleted a day after its last proposed time passes. The same screens offer a tick box for Ooh news; every email we send has an unsubscribe link, and unsubscribing stops all marketing email at once.
My Ooh — your account
My Ooh is an account that uses your email and a six-digit code we send to it — there is no password. Today it is optional; we are moving to asking for it after your first few hands, so that what you make in the app is not lost with the device it was made on, and when we do the app will say so where it asks. What My Ooh keeps, attached to your email: the hands in your book and journal (the hand's name, its tiles, its points and the date — never the names of the people you played with), the list of your Standing Tables and the keys that hold those seats, your display name and mat choice, and which devices you've signed in on. Deleting My Ooh erases your email address, every sign-in, and the account's copy of your book, immediately and without a grace period. Deletion doesn't reach records we keep for safety (reports, blocks), the news list if you subscribed to it (unsubscribe separately or ask us), or anonymous usage counts that were never attached to your name.
Notifications, if you turn them on
The iOS app can remind you about scheduled games and Standing Tables, but only after you say yes. Apple gives your device a push token, which we keep on our server alongside the codes of the tables your device already belongs to, and Apple carries each message to your phone. Turn notifications off any time in the app or in iOS Settings.
Ooh news
Where a screen offers news, that box starts ticked, so if you give us an address on one of those screens and leave the box alone, you'll get news as well as whatever you came for. Every issue has a one-tap unsubscribe, and it stops all news, not just one message.
Visit counting
The website uses Cloudflare Web Analytics, which counts visits without cookies and without storing anything on your device.
Do Not Track
We don't track you across sites or apps in the first place, so a Do Not Track signal changes nothing — honored by default.
The hands in the game
The app doesn't ask you to upload or photograph anything. Ooh La Mahj is not affiliated with, endorsed by or connected to the National Mah Jongg League, Inc. or any other card publisher.
Children
The game is not directed at children under 13, and we don't knowingly collect information from them. If you believe a child has given us information, write to privacy@oohlamahj.com and we'll delete it.
Your choices, and asking us for things
You can ask what we have, ask us to correct it, ask us to delete it, or tell us to stop sending news — write to privacy@oohlamahj.com from the address involved, or from the device in question. We'll answer within 45 days.
Something wrong at a table
Report it from the app's menu, or write to abuse@oohlamahj.com. Voice and chat never reach our servers, which limits what we can verify — but every report is read.
Changes
When this policy changes materially, we'll update the date above and say so in the app before the change applies to you. September 4, 2026: added the on-device record of recent solo hands to what is stored (it is never sent anywhere). September 2, 2026: said plainly that an account will be asked for after the first few hands rather than "never needed"; described the voice relay (Cloudflare) used when two devices cannot connect directly, and added Cloudflare's connection helper; added the journal of hands and the hand counts to what is stored and synced; disclosed the signed-in yes/no and the friend-link tag in usage counting; named Render as the host. August 29, 2026: added the "Sharing a winning hand" section (keepsake pictures are hosted at a link for 90 days); disclosed that live-table state is safeguarded in our database (Supabase) while a table is open, and added Supabase to the list of services; described the single-use seat pass that moves your seat between your own devices. August 24, 2026: first published version.
Privacy · Terms · Support