FlowZa Club

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

MemberRohit Iyer
Membership no.PC-1042-01
TierFull golfing · household
Household1042 · four linked members
StatusActive since 2014
Charge to accountEnabled · all outlets

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.


0
double-bookings, enforced in the database
6
facility verticals on one engine
10
countries, 8 tax regimes, multi-currency
2-way
WhatsApp booking with an AI agent

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.

Resource · no-overlap constraint07:0008:0009:0010:0011:0012:0013:0014:00
Tee 1 · ChampionshipGOLF · RES 1 · NO-OVERLAP
Nair, S.4-ballTee 1 · Championship at 07:00 to 08:00, booked
Rao, M.4-ballTee 1 · Championship at 08:00 to 09:00, booked
Sheikh, F.4-ballTee 1 · Championship at 10:00 to 11:00, booked
Course maintenanceTee 1 · Championship at 12:00 — withdrawn from service, Course maintenance
Menon, V.4-ballTee 1 · Championship at 14:00 to 15:00, booked
Tee 10 · ChampionshipGOLF · RES 2 · NO-OVERLAP
D'Souza, P.4-ballTee 10 · Championship at 08:00 to 09:00, booked
Kulkarni, A.4-ballTee 10 · Championship at 09:00 to 10:00, booked
Iyer, R.4-ballTee 10 · Championship at 11:00 to 12:00, booked
Course maintenanceTee 10 · Championship at 12:00 — withdrawn from service, Course maintenance
Court 1 · ClayRACQUET · RES 3 · NO-OVERLAP
Fernandes, D.SinglesCourt 1 · Clay at 07:00 to 08:00, booked
Nair, S.SinglesCourt 1 · Clay at 10:00 to 11:00, booked
Rao, M.SinglesCourt 1 · Clay at 13:00 to 14:00, booked
Court 2 · ClayRACQUET · RES 4 · NO-OVERLAP
Iyer, R.DoublesCourt 2 · Clay at 08:00 to 09:00, booked
Sheikh, F.DoublesCourt 2 · Clay at 11:00 to 12:00, booked
Kulkarni, A.DoublesCourt 2 · Clay at 14:00 to 15:00, booked
Court 3 · HardRACQUET · RES 5 · NO-OVERLAP
ResurfacingCourt 3 · Hard at 07:00 — withdrawn from service, Resurfacing
ResurfacingCourt 3 · Hard at 08:00 — withdrawn from service, Resurfacing
Menon, V.SinglesCourt 3 · Hard at 12:00 to 13:00, booked
Squash 1RACQUET · RES 6 · NO-OVERLAP
D'Souza, P.SinglesSquash 1 at 09:00 to 10:00, booked
Fernandes, D.SinglesSquash 1 at 13:00 to 14:00, booked
FreeBookedWon the raceWithdrawn from service

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.

Transaction logAwaiting a request

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.

APPLICATION CHECKREAD, THEN WRITE · TWO STATEMENTSTHE WINDOWREQ A · IYERREQ B · FERNANDESSELECT · FREESELECT · FREEINSERT · OKINSERT · OKRESULT · TWO BOOKINGS, ONE SLOTTHE SECOND WRITE NEVER SEES THE FIRST. THE FRONT DESKFINDS OUT WHEN BOTH MEMBERS ARRIVE.DATABASE CONSTRAINTTHE WRITE IS THE CHECK · ONE STATEMENTNO WINDOW EXISTS TO RACE THROUGHREQ A · IYERREQ B · FERNANDESINSERTINSERTbooking_no_overlapCOMMITREFUSED · 23P01WAITLIST · POSITION 1RESULT · ONE BOOKING, ONE WAITLISTAUTO-PROMOTES THE MOMENT THE BOOKING IS CANCELLED.

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

Tour-grade balls · 2 dozen260.00
Glove · cabretta leather100.00
Goods, net360.00
VAT 5%18.00
Charge to account378.00

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.

Journal 8841 · chit PS-4471Accepted
The journal entry generated by pro shop chit PS-4471, showing the debit to member accounts receivable against the credits to revenue and output tax
AccountDebitCredit
1200 · Member A/R — household 1042378.00
4200 · Pro shop revenue360.00
2210 · VAT output, 5%18.00
Totals378.00378.00
Posted · balanced

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

August statement for household 1042, showing net amount, service charge, tax and the amount charged to the account for dues, green fees, a dining tab and a pro shop chit
ChargeOutletNetService 10%VAT 5%Charged
Dues · quarterly, full golfing householdMembership12,500.00625.0013,125.00
Green fees · two guestsChampionship course1,600.0080.001,680.00
Tab · dinner, four coversTerrace Grill2,000.00200.00110.002,310.00
Chit PS-4471 · balls, glovePro shop360.0018.00378.00
Statement totalHousehold 104216,460.00200.00833.0017,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 independently

The 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.

Member · 07:41

Court for two tomorrow morning?

Palm Creek Club · 07:41

Two courts free on Saturday: Court 1 at 07:00 and Court 3 at 09:00. Reply 1 or 3.

Member · 07:42

1

Palm Creek Club · 07:42

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.

Member · 07:43

Bringing a guest

Palm Creek Club · 07:43

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.”

Rohan MehtaGeneral Manager, Whitefield Golf & Country Club

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.

FlowZa Spa Master

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.

FlowZa POS

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.

Related