Mahjic Mahjong: Club & League
Event Scoring & Registration
Free · In‑App Purchases
The #1 app for running American Mahjong clubs, leagues, and events.
Whether you organize weekly games for 12 players or monthly tournaments for 200, Mahjic Mahjong gives you everything you need — registration, scoring, leagues, and member management — right from your phone.
Used by club organizers across the US and Canada.
——— FOR ORGANIZERS ———
◆ Events & Registration
Create events in seconds. Players register, join waitlists, and check in with a tap. QR code check-in available.
◆ Scoring & Leagues
Enter scores round by round. Track league standings with automatic rotation patterns and rankings.
◆ Member Management
Import contacts via CSV. Send SMS and email invitations. Manage your entire roster and directory.
◆ Series & Punch Cards
Sell multi-event packages. Players buy once, RSVP to each session. Punch cards for flexible attendance.
◆ Analytics & Payments
See attendance trends, revenue reports, and growth metrics. Accept payments through Stripe.
——— FOR PLAYERS ———
◆ Browse events and register in seconds
◆ Purchase series passes and punch cards
◆ Check in from your phone — no paper needed
◆ View game history and league standings
◆ Manage your profile across multiple clubs
——— GET STARTED ———
1. Create your free club at bamgoodtime.com
2. Download Mahjic Mahjong
3. Sign in and start managing
Free to download. Club plans from $19/month unlock unlimited events, analytics, and more.
——— LEGAL ———
Terms of Use: https://bamgoodtime.com/terms
Privacy Policy: https://mahjic.org/privacy
Standard Apple EULA: https://www.apple.com/legal/internet-services/itunes/dev/stdeula/
more This app has saved my wife an enormous amount of time and frustration and enable her to enjoy getting people together to play this wonderful game.
This app has saved my wife an enormous amount of time and frustration and enable her to enjoy getting people together to play this wonderful game.
Leagues take a big step forward in this release.
• Buying a season now puts you in the league automatically. Admins no longer keep a separate roster by hand, and a paid-up member can no longer be missing from the seating rotation.
• The league roster is one list. It used to be two lists that could disagree with each other, which meant a member could be registered and still invisible.
• Score entry has a new bonus box, for clubs that run house rules worth extra points. It sits beside mahjongs, points and wall games, and it adds to points only.
• Clubs can credit a member who missed a night and sent a substitute, and can set a fee for someone who covers a seat.
• Substitutes play without their scores counting toward the member's season, so covering a night no longer distorts the standings.
Plus fixes to score saving, league setup and standings.
1.1.14 1d ago
Fix a match you already proposed.
Got the date wrong? You can now change the date, time or venue of a match you proposed, straight from the match screen. It works even after people have joined: before you save, the screen tells you exactly who will be notified, and everyone on the match is told what changed.
Also in this update:
- The match date and time now look like the controls they are, so they are easier to find when you propose a match.
- Withdrawing from a match is reachable from the notification telling you it changed.
- Tapping a notification opens the right screen. Score confirmations and two other types previously opened nothing at all.
- Scores you entered yourself are no longer overwritten from the Events tab or the round grid.
- Rating one person at your table no longer stops you rating the rest.
- Open challenges whose date has passed drop off the browse list after a day instead of a week, so what is left is what is actually coming up.
- An abandoned checkout no longer reads as a refund.
- A member whose membership already covers an event is no longer asked to pay.
- Reporting a problem holds still while it sends, and tells you the report was saved.
- If a login code may not reach your inbox, the code screen now says so instead of leaving you waiting.
1.1.13 Aug 3
Scramble, end to end.
Your active matches now sit on the home screen, challenges are reachable from the league surface, and you can play another round straight from a finished match. The rules panel states the real rules, and tapping a challenge notification opens that challenge.
Email your league from your phone.
League admins can message league members from the iOS admin surface. Scoring rules appear on the screen where you enter scores, and you can edit scores on the confirm screen before you commit them.
Monthly or yearly memberships.
Choose the billing period when you build a membership, see which one each member holds, and count sessions against the real billing period.
Member pricing that adds up.
Set a member discount percent on the event form, show the member price on event detail, and tell players what they actually owe instead of the face price.
Recurring series repairs.
Add a missed date back into a series, keep add-ons intact when you edit a series or package, and see Free on a free event's roster instead of a stale price.
Follow a club.
Follow clubs from club home and discovery, and add an About blurb to your club settings.
Plus dozens of smaller fixes across check-in, chat links, push notifications, seating privacy, discounts and the event wizard.
1.1.12 Aug 2
League signup questions. Ask your players what you need to know before they join a league — including a phone field — and see every answer on the admin roster.
Gift cards now appear in your activity. They show on the Recent Activity card and in the full Activity Log alongside registrations and package purchases.
Class series just got easier to run. Remove a single event from a series, page through a full activity log, and build a monthly pass that includes zero sessions for members who just want the membership.
Fixes:
• Series and passes now appear on the player home. If your league is sold as a full series, members can find and join it from home instead of needing a direct link.
• A host on their own can seat a casual table.
• A checked-in guest stays visible to whoever paid for them, and no longer shows a Cancel button that could not work.
• Check-in tells you why it declined instead of failing silently.
• A player who hides their identity now stays hidden everywhere their name is shown.
• Blocking a player works as intended.
• Late-cancel fees and event trash are reachable again.
• Punching a series pass no longer loses your signup answers, and can't be blocked by a question that won't render.
• An unpaid gift card is no longer treated as valid.
1.1.11 Jul 28
Book a whole table in one go — reserve every seat at your club's venue as a single booking, with one price and one confirmation.
Scan once, land in the right game: a single join scanner now handles casual tables, league nights, and scrambles, and Start Table takes you straight into a match that's ready to begin.
Scoring fixes: blank score cells are no longer saved as zeros, so a table that hasn't played stays empty instead of creating phantom rows in your standings. Corrections that lower a score to zero now save correctly, and you'll be told if any player's score doesn't go through.
Also includes venue booking and league reliability improvements.
1.1.10 Jul 25
Tournaments arrive in this update: register with signup questions, pay your entry with a gift card, join a paid tournament's waitlist, follow your table, tablemates, and standings live during play, and see your tournament history on your profile. Admins can export standings and payout PDFs. Also new: league chat and match chat, a late-cancellation report for admins, and club purchases shown in the activity feed. Plus many fixes — free events no longer ask for a payment method, and lists load more reliably for large clubs.
1.1.9 Jul 23
Sign-in stability: the app no longer signs you out unexpectedly — a bug that could log you out every few days is fixed, and a dropped internet connection no longer signs you out either. Members and admin lists now load reliably for large clubs. Plus: event add-ons are available when creating an event on paid plans, and waitlist emails now reach the right recipients.
1.1.8 Jul 22
This update brings polish and reliability across clubs, events, and your profile.
• Profile photos — pan, zoom, and re-center your photo, with automatic face-centering to start.
• Sign up friends — pick friends to register alongside you when a host asks.
• Event editor — the admin event form is now organized into clean tabs, and Save jumps straight to any field that needs your attention.
• Verification — a clear "Finish verifying" prompt for paid members, plus the verified badge in more places.
• Roster management — see players who declined and re-enroll them in a tap.
• Venue booking — date pickers now honor each club's real booking window.
• Plus a batch of stability fixes across chat, scores, packages, and contacts.
1.1.7 Jul 21
Series events get more flexible: when creating a series, you can now choose whether buyers are enrolled in every session automatically, series pricing shows on series-only sessions, and "Can't Attend" no longer appears on opt-in series.
Also in this release:
• Venue mode: table cards show who's seated, and walk-in seats are now priced and settled correctly
• Leagues: standings recalculate after every completed league event
• Punch cards: members can repurchase a depleted punch card
• Chat: member names display correctly, and you can add members when creating a channel
• Club switcher: always tappable, with a quick exit back to your club hub
• Scramble: the challenge time option is now on by default
• Leads: people who are already members no longer appear as leads
• Free plan now includes 5 events per month
1.1.6 Jul 17
Tournament brackets are here! Run single- and double-elimination tournaments with a visual bracket board — seed players, advance winners, and enter scores right from the bracket. Made a mistake? Admins can revert results and the bracket updates automatically.
Also in this release:
• Fixed a bug where toggling a member's membership status didn't save
• Bug fixes and performance improvements
1.1.5 Jul 15
Bug fixes:
- Screenshots attached to in-app problem reports now capture your screen correctly.
- Challenge skill levels now show as "All Levels" instead of a second "Open" badge.
1.1.4 Jul 13
Bug fixes and improvements for club admins:
- The Pending Payments screen now also shows package purchases awaiting Venmo or cash payment, with a Mark Paid button for each.
- Marking a season package paid enrolls the player in all season events automatically.
1.1.3 Jul 12
Tournament scoring fixes, Scramble improvements, and new club management tools.
• Tournament scoring: tables without entered scores no longer record as zeros, and round score submissions are more reliable
• Tournament Control Center: action buttons stay visible and reachable
• The Scramble: smoother match starts, live challenge updates, and re-show your QR code anytime
• Leagues: add a description to your league so players know what to expect
• League scoring: score values can now be negative
• Event series: schedule two events on the same day, each with its own start time
• Packages: set purchase limits and choose a billing start date
• Venues: per-table schedules and pass redemption
• Add-ons: mark items as taxable
• Contacts: phone numbers stay in sync across your club
• Plus stability improvements and bug fixes
1.1.2 Jul 11
This release fixes several things you told us about, and adds Spotlight to your hub.
• Join a Table. The tab could not be closed on iPhone. It closes now. Thank you to everyone who reported this.
• Spotlight. Your hub and player dashboard now surface a featured card so you can see what is happening at a glance.
• Chat. Your own messages and reactions are now recognized as yours, so reactions toggle correctly and you are no longer offered as a mention candidate for yourself.
• Moderation. Remove and Mute controls now appear only for club admins and channel moderators, matching what the server actually permits.
• The Scramble. Fixed identity checks that could show the wrong state on your own row.
1.1.1 Jul 11
Club chat comes to players. Open your club's chat channels from the Chat tab, see unread badges, and get notified about new messages. The General channel opens by default.
Event tables: remove a single table from an event, with a warning first if that table already has scores.
Fixes: private club events now appear in the member event list. Check-in from an event page is more reliable. The contacts email preview shows the real branded message, and the event Tables controls no longer overflow on smaller iPhones.
1.1.0 Jul 9
League scoring fixes: every Scramble match now counts toward your weekly best scores, and scores can no longer overwrite an earlier match.
Table game fixes: players are no longer stuck on the game screen when a game ends, the Done button no longer freezes after submitting scores, and non-hosts get a Leave option during play.
League registration is more reliable, including after an interrupted signup.
1.0.42 Jul 7
This update rolls up a wide set of fixes and improvements:
• Faster, smoother in-app chat
• Leagues & The Scramble: scoring, standings, and roster fixes
• Guest passes, gift cards, and event registration polish
• CSV contact import improvements
• Various bug fixes and stability improvements
Thanks for using Mahjic!
1.0.41 Jul 4
This update improves score entry for club and league admins:
- Save and finalize scores anytime. We removed an old rule that blocked saving until a table's points balanced to zero, which does not fit cumulative league scoring.
- An event can now be finalized even when a player finishes with a score of zero.
Thank you for the feedback that helped us fix these.
1.0.40 Jul 1
Venue management comes to iPhone and iPad. Club admins can now run open-play sessions on the go: check players in, hold tables for arriving members, manage tables, and close days, all from your device.
Players get a new Settings screen to manage email preferences, verify a phone number, replay the welcome tour, and manage their account.
Monthly-pass session details now reflect your current billing period, plus reliability improvements throughout.
1.0.39 Jun 28
What's new in this release:
- Pending package and series signups now appear on the event check-in screen.
- Abandoned checkouts no longer clutter the Pending Signups card.
- You'll get a heads up when you schedule an event that overlaps another at the same venue.
- You can now add package add-ons during checkout.
- Fixed oversized member photos that could overflow the table seating cards.
- On iPad, the floating menu no longer covers the Edit button on event details.
- Save and Next buttons now stay pinned at the bottom of sheets so they are always reachable.
- Stability and polish updates.
1.0.38 Jun 24
What's new in this release:
- Reserve seats for guests when you book a venue table.
- Tap a venue slot to see who is seated, with member vs drop-in tags.
- Add your birthday in Edit Profile, and admins can see member birthdays in the member sheet.
- Clubs can now hide registration counts on event cards and detail pages.
- Standings show your first name and last initial for a bit more privacy.
- Card payment now appears as an option on honor-mode series and package purchases.
- Admins can set a per-club manual sales tax rate.
- Complete Profile now prefills from the info we already have on file.
- Stability and polish updates.
1.0.37 Jun 22
What's new in this release:
- New privacy controls: pick a screen name or hide your identity in club leaderboards and standings.
- Admins can set a club-wide privacy default and toggle public standings per league.
- Punch-card payment option when adding registrations, plus manual punch adjustment in package admin.
- Per-event NMJL reminder toggle and a sales-tax toggle for clubs that collect it.
- Honor-payment flow improvements: cleaner error surfaces and safer cancels for checked-in members.
- Avatar fix so profile photos render at the right size everywhere.
- Stability: crash fixes in series scheduling and signup questions, plus small polish updates.
1.0.36 Jun 16
Bug fix:
- Fixed an issue where the Yes/No buttons on event signup questions (like "Can you bring a set of tiles?") would not accept your answer, blocking registration. Tap Yes or No, and the app now records your choice correctly.
- Various stability improvements.
1.0.35 Jun 10
Bug fix: the Yes/No questions during event registration now correctly save your answer. Previously the buttons looked selected but the form would still ask you to answer them.
1.0.34 Jun 9
Guest passes for paid members are now available on iPhone and iPad.
• See your monthly guest-pass allowance and tap "Invite a Guest" to mint a new code on the spot.
• Codes your club admin assigns to you show up under "Assigned passes" with one-tap copy and share.
Reply to Order Up emails directly inside the app. Tap the link, write your reply, send.
Reliability fix for player photo uploads.
1.0.33 Jun 7
Leagues take a big step forward in this release.
• Buying a season now puts you in the league automatically. Admins no longer keep a separate roster by hand, and a paid-up member can no longer be missing from the seating rotation.
• The league roster is one list. It used to be two lists that could disagree with each other, which meant a member could be registered and still invisible.
• Score entry has a new bonus box, for clubs that run house rules worth extra points. It sits beside mahjongs, points and wall games, and it adds to points only.
• Clubs can credit a member who missed a night and sent a substitute, and can set a fee for someone who covers a seat.
• Substitutes play without their scores counting toward the member's season, so covering a night no longer distorts the standings.
Plus fixes to score saving, league setup and standings.
more Version 1.1.14 1d ago
Data Linked to You The following data may be collected and linked to your identity: