The website and shop
Six-step sign-up, online trial class, payment and aid vouchers, then the club shop.
A Muay Thai and MMA club that signs people up, collects payments and takes attendance with three connected tools.
Visit the club's website →




Eight groups, from children to adults, about ten coaches and three volunteer managers who all have a job on the side. Sign-up was a paper form signed by hand and kept in a binder.
Three tools on a single database. The club's rules were written once, then reused everywhere.
Six-step sign-up, online trial class, payment and aid vouchers, then the club shop.
Schedule, class booking, membership and instalments, aid status, documents, shop. Coaches take attendance and report an incident from it.
Members, validation of payments and aid vouchers, cheques to deposit, reminders, refunds, shop and stock, a PDF payments report. The club sets its own payment methods, instalments and discounts.
Registration opened at the end of August, directly online.
A tool this size does not ship right the first time. Here are six mistakes found after launch, with their cause. None came from a lack of testing on paper. They came from what real families really do.
People asked for a code, then asked again within the minute. One person logged in three times in fourteen minutes without ever reaching their account.
The link pointed to the wrong form. Nobody reported it, I saw it while reading the login logs.
Teenagers who wanted to sign up on their own did not finish.
The app assumed a teenager has no email address. That was my mistake, fixed the day I saw it.
In one week, many accounts were created without a single registration being started.
These people were undecided, and the page only offered a year-long commitment. I added the trial class next to it, then an email after the trial. People signed up by clicking that email.
The money left the cash box and the instalment stayed marked as paid.
The refund was recorded nowhere. It is now logged, and the amount collected at the desk is calculated instead of typed.
I had chosen to sign people up to classes by default, because I knew they would not do it themselves. The club wanted the opposite. We did it, almost nobody clicked.
Family behaviour cannot be guessed. We went back to the list for children, and the choice was made on numbers.
A partial cash payment, an amount rounded above what was asked, three cheques handed over at once, a voucher worth a different amount than planned.
I had coded money the way it should work. I added instalment postponement, exceptional rates, overpayment and discounts applied afterwards.
Next.js for the site and back-office, React Native with Expo for the iOS and Android app, Supabase for the database and server functions, Stripe for card payments and refunds. Frequent releases, many of them after launch, while the club was using it.