The slot cannot
be sold twice.
Membership, booking and billing for clubs. Dues, tabs and chits settle into a double-entry ledger that ties out; bookings are structurally protected against conflicts; members book over two-way WhatsApp or a branded, passwordless portal — across golf, racquet, marina, fitness, dining and events, in one club or a group.
Membership & billingZero double-bookingTwo-way WhatsApp
Palm Creek Golf & Country Club
Digital membership card
Dues · quarterly
13,125.00
Tabs, chits & fees
4,368.00
Statement balance
17,493.00
Illustrative household, AED. The card is the member record: one identity across every facility, and one account that every outlet can charge against.
Zero-double-book engine
Two members,
one tee time,
the same instant.
Most booking systems check whether a slot is free and then write the booking. Those are two statements, and between them sits a gap wide enough for a second member to walk through. Club does not check. The write itself is the check, declared once on the resource and enforced by the database, so a conflicting booking is not caught late — it cannot be created.
Select any empty slot below. Two members will request it at the same instant, as they do at 07:00 on a Saturday.
Saturday morning, illustrative. Every row is one bookable resource and carries its own overlap constraint; the two blocked columns on Court 3 are a resurfacing job, held by the same mechanism that holds a booking.
No contended slot yet. Select an empty cell above.
Declared once, on the resource
This is the whole of it. One constraint on the booking table, indexed by resource and by the period the booking occupies. Two overlapping rows for the same resource cannot both exist, whatever the application layer believes.
ALTER TABLE booking
ADD CONSTRAINT booking_no_overlap
EXCLUDE USING gist (
resource_id WITH =,
during WITH &&
) WHERE (status <> 'cancelled');Availability is evaluated in the club’s own timezone, including the hour a daylight-saving change removes. Cancellation cutoffs, dynamic pricing by day-part and tier, and waitlist position are all attributes of the same booking row.
An application check races.
A constraint cannot.
The difference is one gap. On the left, the read and the write are separate, so both requests read a free slot and both write. On the right there is no read to be stale — the second write meets the constraint and is refused, with a SQLSTATE you can catch and turn into a waitlist offer.
Charge-to-account
A signature at the pro shop
is a journal entry.
This is what separates a club from a restaurant. A member does not pay at the till; they sign. The chit becomes a line on a household account, and dues, tabs, chits and green fees settle into one double-entry ledger — which is only worth anything if it refuses to accept an entry that does not balance.
Pro shop
Chit PS-4471 · 06 Aug · 16:22 · till 2
Signed
R. Iyer · PC-1042-01 · household 1042
AED. No card, no cash, no settlement at the outlet. The member’s obligation is created at the moment of signature and the outlet’s revenue is recognised on the same transaction.
| Account | Debit | Credit |
|---|---|---|
| 1200 · Member A/R — household 1042 | 378.00 | |
| 4200 · Pro shop revenue | 360.00 | |
| 2210 · VAT output, 5% | 18.00 | |
| Totals | 378.00 | 378.00 |
Debits 378.00, credits 378.00. The chit is settled, the member owes 378.00 and the club owes 18.00 of output tax. One transaction, three accounts, nothing left to key in at close.
A ledger that accepts a lopsided entry is a spreadsheet with an audit trail. Club rejects the write, so the chit stays unsettled and appears on the drift report rather than quietly shifting eighteen dirhams of tax into revenue.
One statement, four kinds of charge
| Charge | Outlet | Net | Service 10% | VAT 5% | Charged |
|---|---|---|---|---|---|
| Dues · quarterly, full golfing household | Membership | 12,500.00 | — | 625.00 | 13,125.00 |
| Green fees · two guests | Championship course | 1,600.00 | — | 80.00 | 1,680.00 |
| Tab · dinner, four covers | Terrace Grill | 2,000.00 | 200.00 | 110.00 | 2,310.00 |
| Chit PS-4471 · balls, glove | Pro shop | 360.00 | — | 18.00 | 378.00 |
| Statement total | Household 1042 | 16,460.00 | 200.00 | 833.00 | 17,493.00 |
AED, illustrative. Service charge applies where the club has set it — dining here, not retail. Every column adds down and the three components add across: 16,460 plus 200 plus 833 is 17,493, which is the balance on the card at the top of this page.
The three mechanisms behind it
Members & households
A directory of members, priced tiers carrying dues and initiation fees, and household billing that puts a spouse's court fee and a child's swimming lesson on one statement. The lifecycle runs the whole way from active to honorary, and archiving is deliberately archive-safe: a member is withdrawn from the directory without detaching the entries their account already carries.
Double-entry ledger
A general ledger that rejects unbalanced entries, with A/R reconciled back to the GL, drift alerts when the two diverge, voids that are audit-safe because they reverse rather than delete, and multi-gateway payments landing against the invoice they settle.
Charge-to-account POS
Multi-outlet registers for F&B and the pro shop, holding tabs and chits, charging to the member, applying service charge and tax by outlet, and settling straight into the ledger with no end-of-day export.
Six facility verticals
Six things to book.
One thing doing
the booking.
Golf, racquet, marina, fitness, dining and events are not six products. They are six answers to one question — what is the bookable resource — put through the same engine. Select a vertical to see what changes, and what stays exactly where it was.
Golf
Licensed independentlyThe bookable resource
A tee time on a course
The unit of time
An interval, commonly eight minutes, for a party of up to four
How it is priced
By day-part, member tier and guest status
Enforced beyond overlap
Interval spacing and pace of play, so the field does not stack up behind a slow group
One booking, as it reads on the calendar
Tee 1 · 07:08 · four-ball · two members, two guests
Constant across all six
Everything below is shared, not replicated per vertical. That is the whole reason the six sit on one engine rather than in six systems that have to agree with each other afterwards.
- The memberOne record, one household, one history. A marina berth and a pilates class are two lines on the same account.
- The calendarOne unified view across every facility, so a member with a tee time at 07:00 and a table at 12:00 has one day, not two diaries.
- The constraintThe same no-overlap exclusion on every resource, whether it is a fairway, a berth or a function room.
- The ledgerEvery booking, fee and cancellation charge posts to the same double-entry ledger under the same tax treatment as the outlet it came from.
- The channelWhatsApp and the member portal read the same availability the front desk does, for all six.
- The licenceEach module is licensed independently. A racquet-only club pays for racquet and still gets the member record, the calendar and the ledger.
WhatsApp and the member portal
Members do not want
an app. They want
a reply.
Two-way WhatsApp with an AI agent that books, reschedules and lets a member verify themselves — plus a branded, passwordless portal and the digital membership card for anyone who prefers a screen at the gate. Both read the live availability the constraint protects, so neither can promise a slot the club cannot deliver.
Court for two tomorrow morning?
Two courts free on Saturday: Court 1 at 07:00 and Court 3 at 09:00. Reply 1 or 3.
1
Court 1, 07:00 to 08:00, Saturday 9 August. Confirmed. AED 120 charged to household 1042. Reply CANCEL up to 12 hours before, free of charge.
Bringing a guest
Guest fee AED 60 added, same account. Send the guest's name and they will be on the gate list.
Illustrative thread. A member’s first message from an unrecognised number is answered with a verification step rather than a booking: they reply with their membership number, the number is bound to the member record, and every later message is already authenticated.
The agent books against the constraint
It offers what is genuinely free, writes the booking through the same exclusion constraint the front desk writes through, and loses the same races. When it loses one, it offers the waitlist and says so.
Rescheduling is one message
Moving a booking is a cancellation and a booking in one transaction, which means the released slot is offered to the waitlist immediately rather than after somebody notices.
Self-verification
Members bind their own WhatsApp number to their membership record. No password to reset, and no front-desk call to establish who is asking.
Passwordless portal
Branded to the club, no password to hold, and carrying the digital membership card, the household statement and the member's own booking history.
A marketplace listing
Clubs that want new members can list publicly and take request-to-join, which converts to a full member record in one step rather than a form somebody retypes.
How it works
Six steps to open, then the club runs
- 01
Launch your club
Start a 14-day trial and finish the six-step setup — branding, currency, tax, staff roles, facilities. Then import your members and go live. Currency, tax regime and which facility modules are licensed are set per club, which is what makes a group of clubs in different countries one tenant rather than one compromise.
- 02
Run every operation
Bookings across golf, courts, marina and dining; charge-to-account POS in every outlet; dues, statements and payments. Every transaction lands in one balanced ledger, which is why the month-end question is a reconciliation report rather than an archaeology project.
- 03
Grow the membership
List on the public marketplace, convert request-to-join in one step, collect verified reviews from members who actually attended, and track the KPIs for every branch live rather than in a consolidated export.
“We replaced four disconnected systems with FlowZa Club. Members book courts and dining over WhatsApp, every charge flows to one ledger that actually ties out, and monthly reconciliation finally takes an afternoon instead of a week.”
Multi-club
Ten countries and eight tax regimes are supported, with currency, tax and feature entitlements held per club. A group sees consolidated KPIs; each club keeps its own books, its own outlets and its own price list.
Club, Spa Master and POS
Who is on the other side
of the transaction.
Three systems that all take a booking or a payment, and people reasonably ask which one they need. The answer is not the facility. It is the relationship with the person paying.
Spa Master
Books a room for a client
A treatment room is the scarce resource and a client is someone you want back. The relationship is a history of visits, a package balance and a rebooking rate. It ends and restarts with each appointment.
POS
Sells to a customer
The transaction is complete at the till. A customer may be identified for loyalty, but nothing is owed in either direction once the receipt prints. There is no account to charge against because there is no continuing obligation.
Club
Bills a member
A continuing relationship with dues, a household and an account that every outlet can charge against. The member owes the club money before they buy anything, and the club owes the member access. That is why the ledger, not the till, is the centre of this system.
You are here
They are separate systems on separate app subdomains, and they share the underlying records. A club that runs a spa inside it can operate Spa Master for the treatment rooms and have those charges reach the same member account, without either system holding its own copy of the person.
Questions club managers ask
What actually stops a double-booking when two members tap at the same moment?
An exclusion constraint on the booking table, indexed by resource and by the period the booking occupies. The second write is refused by the database with SQLSTATE 23P01 before it becomes a row. This matters because the alternative — reading availability and then writing — leaves a gap of a few milliseconds in which both reads are true, and on a Saturday morning tee sheet that gap is hit regularly. The application then catches the refusal and offers the waitlist, which is a better outcome than a booking that has to be apologised for.
How does household billing work?
Members are linked into a household, and one of them carries the account. A spouse's court fee, a child's swimming lesson and the primary member's bar tab arrive on one statement under one payment instruction. Each charge keeps the identity of the member who incurred it, so the statement is itemised by person as well as by outlet, and a household can be split later without rewriting history.
Do we have to license all six facility verticals?
No. Each module is licensed independently and a racquet-only club licenses racquet. The member record, the household, the ledger, the POS, the unified calendar and the WhatsApp channel are not part of a facility module — they are the platform underneath all six, so a single-facility club is not paying for the other five to get them.
We run three clubs in two countries. Is that one system?
One tenant, with currency, tax regime, price list and feature entitlements held per club. Ten countries and eight tax regimes are supported. A member visiting a sister club arrives with their record and their entitlements; the charge posts in that club's currency to that club's books; group reporting reads across all three without a consolidation export.
What happens to the ledger when a member leaves?
Nothing. Archiving is deliberately archive-safe: the member is withdrawn from the directory and from availability, but the entries their account already carries stay attached to them. A void reverses rather than deletes, so a correction is visible as a correction. This is the difference between a member record you can tidy up and one an auditor can follow.
Can a member book without installing anything?
Yes. Two-way WhatsApp with an AI agent covers booking, rescheduling and self-verification, and the branded portal is passwordless. Both read the same availability and write through the same constraint as the front desk, so neither can offer a slot that is already gone.