Skip to content
← Help center

Programs & reservations

Lap swim

Set seasons and lane schedules, manage reservations, and understand cancellation rules.

Club staff · 6 min read

Follow these steps at your club’s own website. Available screens and actions depend on your account’s role and the programs your club has enabled.

Overview

Lap swim is reservation-based lane time. Staff set the weekly template; Swim Ops generates bookable slots ahead; members book from the portal — now one reservation per swimmer, into a specific lane. Use the Registration & pricing tab to set when booking opens and what it costs; open a row to edit it.

Templates and slots

  • Templates: weekday + time (time pickers for start and end) + Lane numbers (the pool's real lane numbers for that window, separated by commas — e.g. early-morning lanes 3–6) + Max per lane. Total capacity is lanes × max per lane; the form shows it live and freezes it onto every stamped slot. Leave Max per lane blank to inherit the org default (configured in Settings). Edit or deactivate a template when the schedule changes. This only regenerates that template's future, empty slots. Any slot with a reservation on it, live or canceled, is never touched, so members keep what they already booked.

  • Seasons. Templates can belong to a season from Website → Hours, or to All year. Season templates apply on dates inside that season; all-year templates fill weekdays that don't have a season-specific window. When a season ends, the next season's templates take over. Use Copy from another season to duplicate an active schedule into a new season. If you have no seasons yet, create one on Website → Hours — templates still work as all-year until then.

  • Upcoming slots: stamped instances at least 14 days ahead, or the booking-horizon setting if it's set higher than 14 (configured in Settings). Each slot shows reserved-vs-capacity; cancel a single slot when the pool is closed without rewriting the whole week.

Canceling a whole slot from the admin side only flips its status. It does not automatically notify the households who had booked it. The confirmation message says households "should be notified," which means you need to email or text them yourself. A member's own self-cancellation and a booking confirmation both send email automatically; only a staff weather/maintenance whole-slot cancellation doesn't.

Booking horizon, max active reservations per household, max swimmers per reservation, and cancel cutoff are configured in Settings. The cutoff only binds members. Self-cancellation is blocked inside that window before the slot starts, but staff can cancel on a member's behalf at any time, cutoff or not.

Lanes and per-swimmer reservations

Reservations are now one row per swimmer, not one per household:

  • Who is swimming. The portal reserve form shows a "Who is swimming?" checkbox set built from the household's people: the primary contact (defaulted), other adults, and family members. A member can book several swimmers into one slot in a single action, capped by max-swimmers-per-reservation (configured in Settings, default 4). The whole set books all-or-nothing under the slot's lock, so it can never partially over-fill; a swimmer who already holds a live reservation on that slot is silently skipped (a re-submit never errors or double-books).

  • Lane choice. When a slot has more than one lane, the form offers a Lane picker: "Any open lane" (default: the platform assigns the least-full lane) or a specific lane, each showing its live remaining count. The whole group lands in one lane. A single-lane slot shows no lane picker. Picking a lane that fills before submit is refused with "pick another lane or try Any open lane": distinct from a "this slot is full" error.

  • The per-household cap counts distinct slots, not swimmers. lap_max_active_reservations_per_household (configured in Settings) counts how many upcoming open slots a household holds, so a family of three swimming together in one slot still uses just one of that allowance. Max-swimmers-per-reservation is the separate guard against one household filling a whole slot at once.

In Upcoming slots, each slot lists its live reservations by swimmer name and lane, each with its own Cancel action. Canceling a single reservation this way bypasses the member cancel cutoff, emails the household automatically, and advances the waitlist, exactly like a member self-cancel, unlike a whole-slot cancellation, which does neither.

Availability refreshes after a booking, cancellation, or waitlist action, and periodically while the page is visible. Changes made by another member may not appear immediately. Choosing a filter uses the schedule already loaded; it does not itself refresh availability.

Member portal: filters, list, and calendar

The reservation dialog keeps swimmer and lane selections when members review the rules or correct an error. It stays open while a reservation is being submitted and closes after success. If a slot fills during the attempt, the dialog explains this without discarding the selections.

On /portal/lap, members can narrow the upcoming list without leaving the page:

  • Day — This week (default), Next week, or All upcoming.

  • Time — Any, Morning (before noon), Midday (noon–4), or Evening (4 onward).

  • Show — All, Open lanes only, or Mine (slots where the household already holds a reservation).

  • View — List (default) or Calendar. Calendar shows one chip per day (slot count and open lanes, or "Yours: …" when the household is booked). Clicking a day filters the list below to that date.

Each list row is one slot: time range, how many lanes are still open ("3 of 6 lanes open", or Full only when none remain), Your lane: N when reserved (real pool lane numbers), and a single action (Reserve, Cancel, or Join waitlist). Reserve opens a short form to pick who is swimming and which lane.

Waitlist and no-shows

When a slot is full, members can join a waitlist. Offers expire after hours configured in Settings. Sending an offer always emails the household, and when an offer lapses unaccepted the hourly expiry sweep emails the household too ("Your lap lane offer has expired"). That expiry email is best-effort, a delivery failure is logged, not retried, so if a member insists they never heard back, still check the entry's status rather than relying on the email alone.

No-show release frees a seat after a slot's start time plus a grace period (configured in Settings, off by default at 0 minutes). It's purely time-based, not tied to any check-in scan, so don't describe it to members as a check-in feature. It runs on the hourly scheduled process, so the actual release can lag up to an hour after the grace period elapses. Not instant. The household whose reservation is released for a no-show gets an automatic email letting them know.

Lap slots use the same shared, tokenized, FIFO waitlist system as camp weeks and events. Same queue and offer tables, same expiry mechanics, just a different program type. See Camp and event waitlists for how offers, FIFO position, and expiry work in detail (note: that article is written from the camp/events side and doesn't call out lap slots by name, but the mechanics are the same).

Rules agreement

A household must sign the current Lap swim rules (per year) before booking. Publish it under Agreements. If no version is published, lap swim has no signature gate. A household that hasn't signed the current version sees the rules up front on /portal/lap, not only after a bounced reserve, and signs them inside the reserve dialog as part of booking their first slot; a household that has already signed is never re-prompted. If a member says lap swim keeps asking them to sign, check whether a new rules version was published (signatures are per version, per year).