Bam Good Time Desktop
Mahjong club, league & scoring
Only for Mac
Free · In‑App Purchases
The command center for running your mahjong club — built natively for Mac.
Bam Good Time puts your entire club operation on your Mac: events, leagues, scoring, member management, and analytics. Native macOS performance with a beautiful SwiftUI interface.
——— POWERFUL ADMIN TOOLS ———
◆ Events & Registration
Create events, series, and punch card packages. Track registrations, waitlists, and capacity in real time.
◆ League Management
Build leagues with rotation patterns. Enter scores round by round. Automatic standings calculation.
◆ Table Assignments
Drag-and-drop table seating. Manage player assignments across rounds.
◆ Member Directory
Full contact management with CSV import, SMS invitations, and email communications.
◆ Templates & Graphics
Create reusable event templates. Upload custom graphics for your club brand.
◆ Analytics Dashboard
Attendance trends, revenue tracking, and growth metrics at a glance.
◆ AI Assistant
Built-in chat assistant for quick admin questions and help.
——— FOR PLAYERS ———
◆ Browse and register for events
◆ View game history and league standings
◆ Track your rating across clubs
◆ Purchase series passes and punch cards
——— GET STARTED ———
Create your free club at bamgoodtime.com, then sign in here.
Free to download. 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 Lesson requests now open on the Mac.
Someone asks your club for a lesson and that request lands in Teaching. Until now you could see that it arrived and read the first two lines, and that was all. Now you can click it.
• Click any lesson request to read the whole message, not two lines of it.
• See their answers to your own signup questions, their email and their phone number in one place.
• Set the status to New, Contacted or Archived right from the request.
• Keep a private note on a lead — what you said, when you called, what to follow up on. Notes are shared with the website, so a note left on either one shows up on the other.
• Reach every request, not just the six most recent.
Also fixed: a couple of screens showed a raw timestamp instead of a date.
1.1.19 1d ago
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 the member's event history.
• Clearer steps when claiming a table at a venue club.
• 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.
1.1.18 3d ago
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:
• A linked punch card is now honored on a membership-only event.
1.1.17 3d ago
Fixes a bug that could lock the app up when you clicked. It was most likely on busy screens such as profile setup and score entry, where a single click could stop the whole window responding until the app was restarted.
1.1.16 Aug 14
Tournaments are the headline in this release.
• Tournaments now have their own section in the admin menu, with a dedicated setup wizard and edit view instead of the general event form.
• Seat winds show at every table, and a tournament can use the fixed table rotation so players move the same way each round.
• You can seat a stand-in into an occupied seat, or add one mid-event from the pairings screen, without rebuilding the round.
• A seat can be cancelled and refunded during registration. Refund choices are owner-only, and a refund that did not go through can be retried.
• Discount codes are accepted at tournament checkout in the app.
• Table cards and pairing sheets can be printed or exported, and the entrants export now matches what the web produces.
• Registration answers appear in the tournament roster and in both exports, with the check-in file labeling its answer columns the same way.
• Templates and series carry authored tournament settings through instead of losing them.
Clubs can now set a service fee, and it is disclosed on every price a player sees: registrations, packages, tournaments, leagues and venue bookings.
Seating a member at a table by hand offers their pass rather than charging them again, and deactivating a table that still has bookings asks first.
If you play in more than one league or scramble at the same club, the app now opens the one you are actually playing rather than a season that has not started yet.
Asking for a new login code no longer cancels the code already sitting in your inbox.
Plus fixes to leagues, scrambles, chat, phone verification, sales tax and check-in.
1.1.15 Aug 14
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 Aug 9
Fixes across events, leagues and scoring.
- Scores your players entered are no longer overwritten or deleted from the Events surface or either score grid.
- A no-show no longer holds a seat.
- An abandoned checkout no longer reads as a refund.
- A member whose membership already covers an event is no longer sent to a pay page.
- Admins can correct a Scramble skill tier.
- Reporting a problem now says the report was saved rather than leaving you guessing.
- If a login code may not reach your inbox, the code screen says so instead of leaving you waiting.
- The save-confirmation wording now matches the iPhone, the studio-bonus caption no longer promises standings will not move, Discount codes are no longer sold as a paid feature, and the Club Details hint no longer prints a club URL that is not a real page.
1.1.13 Aug 3
Scramble on the Mac.
Challenges read clearly across the admin surface, admin cancel is offered only when the server will accept it, and the chat section names challenges correctly.
Email your league from the Mac.
League admins can message league members from the macOS admin surface, and saving a round now asks before it rewrites scores you already recorded.
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 quote a friend's seat at full price with the real amount owed.
Venue day management.
Close the day you are actually looking at instead of only today, watch the day grid refresh afterward, and get the real reason when a reservation is refused.
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 chat links, tournament privacy, event filters, 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.
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 dashboard. If your league is sold as a full series, members can find and join it from home instead of needing a direct link.
• 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.
• Every signup answer shows on the Attendees tab.
• The email graphic picker shows all of your graphics, not the first eight.
• Late-cancel fees and event trash are reachable again.
• A player who hides their identity stays hidden in the blocked-players list.
• You no longer see your own typing indicator in chat.
• The Registration Cancelled banner fires when a registration is actually cancelled.
• An unpaid gift card is no longer treated as valid.
1.1.11 Jul 27
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 22
See who is playing: open any Scramble challenge to view its full participant roster, right from the challenge card.
Notification reliability improvements.
1.1.6 Jul 17
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, walk-in seats are priced correctly, and Mark Paid matches the web app
• Leagues: standings recalculate after every completed league event
• Punch cards & passes: repurchase a depleted punch card; expired monthly passes no longer offer a rebuy
• Chat: member names display correctly, and you can add members when creating a channel
• Club switcher: always clickable, with a quick exit back to your club hub
• Leads: people who are already members no longer appear as leads
• Free plan now includes 5 events per month
1.1.5 Jul 16
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.4 Jul 15
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 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
• 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 focuses on Channel Chat correctness and adds Spotlight to your hub.
• Spotlight. Your hub now surfaces 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. Helpers no longer see buttons whose actions would be refused.
• Seating. The "you are not at a table" banner no longer appears when you are, in fact, seated.
1.1.1 Jul 10
Club chat comes to players. Members can now open their club's chat channels from the sidebar, see unread badges, and get notified about new messages according to their notification preferences. Admins can message an event host directly.
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. Email All opens the in-app composer instead of handing off to Mail, and the contacts email preview shows the real branded message. The Tables toolbar no longer clips on narrow windows.
1.1.0 Jul 9
Package purchases now collect required signup questions before checkout.
Monthly pass fixes: passes are matched to the events they actually cover, and bookings into a billing period after a scheduled cancellation are blocked.
Dark mode: the chat compose field and accent surfaces are readable again.
Table cards show full player names on their own line instead of truncating.
1.0.32 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.31 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.30 Jul 1
Venue table holds: hold tables for arriving members, then release them or convert them to registrations right from the day grid, with held slots clearly marked.
A new player Settings screen to manage email preferences, verify a phone number, replay the welcome tour, and manage your account.
Monthly-pass session details now reflect your current billing period, plus reliability improvements throughout.
1.0.29 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.
- Save and Next buttons now stay pinned at the bottom of sheets so they are always reachable.
- Stability and polish updates.
1.0.28 Jun 25
Lesson requests now open on the Mac.
Someone asks your club for a lesson and that request lands in Teaching. Until now you could see that it arrived and read the first two lines, and that was all. Now you can click it.
• Click any lesson request to read the whole message, not two lines of it.
• See their answers to your own signup questions, their email and their phone number in one place.
• Set the status to New, Contacted or Archived right from the request.
• Keep a private note on a lead — what you said, when you called, what to follow up on. Notes are shared with the website, so a note left on either one shows up on the other.
• Reach every request, not just the six most recent.
Also fixed: a couple of screens showed a raw timestamp instead of a date.
more Version 1.1.19 1d ago
Data Linked to You The following data may be collected and linked to your identity: