Release 5.4.7138 — Splash Cards Reporting Fixes (May 5, 2026)
Fixes a calculation error in Splash Cards reporting and adds a new activity summary banner.
Net Cash Collected was incorrectly including unpaid orders in its calculation — now fixed to reflect only collected amounts
A new Splash Card Activity banner now displays loaded, redeemed, and still-on-cards amounts for a quick balance overview
Release 5.4.7139 — Paid Reservations Fix for Large Parties (May 11, 2026)
Fixes an issue where paid reservations were disappearing for groups above a certain size.
Root cause: the database server had
group_concat_max_lenset to 1KB, causing reservation data for large parties to be silently truncatedThe value has been corrected — all reservation records now return complete data regardless of party size
Release 5.4.7140 — ACH Payment Option Display Fix (May 12, 2026)
Fixes an issue where clubs with ACH enabled were not seeing it as a payment option on the Payments page.
Root cause: PHP was checking for the value
1but the frontend was sending the string"true", causing ACH to always evaluate as disabledPHP now handles both
"true"and1correctly — ACH displays as expected for enabled clubs
Release 5.4.7141 — Gravity Forms Sales Tax Integration (May 12, 2026)
Fixes multiple inconsistencies in how Sales Tax was handled between Gravity Forms and Member Splash. Tax amounts now sync correctly into MS order records and display consistently across all order-related views.
Sales Tax now properly syncs into MS order records
Tax now displays on Order History, Invoices, PDF Receipts, and the Confirm Order Summary
Note: A one-time historical tax backfill was performed after deployment so that older invoices and reports also reflect Sales Tax correctly.
Release 5.4.7142 — Day Use Passes (May 14, 2026)
Clubs can now sell day-use passes to non-members (drop-in guests) directly through their Member Splash site. Passes are purchased online, tied to a phone number, and redeemed at the front desk via a confirmation code. The feature is built around a visit credit model — each pass equals one credit, consumed on first check-in of the day.
Public Purchase Flow
Guests purchase passes through the [DAY-USE] shortcode page with no account or login required. The checkout walks guests through pass selection, date reservation, contact info, and ECRYPT payment. A confirmation email with the guest's code and visit date is sent immediately after payment. Returning guests are recognized by phone number and have their info pre-filled.
Date Reservation & Capacity
Admins can configure daily capacity limits with separate weekday and weekend defaults, plus per-date overrides for holidays and special events. When a guest selects a date during checkout, a 10-minute hold is placed on that slot — preventing double-booking under concurrent sessions. A GET_LOCK advisory mutex enforces this at the database level. Fully booked dates are greyed out in the date picker. Holds can be extended if the timer runs low, and expired holds are cleaned up automatically.
Waiver Kiosk
The [DAY-USE-WAIVER] shortcode renders a self-service tablet kiosk at the gate. Guests look up their reservation by phone number, review their party, and sign waivers for each pass holder. Adults sign on behalf of minors. Every signature is timestamped and records a fingerprint of the exact waiver text shown, so older signatures remain verifiable if the text is updated later. Identity is verified via phone last-4 digits before signing is permitted.
Front-Desk Check-In Hub
Staff search by name, phone, or confirmation code to pull up a guest. The party manifest shows waiver status for each pass holder with visual badges. Check-in is gated — all waivers must be signed before the party can be checked in. First check-in of the day consumes one credit; same-day re-entries are allowed and tracked without consuming a credit. Batch check-in lets staff process an entire party at once.
Self-Service Reschedule
Guests can reschedule their visit online before midnight on their visit date. They look up their confirmation code, verify identity with the last 4 digits of their phone number, and select a new date from available capacity. The original confirmation code remains valid for the new date. A reschedule confirmation email is sent immediately.
Staff Reschedule Override
Front-desk staff can move any reservation to a new future date from the admin interface, including bookings where the original visit date has already passed. No hold is required. A reschedule confirmation email is sent to the guest automatically.
Admin Management
A dedicated Day Use section in the admin dashboard includes a grouped purchases view, a check-in log with date filter and detail panel, and guest records. Day Use revenue is included in the Sales Report net revenue line and the Dashboard revenue widget. Both shortcode pages — "Daily Use Passes" and "Daily Use Waiver" — are created automatically when the feature is first activated.
Season & Per-Person Limits
Admins can set a per-person season limit (max passes one guest can purchase in a season) and a club-wide season cap (total passes sold across all guests). Both are enforced at checkout. Set either to 0 for unlimited.
Fixes included in this release:
Reschedule confirm: phone last-4 is now correctly sent after identity verification
Waiver kiosk: phone last-4 input was missing entirely after a prior security hardening pass — now restored
Staff reschedule button: now visible when searching by phone, name, or code — previously only appeared for selected past-date passes
Security: All anonymous Day Use endpoints are rate-limited per real client IP. Phone last-4 identity verification is required on reservation confirm, reschedule, waiver lookup, and waiver signing.
To enable: MemberSplash Admin → Day Use → Settings → Enable Day Use Passes.
Release 5.4.7144 — Splash Card Fee Type in Sales Details Filter (May 2026)
The "Splash Cards" fee type now appears in the Fee Type filter on the Finances > Sales Details page.
Fee Type filter now shows all fee types, including ones with no sales yet
Applies to both MS Products and POS categories
Root cause: Fee types with no products assigned were being hidden by a WordPress default (hide_empty=true). Fixed with a one-line change.
Release 5.4.7145 — False Authentication Failed Banner Fix (May 2026)
Staff and manager admin users no longer see a false "Authentication Failed" error banner immediately after logging in. Login was succeeding — the banner was caused by an internal capability mapping issue on Day Use config endpoints.
Fixed capability mapping across all 9 Day Use routes — endpoints were using
ms_manage_accountsinstead ofms_manage_front_desk, causing WordPress to return a rest_forbidden error for non-board admin rolesFixed
#adminmenubackz-index globally
Release 5.4.7146 — Email Campaigns Infinite Loading Fix (May 2026)
Fixes the email campaigns screen getting stuck in an infinite loading state when campaigns had a null or empty status in the database.
Added frontend guards for invalid campaign statuses to prevent infinite loading
Backend now defaults invalid campaign statuses to
draftAdded a migration to repair existing campaigns with bad statuses
Release 5.4.7147 — Members Screen Filter Fix (May 2026)
Fixes the Members screen returning zero rows when admins applied filters with no member types selected.
Release 5.4.7148 — POS Legacy Account Search & Add-ons Panel (May 20, 2026)
POS: Search by Legacy Account #
The Point of Sale member lookup now supports searching by Legacy Account Number, matching existing Front Desk Check-in behavior.
Settings: Add-ons Panel (superadmin only)
A new Add-ons section in Settings lets superadmins enable/disable Point of Sale and Staffing add-ons without needing WP admin access.
Release 5.4.7149 — Reservations, Push Notifications & PWA Enhancements (May 20, 2026)
Reservations: Schedule Builder Redesign
Facility reservation schedules have been completely rewritten with a new, more intuitive UI. Admins can now auto-generate schedules from plain text or voice input using AI assistance. A per-day calendar preview lets admins see exactly which slots will be visible to members before publishing.
Reservations: Cancellation Support
Member-facing reservation cancellation is now fully implemented. Members can cancel reservations according to the cancellation rules configured for each facility.
Reservations: Cleaner Admin UI
The Reservation Facility add/edit and Facility Group add/edit screens have been updated with a cleaner, more consistent layout.
Reservations: Sales Details Improvements
Sales Details now shows Reservation ID, Facility Name, Date & Time, and Duration in an info modal, with quantity displayed as 1 per reservation for clarity. Records for $0 reservations are no longer created in Sales Details. The paid/unpaid status indicator on the web reservations list has been removed — it was misleading and suggested money was owed when it wasn't.
Reservations: Performance
Reservation queries have been optimized for improved load times.
Push Notifications
Admins can now send push notifications directly from the web admin. A full push notification history is available in both the web admin and the PWA. Push notification capability is available as a standalone feature, separate from the PWA.
PWA: Auto-Update Notification
The mobile app now automatically displays an update prompt when a new version is deployed. Tapping the notification updates the app instantly — no app store update or manual reload required.
PWA: QR Code & Install Button
A QR code is now auto-generated for each club based on its unique UUID and saved to the WordPress media library. An install button is also available, along with a "copy snippet" function that generates ready-to-use HTML for embedding the QR code in emails, newsletters, or web pages.
Fixed miscellaneous z-index issues with modals
Added Mailpit support in email providers for local dev testing (replaces deprecated Mailhog)
Release 5.4.7158 — POS Staff & Splash Card Fixes (May 21, 2026)
Resolves several issues affecting staff and manager users at the Point of Sale.
POS orders were blank for staff and manager users — caused by a capability bug from release 5.4.7148, now fixed with a self-healing migration
Splash Cards no longer appear greyed out for staff users at checkout
Fixed a Vue crash on sites with unconfigured POS settings
Release 5.4.7157 — PWA Check-In & Club Discovery Overhaul (May 21, 2026)
Check-In: Two Modes
The PWA now supports two check-in paths. Self check-in (if enabled by the club) allows members to check themselves and family members in from the app — the front desk receives a real-time notification and can confirm or add guests before completing check-in. Attended check-in allows members to pre-select who they are checking in and generates a QR code with member info embedded; the desk attendant scans and confirms.
Check-In Screen: Performance & UI
The check-in screen no longer loads all account and member data on initial page load (previously up to 15+ seconds). All lookups are now real-time server requests, debounced as staff type — data is always current and the initial load is instant. Front Desk Settings and Check-In Settings are now consolidated under a single Check-In Settings tab.
Club Discovery
Members arriving at the app without a direct club link or QR code are now routed to a Find Your Club screen. Clubs can be found by scanning a QR code or entering a unique club code displayed in the superadmin tenants view.
Password Recovery
Password recovery is now available in the PWA, using the same backend routes as the desktop portal.
A Supabase cron task now syncs tenant changes from WordPress hourly
Inactive PWA routes redirect to the club's website with a coming soon message
Self check-ins from the PWA play a chime and appear on the front desk screen in real time
Release 5.4.7162 — Barcode Search Fix for Custom Codes (May 22, 2026)
Fixes barcode search for clubs using Custom Codes. The resolver was querying the wrong field (u.ID instead of u.barcode), causing lookups to fail or return incorrect results. Now matches the original Fuse.js behavior.
Release 5.4.7163 — Mobile App Settings Toggle (May 25, 2026)
Adds a master toggle under Mobile App Settings to hide the "Get the App" call-to-action on the member dashboard. When hidden, the Push Notifications and Mobile App screens in the admin dashboard are also hidden.
To access: Admin → Settings → Mobile App Settings.
Release 5.4.7164 — Push Notifications Subscriber Scope Fix (May 25, 2026)
Fixes a display bug where the Push Notifications subscriber list was pulling billing members from other clubs on the network. Subscriber list is now correctly scoped to the current club only.
Release 5.4.7165 — Barcode Search Auto-Select Fix (May 25, 2026)
Fixes an issue where barcode search could select the wrong member, causing staff to check in the wrong person.
Barcode search now auto-selects the member whose barcode was scanned
Search results now display the barcode value so staff can verify before check-in
Barcode values only display during barcode searches
Supports both Member Splash codes and Custom barcodes
Release 5.4.7166 — POS Orders Blank Screen Hotfix (May 25, 2026)
Fixes the POS orders screen displaying completely blank on clubs that had orders saved with an empty cart. Two bad records caused a PHP fatal that returned a 500 on the entire REST response, making all orders invisible.
api_get_orders— fallback added so existing bad records no longer crash the listapi_create_order— now rejects empty or missing cart with a 400 before any database workformat_cart— always initializesitemskey so the field is always present
Release 5.4.7171 — Staffing Manager Fix & Shift Assignment Cleanup (May 28, 2026)
Fixes two issues on the Staffing > Shifts screen affecting manager-role users.
Manager role 403 fix: Managers were receiving an "Unauthorized" error when opening Staffing > Shifts and seeing empty employee dropdowns. The user list endpoint required a board-level capability that managers don't have — now allows the Staffing Manager capability on GET requests
Archived staff in dropdowns: Archived staff members were appearing as assignable options in shift modals — now filtered out server-side regardless of client cache state
