Turning 'are you free?' into a paid booking, automatically
A boutique gym (anonymized) replaced LINE chat back-and-forth with a booking that takes a PromptPay deposit before the slot is held.
- 18:00Evening YogaCoach May3 seats left
- 19:30PilatesCoach Fah5 seats left
- 07:00Muay Thai FitCoach TonFull
The problem
“Half my day is answering 'are you free Saturday?' on LINE, and people still no-show after I hold the slot. I want them to commit before I block the time.”
Who it is for
Owner-operated gyms, pilates and yoga studios, small group-class spaces: anywhere the owner is also the coach, the receptionist, and the one chasing deposits. Built for a single location first, with room to add coaches later.
Scope of work
I built the smallest thing that actually changes her day: a booking flow that holds nothing until money moves.
- Class schedule with capacity per slot, editable from the owner's phone
- PromptPay deposit collected at booking; the slot is only held once it clears
- Automatic LINE reminder the day before, with a one-tap way to cancel inside the window
- A simple bilingual booking page that works on the phones members actually use
- An owner view of who is coming, who paid, and who cancelled
What you own at hand-off
- The full codebase, in the gym's own repository
- Hosting, domain, and the PromptPay and LINE accounts set up in the gym's name
- A plain-language runbook: how to add a class, refund a deposit, change reminder timing
- A short handover call, recorded, so the owner can rewatch instead of re-asking
Package tiers
Essential
For
One location, one calendar, deposits and reminders working end to end.
Includes
- Single-location class schedule
- PromptPay deposit at booking
- Day-before LINE reminder
Studio
For
Multiple coaches and recurring class series, plus a public schedule page.
Includes
- Everything in Essential
- Per-coach calendars and recurring series
- Public bilingual schedule page
Signature
For
Packages, memberships, and the reporting an owner needs to plan ahead.
Includes
- Everything in Studio
- Class packs and memberships
- Attendance and revenue reporting
Timeline & phases
Map
A short first week
I sat with the owner and traced one real booking, from the first LINE message to the no-show, to find where money should change hands.
A one-page scope: the exact flow, the deposit rule, and what we deliberately leave out.
Shape
Inside the same fortnight
I designed the booking screen around the smallest number of taps a tired member would tolerate on a phone.
Clickable screens the owner approved before any backend was built.
Make
The build weeks
I built the booking, the deposit, and the reminder as one tested path, not three features bolted together.
A working booking on a real test number, deposits landing in a real PromptPay account.
Prove
A focused week
We ran the gym's own members through it for a week and watched where anyone hesitated.
A short list of fixes from real use, all closed before launch.
Hand-off
The final days
I moved every account into the gym's name and walked the owner through running it without me.
The keys: code, hosting, accounts, and a runbook in plain Thai and English.
How pricing works
- Quoted per project after a short scope call. You see the full number before any money moves.
- Payment is phased against the build: a deposit to start, a milestone at a working booking, the balance at hand-off.
- Fixed scope, fixed price. If you want more later, it is a new, separately-quoted scope, never a surprise.
Assumptions
- The gym has, or is willing to open, a PromptPay-capable account in its own name.
- Members book on phones, mostly through LINE; we design for that first.
- One location and one owner-approver for decisions during the build.
Deliberately out of scope
- No point-of-sale or in-person card terminal; this is online deposits, not the front desk till.
- No native app on the stores; a fast web booking covers the real need without app-store overhead.
- No multi-branch franchise console in the first scope; it is a clean place to grow into, not day one.
The one decision that mattered
The deposit is the product, not a feature
The owner first asked for a calendar. The real problem was no-shows, so the one decision that mattered was refusing to hold any slot until a PromptPay deposit cleared. Everything else, the schedule, the reminders, the owner view, exists to support that single rule. Selling the rule, not the calendar, is what changed her week.
I usually build the deposit path before I build the calendar UI. If money cannot move, nothing else matters, so the first thing that worked end to end was a single PromptPay charge against a real account, with the slot held only after it cleared.
The reminder came next, and it was deliberately boring: one message, the day before, with a one-tap cancel inside the window. A reminder that nags twice gets muted; a reminder that respects the member gets read.
The calendar was the last thing I touched, because by then it only had to display a rule we already trusted.
Search & answer visibility
- A clean, fast public schedule page that Google can read, so 'pilates near me' lands on the booking, not a competitor.
- Bilingual page structure so Thai and English searches both find the right class.
Outcome & what it proves
The result
The owner stopped negotiating slots in chat and started waking up to deposits already paid. No-shows fell sharply once deposits were in, because a paid deposit is a kept appointment.
What it proves
That a booking app earns its keep when it changes behavior, not when it adds buttons. Hold nothing until commitment, and the no-show problem mostly solves itself.
Boutique gym & studio
Have a problem that looks like this?
One message in plain language is enough to start. I map the work, scope it fixed, and you see the full number before any money moves. I reply within one business day.