Activities — courses, classes, and the guest who paid but nobody scheduled
Ask anyone who runs a dive resort what actually goes wrong in a week, and near the top of the list is this: a guest buys an Open Water course on Monday, the sale goes onto the booking, and on Friday they fly home having done two of the five sessions. Nobody did anything wrong. The sale was recorded perfectly. It just never became a plan.
Rooms have an occupancy planner. Boat dives have a dispatch board. Everything else you sell — courses, marine-park trips, cooking lessons, yoga, island hopping, spa slots, kids club — has, until now, had a whiteboard.
That is what Activities is for.
The sale and the operation are two different things
The design decision underneath the whole module is deliberately boring: the product still carries the price, and the activity carries the day.
Nothing about how you sell changes. An activity is an ordinary product with an ordinary price, ordinary tax and an ordinary line on the folio. What is new is one field on that product — Default activity type — and what it unlocks. Once a product points at an activity type, every sale of it becomes something operations can see.
Which means the module handles no money at all. It never creates a charge, never issues a refund, never touches an invoice. Every confirmation dialog in it says the same sentence: "Invoices are not touched — refunds are handled in Folio." That is a feature. Billing already works; it did not need a second opinion.
The day board
Occupancy → Activities is where the day is run. One property, one day, every session: time, activity, venue, who is staffing it, how many seats are gone, and what state it is in.
The Activities day board: sessions with staffing gaps, seat counts, and the unscheduled-guest banner
Two details on that screen carry most of the value.
The first is the staffing gap. The activity type says an Open Water session needs an instructor and a guide; the board says Guide · 1 missing, in the row, before the morning it matters. It does not block you — plenty of sessions run one short on purpose — it just refuses to let the gap be invisible.
The second is the banner at the top:
1 guest paid for an activity and is not scheduled yet.
This is the whole feature in one line. It counts sales that have not been put on any session, it does not go away on its own, and it gets louder as the guest's departure approaches — "1 of them leaves within a day — last chance to schedule Anna Weber." Open it and you get the list, sorted by who is leaving soonest.
The candidates list: who paid, what they bought, how many seats they need, and when they leave
Tick the guests, pick the session, add. The seat count previews itself as you go — Session will be 8 of 8 — and the sale stays linked to the roster row, so the booking screen can tell a scheduled activity from one nobody has arranged yet.
Seats block. Everything else warns.
Gurita has historically been polite about capacity. Transfers warn and carry on; the dive planner never checked the boat's capacity at all. Activities is the first module in the system that genuinely refuses.
A session cannot be oversold. The counter will not sell the ninth seat on an eight-seat session, and there is no override — "That seat has gone. Pick another session — this cannot be overridden." Enrolling a guest onto a five-session course checks the run's capacity and every remaining session's capacity before it writes anything, so you never get a guest who is half-enrolled.
And the seat accounting is honest in the way that matters at the end of the week: a no-show does not free a seat. The guest occupied it, the session ran, nobody else could have had it. Only cancelling releases one.
Everything else warns and gets out of the way. A guest below the minimum age? "Allowed — the desk may hold a signed waiver." A session outside their stay dates? "Allowed — day guests and extensions happen." Short of wetsuits? A note, not a refusal — gear gets borrowed, shared and brought from home in ways no database can see.
The roster
Open a session and you get the sheet the instructor actually carries: who is coming, which room and booking they belong to, what gear they need, and a check-in control built for a clipboard pace — Tab moves between rows, Space toggles check-in, N marks no-show.
A session roster: guests, gear, status and check-in
Walk-ins, comped guests and staff go on the same list with Add manually — "Creates no product line and no charge." Gear is picked per guest from the type's defaults, and ticking it never bills anybody: most course prices include the kit, so automatic charging would double-bill by default.
Once a session is completed, its roster becomes a record and locks. Comments still work — "boat came back early", "guest cut their hand" — because that is exactly when you need them.
Courses are a run, not five bookings
For anything with a curriculum, the unit of work is a run: "OW · week 31 · Anna". Define the curriculum once on the activity type — labels, day offsets, times, durations — and one start date generates the whole thing.
The curriculum on an activity type: labels, day offsets, times and durations
Editing that curriculum later never rewrites runs that already exist. A session already on somebody's calendar keeps the label and time it was created with — a change to your teaching plan must not retroactively rename what already happened.
The run's own screen is the instructor's: sessions across the top, enrolees down the side, and one mark per cell.
A course run: the enrolment gate, the session strip, and the progress matrix
Progress is derived, never stored twice — what the matrix shows is what the rosters say, so there is nothing to keep in sync and nothing to drift. A guest who joins on day three has those first sessions marked Waived · joined later, not missed, because those two things are not the same and a certificate should not depend on the difference being guessed.
When someone passes, Record result & certification writes the agency, level, date and certification number onto their enrolment. You can record it while sessions are still open — you get a warning, not a wall. Instructors certify before the paperwork catches up, and blocking that only teaches people to mark attendance falsely.
Selling it three ways
From a booking — an ordinary product line. It appears on the day board as unscheduled until somebody places it.
From your website — activity products sell through your existing booking widget with no setup at all. The guest buys the activity; you decide which session they go on.
At the counter — the till asks before the sale can be finished. A single session gets a slot picker showing only sessions that still have room; a course gets a start date, and one confirmation creates the run, enrols the guest and takes a seat on every session. Sell the same start date twice and both guests land on the same run, so the instructor sees one group.
Cancel the booking and the seats come back. Void the receipt and the seat comes back. Split or merge a bill and nothing happens at all, because neither of those is a cancellation. Remove a booking line that is already on a session and Gurita stops you — take the guest off the session first, so a roster never quietly outlives the sale behind it.
And a report that admits what it doesn't know
Report → Activities report gives fill rate, no-show rate, sessions held, and staff hours per instructor.
The Activities report: scheduled versus held, fill rate, no-show rate and staff hours
Two things it deliberately does not do. It does not fold sessions with no seat limit, or with no capacity configured, into the fill rate — it counts them separately and says so, because a silently flattering average is worse than a smaller honest one. And it carries no revenue figures at all; activity sales are ordinary product lines and belong in the finance report with everything else.
Getting it
Activities is a Premium module under Settings → Active Modules. Turn it on and you get the catalogue under Master Data, the day board on Occupancy, and the report in the Report menu.
The full walkthrough — activity types, the day board, rosters, course runs, gear and the settings behind them — is in the Activities chapter.
If you would like a walkthrough for your team, get in touch.
