Bam Good Time: Mahjong Club
Organizer & league scoring
Free · In‑App Purchases
Bam Good Time is the American mahjong app for club organizers and the players who join them. Run your mahjong club, league and events from your phone: sign-ups, waitlists, reminders, check-in, league scores and standings. More than 400 clubs run their games on Bam Good Time.
HOW TO START A MAHJONG CLUB
Start a mahjong club free in minutes. Create your club right in the app: give it a name and a web address, pick a plan, and post your first game. The Free plan covers up to 5 events a month and 50 players. Every club gets its own page at yourclub.bamgoodtime.com that players can find on Google.
HOW TO ORGANIZE A MAHJONG GROUP
Organize your mahjong group: sign-ups, waitlists, reminders.
◆ Post a game or a weekly series and set how many seats it has. Players sign up from their phones.
◆ When a game is full, new sign-ups join the waitlist.
◆ Players get a reminder email the day before a game.
◆ Players check in at the door by scanning your club's QR code, or you check them in from a list.
◆ Seat tables automatically, sell series passes and punch cards, and email your players.
KEEP SCORE FOR YOUR MAHJONG LEAGUE
Bam Good Time keeps score for mahjong leagues and tournaments. It is not a hand-value calculator: each player's points are entered round by round, and the app does the rest.
◆ Enter scores round by round as the admin, or let each table enter its own scores from a phone and confirm them.
◆ Standings update automatically when a league night is finished.
◆ Run multi-round tournaments with automatic pairings.
◆ Every player carries a Mahjic Rating that follows them from club to club.
League management and tournaments come with the Pro plan.
FIND A MAHJONG GAME NEAR YOU
Find a mahjong game near you: use your location or a ZIP code to see the closest clubs and upcoming public games, nearest first. Or browse a directory of more than 1,600 clubs at bamgoodtime.com/clubs.
MORE FOR CLUB ADMINS
◆ Import members from a CSV file
◆ Attendance and revenue analytics
◆ Card payments through Stripe on paid plans
◆ A built-in assistant for quick admin questions
FOR PLAYERS
◆ Find games and register in seconds
◆ Join a waitlist when a game is full
◆ Check in from your phone, no paper needed
◆ See your game history and league standings
◆ Track your Mahjic Rating across clubs
◆ Buy series passes and punch cards
PRICING
Free to download, with a Free plan for small clubs. Club plans from $19/month.
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.
So easy to sign up and find events. Even in towns I am visiting!!
So easy to sign up and find events. Even in towns I am visiting!!
Fixes a crash when club admins swiped to cancel a registration or delete an item, and a blank screen on the cancel confirmation.
Tournaments can run Siamese rounds, with 2 players at each table.
Clubs can let paid members register early. Members see when they can register, and everyone else sees when registration opens.
Admins can choose who can see a league, and a hidden league stays off the join lists.
The club Owner can see the money an event took in, right on the event.
A package can show the day it goes on sale, and a series shows its price for each membership tier.
On events that are free for members, a member's seat stays free when the friend she brings uses one of her guest passes.
Scramble challenges can set the number of rounds and the pace, and a rated Scramble match shows your rating change in Game History.
Admins can hide a table from players, and can add a payment note when adding people as paid.
Fixes: Edit Profile works when you open Profile from Home, the Scores grid can unlock a locked table, Add Table picks the lowest open table number, a sub already picked is not offered for a second seat, the email message box keeps its first line, and the cancel confirmation says when a card payment will not be refunded.
1.1.43 23h ago
At a tournament, the Your Table card now shows where you sit next round, for example "Next, Round 3: Table 7, West seat, unless your director moves you."
Home shows your club's featured events.
Admins can see the emails a member was sent, and how many people opened and clicked each email they sent.
A gift card can pay for a seat you were moved into from the waitlist, or a seat you are holding to pay later.
A seat paid in full no longer says Payment pending.
The activity feed says when a seat was released because it was not paid in time.
Fixes: saving an event without changing its size no longer moves people in from the waitlist, and finalizing a league night again no longer moves the rotation a second time.
1.1.42 4d ago
Admins can duplicate a league right from the iPhone.
Before you save a card to wait for a seat, the app spells out when you would be moved in and charged, and asks you to agree.
A membership's included free lesson now works on lessons that are sold individually.
The check-in list makes room for more names at large text sizes.
A member's event history shows the add-ons they bought.
On events where you pick one seat or a table of 4, the price and fee note sit with your table choice.
Fixes: long signup questions no longer crowd the roster, the guest pass box says how many you are using, a friend covered by a pass is no longer told she pays full price, a membership can't be deleted while someone still holds it, the renewal sheet says when a link stops working, and the note on a blocked table says players can see it.
1.1.41 5d ago
Get verified: from your profile, Mahjic Verified gives you a blue check and a place on the national leaderboard after a quick ID check.
On a group-priced event, choose one seat or your whole table of 4.
Tournament directors can move to the next round while some tables are still being scored.
At a club that seats by table, one tap books a single seat, and a booked table has its own "Send a friend this table" link.
Clubs can take donations: pick an amount when you register, and admins see every gift.
Punch cards can end on a date, and buyers see it.
Admins can lock tables in a seating chart so a new draw keeps them.
Chat: open a photo full screen, save or share it, and chat admins can add people.
Event and lesson times show when they end.
Fixes: a seat covered by a membership says so, events on the same day list by start time, a bounced address says it bounced, and Quick Add says when someone is already registered or waitlisted.
1.1.40 6d ago
Admins can move a table booking to another day, with a preview of what changes.
A party of 2 to 4 can leave the club a note when booking, under the club's own question.
The event wizard sets the check-in window, and templates carry check-in, drop-ins and late-cancel terms.
The Events shelf shows an event your club features.
On a waitlist, you can see and change the card that will be charged.
Admins see money in, line by line, on the Revenue card, and a member's table sessions under Holdings.
If the connection drops while you pay or cancel, the app says it can't confirm what happened and where to check, instead of offering to try again.
Fixes: a member's email and phone can be tapped and copied, a free event shows its cancellation deadline and late-cancel fee, and the event sheet on Home has a Close button.
1.1.39 Oct 20
A player can leave the club a note when booking, and admins see it on the booking.
Admins can refund part of a package payment, or part of a card membership by the month.
Table-fill alerts have an on and off switch on your profile, and admins can set it for a member.
Scramble settings have a weekly recap email switch.
A started table with no scores can be voided from match review.
A punch card can join a full event's waitlist or pay for an unpaid card seat.
Finished chats fold into an Archived section at the bottom of the chat list.
Fixes: a series night shows the series price instead of Free, guest-pass counts say "this year" for a yearly membership, and the help button no longer covers Add phone number.
1.1.38 Oct 16
Clubs can set a group price, and a group of two that qualifies pays it.
A series can be sold one night at a time.
When booking a table, How long? books back-to-back sittings as one longer stay.
Cancelling a seat now offers Pick another date, and an admin moving an event can choose which players move.
Punch cards can cover table time, and a pass can be for tables only.
Admins can add a note when marking a seat paid, and a discount code can be worth $0 just for tracking.
Fixes: a player with no name shows their email instead of Unknown, your profile lists My Clubs, and cancelling a seat uses your club's own cancellation window.
1.1.37 Oct 10
Tournaments: score-only events score by Game 1-4, players can call the director and see standings, and seat numbers show at the door.
Players can record dead hands on the score sheet, and admins can enter them when correcting a match or fix one score without voiding the night.
Your event page shows any friend seats you still owe, and a party of two can put a guest on a guest pass.
A Square or Shopify gift card can pay for a table.
The Players list sorts and searches by the skill level each row shows, and someone seated from Interested leaves that list right away.
Scramble standings show players the average with a Summary / Rating switch, and a match in Which scores counted opens its details.
A link in a challenge's venue can be tapped, and your own chat replies no longer leave a 1 on the Chat tab.
1.1.36 Oct 7
Tables: tap a time and its tables come into view, a full table no longer says the whole table is unavailable, and you can take a seat on your own beside Count me in.
Your booking shows who else is at your table.
Clubs can set the order their packages show in, and a sold-out series says Series Sold Out.
Admins can refund part of a payment, and refund screens show what the card was actually charged.
Standings can be set to Admins only, admins see a season Bonus column, and a night covered by a sub shows with a star.
A club you join on the website shows up when you come back to the app.
1.1.35 Oct 3
Reserve a Table asks how many are coming and finds your table, and you can send a friend the table after you book.
If your club takes guest passes at the table, open your booking in My Reservations and tap Add a guest.
Admins can add a note when they refund, move or waive a player, and see it on the roster.
Standings show the season week, and check-in lists sort by first or last name.
Fixed crashes and freezes in the table date picker, chat, the QR scanner, Find a Club, and event and guest editing.
A brief outage on our side no longer signs you out when you open the app.
1.1.34 Sep 30
Clubs can set a member price for a whole series, and members see that price before they buy.
When a series is full, members can join its waitlist instead of seeing Buy.
Admins can close or reopen registration for an event, and players see when it is closed.
On a league night, Mark Absent can ask your sub list to cover the seat.
Club owners can email the players on an attendance report.
Check-in screens can show the club's welcome message and a link to its rules.
Plus smaller fixes and clearer messages.
1.1.33 Sep 27
New for Tables: when a club offers it, tap "I'm interested" on a table time. If the table reaches 4 players by the club's cutoff, you're seated. If not, nothing is charged and no pass is used. You can Withdraw while you wait. A club's booking link now opens on its next open day.
New for tournaments: the Registration phase shows "Checked in X of Y" live as players check in at the door, with All, Checked in and Not yet filters and a name search. Close Registration says why it can't start, right beside the button. The check-in screen now says whose account is checking in.
New for events: a club can take payment outside the app with Other (pay elsewhere), and your seat shows the club's own instructions for paying.
For league admins: Invite Sub now offers members who never signed up for the night, declined or cancelled.
Also fixed: guest-pass Share sends your club's own link and name, Check In All and Undo All skip a row that only records who a sub covered for, and the feature list on the welcome screens wraps cleanly.
1.1.32 Sep 25
New for the Scramble: when your club turns on "Allow tables of three (Bob)", three players can start a match on the match day. A full table can also mark a player who never came as a no-show and play on as three. Clubs can set a no-show penalty, and the standings say when one applies. Share Challenge sends a link to your table while it has a free seat, and a No scores Scramble closes each match with We played.
New for events: an event can have two labelled prices, and you pick one when you sign up. Tap "I'm interested" to let the club know you'd like to come. A free event can say donations are welcome, and admins get sign-up QR codes for an event or the club's upcoming lists.
New for leagues and tournaments: choose how many nights or weeks count toward the standings, drag a name onto a seat to choose who sits East, and every member can see the nights that need a sub.
For admins: Holdings on the member sheet, change the day a pass expires, and register players who said they're interested. Hold a chat reaction to see who reacted.
Also fixed: the Check In All and Undo All counts, refund messages, dates that could show a day off, and many smaller wording fixes.
1.1.31 Sep 24
New: waive a seat. From the roster's payment menu, settle a player's seat at no charge and leave them exactly where they are, with no refund and no cancellation email. It works from the tournament console too.
New: settle a booked table seat with the member's monthly pass or punch card, right from the table's Mark Paid menu. If Mark Paid can't go through, the app now tells you why.
New: open any row in a league's standings to see where that player's season total came from, round by round. Follow Up After an Event, under Settings > Preferences, shows whether your thank-you email is on, when it sends, and what it says.
Table names you add on the web now show on your iPhone, and saving seating from the phone no longer erases them. Adding someone to one night of a class series tells you which series that night belongs to.
Also fixed: the event screen could crash for admins on some iPhones, and chat could freeze when you came back to the app. A club that hasn't finished Stripe setup now gets Continue Setup instead of a dashboard button that couldn't open. If an event's extras fail to load, registration says so and offers a retry instead of hiding them. A player sees the cancellation deadline that will actually be enforced, and a member who can't attend one date is no longer shown as cancelled.
1.1.30 Sep 14
Guest passes now read correctly everywhere. A seat that a guest pass covers no longer appears in what a member is asked to pay, on the registration screen, the roster, or the activity feed, and a declined pass seat stops naming a payment method nobody used.
New: the Floor view on iPhone. See your room drawn the way the tables actually sit in it, read who is at each table, drag a table to rearrange the room, and press and hold a seated player to move them to another table.
You can now move a player into an event directly from the venue day, with a preview before anything changes.
Also fixed: a link in one of our emails that the app could not open used to leave you looking at nothing. Those now open the web page instead, including the "update your card" link sent when a membership payment fails.
1.1.29 Sep 11
Your club's day at the tables, on one screen.
TABLES AND VENUES
- A row of sittings under the date picker shows every hour of the day: open play, a named night, an event that has the room, or a closed hour, with the price for you on each card.
- Tap a sitting and the room below shows only its tables, so you are picking a seat at an hour you already chose.
- A table held for an event says so, and cannot be booked by mistake.
- The Reserve button rides a bar at the bottom of the screen, in reach without scrolling back up.
- The tables card on your home screen shows the same hours, and what a seat there costs you.
- A club that seats you at the desk now says so, instead of offering a booking the app cannot make.
FOR CLUB ADMINS
- Move a player off a table booking into an open play at the same hour, one person or a whole table at once, with a preview of what changes before you confirm.
- Turning tables off now tells you who still holds a booking and offers to move them first, instead of refusing with nothing you can do next.
- The week view shows each day's events and which tables they hold.
FIXES
- A free event no longer shows a price it will never collect.
1.1.28 Sep 10
This update fixes the league schedule losing your place, and tells you whose phone is showing the join code.
LEAGUES
- Closing a match leaves you where you were in the schedule, instead of jumping back to the top of the month.
- Pull to refresh keeps your place too, on the league night and Mobile League screens.
- A player seated by an admin can see their own league again.
- No more paid checkout offered for a seat you already hold.
MATCHES
- The scanner names who tapped Start Match and is holding the join code, so nobody has to guess whose phone to look at.
MEMBERSHIPS
- Guest passes can be granted once a year, counted from the join date.
- The Memberships caption no longer breaks mid-word.
ELSEWHERE
- Standings tables say what their two numbers mean.
- The events picker offers draft dates.
- Bulk trash stops promising a restore it cannot deliver.
1.1.27 Sep 7
This update brings membership passes to the phone and tidies up wording across the club screens.
MEMBERSHIPS
- A membership card shows exactly what the pass includes.
- A pass that only covers certain hours says so, on both sides of the door.
- An all-day pass stops printing an hours line it does not need.
CLUB ADMIN
- Adding someone to an event now has an "Email this person" switch, so you can seat a player quietly.
- A club at its player cap sees a sentence explaining it, not an error code.
- The roster, the pickers and the import screens all say "Players" now.
FEEDBACK
- We ask how things are going once in a while, and only of people who have been to a few sessions.
- The feedback sheet respects Reduce Motion, and its stars are legible in both light and dark.
1.1.26 Sep 6
The sky-blue look from the website is here too now, on every screen.
• If your club wrote its own note about how to pay, you read your club's own words on a seat you still owe for, instead of a general one.
• Clubs on a paid plan can choose their page colour, and the app now shows the one they picked.
• Search finds a name with an apostrophe in it, so O'Brien turns up.
• Send code appears the moment you finish typing your phone number, not after the whole form.
• Cancelling a registration at a club you have not joined works properly.
1.1.25 Sep 5
MONEY AND REPORTING
• Pick any month, or any span of dates, and see what your club took in over it.
• Read what Stripe actually collected for that period, beside your own totals.
• Exported revenue columns are labelled "est." the way the website's are.
OPEN PLAY TABLES
• "Tables" is now "Open Play Tables", matching the website and the Mac.
• The door can spend a punch from a punch card, and add a guest beside the seat.
• You can set a day price and the date it stops applying.
• A punch card row names the club the card belongs to.
LEAGUES
• A table that is one scan short can still take its scores.
CLUB ADMIN
• Pending Payments shows the Venmo code on a package purchase, so a transfer can be matched to the buyer who sent it.
• Event rosters say who is a club member.
• Importing contacts counts contacts, not spreadsheet rows.
SIGNING IN
• A failed sign-in says whether the network was unreachable or the connection was blocked.
1.1.24 Sep 2
This update fixes a crash when opening an event.
FIXED
- Opening an event could close the app straight away. It no longer does.
- Undoing a no-show works again, and tells you why when it cannot.
- A cancelled series stops showing dates it no longer has.
- The check-in screens say who is a member.
LEAGUES AND SCRAMBLE
- Use Freebie stays hidden until the season starts.
- The week card stops inviting new rounds once the season has ended.
- The organizer bonus line explains the rematch rule.
- A match thread links back to its match.
CLUB ADMIN
- Member reports name the removals that the cancellation count leaves out.
- Removing a member from an event is free unless you say otherwise.
- The freebie confirm screen tells you it cannot be undone.
1.1.23 Sep 1
A new look, and a lot more you can do from your phone.
THE NEW LOOK
Every screen has moved to a new colour scheme and a new typeface. Nothing was moved and nothing was removed. Bold Text and larger type sizes work correctly again throughout the app.
LEAGUES AND STANDINGS
- Withdraw a player from a season without leaving your phone.
- The pending-match line now tells you whether the match is waiting on you.
- The Mahjongs column explains what its two numbers mean.
TABLES AND VENUES
- Refund a table booking yourself.
- Print a door QR code for check-in. Every club can do this now, not only clubs that have tables set up.
- The waitlist banner no longer covers the table list.
PACKAGES AND SERIES
- Buyers see a minimum commitment before they pay.
- You are warned before a series charges someone for a date they have already paid for.
- Creating a series now holds the room on every night it just booked.
- A lesson date sold through a series shows the series price instead of Free.
- A seat paid outside the app is labelled External rather than given a figure we worked out ourselves.
EVENTS AND REGISTRATION
- Signup answers now appear on the Attendees tab.
- The event email screen counts how many people it will actually reach.
- Registering for a public event puts you in the club that runs it.
EVERYTHING ELSE
- A chat message that fails to send stays in the box instead of vanishing.
- Backing out of an event link no longer leaves a spinner on screen.
- A web address a club puts in a signup question is now a link you can tap.
- Many smaller fixes to scoring, check-in and profile setup.
1.1.22 Aug 31
The Complete Your Profile screen now says what it is waiting for. If Continue is not ready yet, the missing items are named directly above it, together with the button that sends your phone code, instead of below where the keyboard could hide them. A button that is not ready to be tapped now looks that way rather than appearing active.
1.1.21 Aug 26
A month at a time, and lesson requests on your phone.
Your events screens now open as a list or as a month grid — tap the toggle to switch. Drafts look like drafts, you land on today, and your phone's calendar can subscribe to your club's schedule so new nights show up on their own.
• Events: switch between List and Calendar on both the player and the admin screen.
• Subscribe your calendar to the club schedule, or export a single night.
• Lesson requests open properly now — read the whole message, see their answers, email and phone in one place, set the status, and keep a private note the website shares.
• Open play: say you are playing your Scramble match here, and see which open play a match is at.
• Passes and add-ons: order the $5 lunch against a punch card, and restart a lapsed monthly pass from the app.
• Admins can comp a seat or a pass, correct a member's email, record a match played on paper, and add someone to a league from the phone.
Fixed: tapping a notification opens the right screen — five kinds went nowhere. The League schedule card opens on today rather than yesterday. Table-card names no longer truncate to "Debor ah F...". Series and template prices stop resetting when single-night sales are switched off. Times read on your club's clock instead of Eastern. A required friend question no longer locks out a member coming alone.
The app is also easier to read: it grows with your text size, honours Reduce Motion, and every colour on it has been re-measured for contrast.
1.1.20 Aug 25
Same app, new name. We're now Bam Good Time, the name of the club site you already sign in to. Nothing else moves: same login, same club, same data.
Also in this update:
• If your club asks for a phone number before you book, the app now explains why and lets you add one, instead of showing an error.
• On league night, a substitute keeps the seat and the standing of the player they replace.
• A refunded seat now says so in your event history.
• Scanning a match QR code opens that match.
• Club colors are checked for readability, so text stays legible whatever color your club picks.
• Add a player to a league by name, with no email address needed.
• A linked punch card is honored on a membership-only event.
1.1.18 Aug 19
Fixes a crash when club admins swiped to cancel a registration or delete an item, and a blank screen on the cancel confirmation.
Tournaments can run Siamese rounds, with 2 players at each table.
Clubs can let paid members register early. Members see when they can register, and everyone else sees when registration opens.
Admins can choose who can see a league, and a hidden league stays off the join lists.
The club Owner can see the money an event took in, right on the event.
A package can show the day it goes on sale, and a series shows its price for each membership tier.
On events that are free for members, a member's seat stays free when the friend she brings uses one of her guest passes.
Scramble challenges can set the number of rounds and the pace, and a rated Scramble match shows your rating change in Game History.
Admins can hide a table from players, and can add a payment note when adding people as paid.
Fixes: Edit Profile works when you open Profile from Home, the Scores grid can unlock a locked table, Add Table picks the lowest open table number, a sub already picked is not offered for a second seat, the email message box keeps its first line, and the cancel confirmation says when a card payment will not be refunded.
more Version 1.1.43 23h ago
Data Linked to You The following data may be collected and linked to your identity: