# GYM Locker Management System — Research on Existing Solutions

**Prepared:** May 20, 2026
**Goal:** Inform the feature list and architecture for a React (frontend) + Laravel (backend) gym locker management system by reviewing what already exists in the market and in open source.

---

## 1. Landscape Overview

The "gym locker management" space sits at the intersection of three product categories. No mainstream product solves all three at once, which is the gap our build can target.

The first category is full **gym management SaaS** (Mindbody, Zenoti, PushPress, GymMaster, TeamUp, Gymdesk, Wellyx, Glofox). These platforms cover memberships, class booking, billing, and access control end-to-end, but treat lockers as a minor sub-feature — typically just a field on the member profile or an add-on charge. The second category is **smart-lock hardware vendors** (Ojmar, Digilock, Gantner, Hollman, Keynius). Their software is excellent at controlling the physical lock (RFID, PIN, Bluetooth, mobile app) and exposes APIs, but does not handle membership billing, day-pass rentals, or reporting on its own. The third category is **generic open-source locker rental software** (AnyLock-LS from Portland State, a few inventory-style Laravel projects). These are close in domain but not gym-specific and lack payments/access integration.

The opportunity: a gym-focused system that owns the locker domain properly (assignment, day vs. monthly vs. annual rental, waitlists, expiry, payments, integration with smart locks) while staying lightweight compared to the giant gym SaaS suites.

## 2. Commercial Systems — What They Offer

**GymMaster** is the most directly relevant commercial reference. It is cloud-based, ships with its own 24/7 Bluetooth door reader hardware, and supports locker assignment from the member profile. Pricing runs $89–$209/month. Its strength is that hardware and software are sold together; its weakness is hardware lock-in.

**Mindbody** ($99+/month), **Zenoti** (custom enterprise pricing with AI features), **PushPress** (free tier for small studios), and **Gymdesk** (integrates with Kisi for access control) all handle memberships, billing, and class scheduling well but treat lockers as an after-thought. Members generally cannot self-service a locker rental from the app in these tools without custom work.

On the hardware side, **Ojmar OCS Smart** offers keypad, RFID, and Bluetooth/app-controlled locks with touchless operation and is widely deployed in fitness chains. **Digilock** focuses on cloud-managed keyless locks with PIN, RFID, and mobile app access. **Gantner** leads in RFID/NFC-based smart locks with integration into access control and cashless payment, popular with larger chains. All three expose APIs (REST and in some cases MQTT) that a backend like ours can call to lock/unlock units, query status, and read events.

The pricing pattern for rented gym lockers in the real world is informative for our billing module: facilities typically charge $40–$80/month per locker (Chelsea Piers, P365 Fitness, BU FitRec, Villa Sport are representative). EFT/recurring credit card billing with auto-renewal after a 3-month minimum and online cancellation is the norm. Many gyms also distinguish "day-use lockers" (free with membership, must be emptied daily) from "rented lockers" (paid, persistent assignment, often with premium add-ons like name plates or laundry service).

## 3. Open-Source Projects to Reference

These are the most useful repos to study, in priority order:

**`johndavedecano/laragym`** — A Laravel + ReactJS gym management system. Closest match to our stack. Covers members, plans, billing, attendance. No locker module, but the auth, billing, and member-profile patterns transfer directly. Good starting reference for project layout.

**`lubusIN/laravel-gymie`** (gymie.in) — MIT-licensed, production-used gym & club management SaaS in Laravel. Strong member/plan/payment patterns. Frontend is Blade-based (not React), so use it for backend modeling, not UI.

**`cristianmarint/MotionGym`** — Laravel 5.8 + Voyager admin panel. Older but useful for understanding admin-panel conventions in a gym context.

**`Dmitri-2/AnyLock-LS`** — The most direct locker-management reference. MIT-licensed, Laravel-based, built by Portland State's open-source team. Implements rent-a-locker flows, pending-rental verification by an admin, and generic locker types. Not gym-specific and uses Blade rather than React, but the data model and admin verification workflow are worth borrowing.

**`thyagoaraujo/gympoint`** and **`merouanezouaid/gym-management-app`** — Node/MERN stacks, not our stack, but useful for UI/UX inspiration on the React side (member dashboards, attendance views).

The pragmatic take: no existing open-source project gives us a drop-in solution. The best approach is to take Laragym's structure as the gym backbone and AnyLock-LS's locker rental model as the locker module, and build the React SPA fresh on top.

## 4. Core Features Observed Across Systems

Based on the commercial and open-source survey, the feature set clusters into six functional areas.

**Locker inventory & layout.** Locker registry with unique IDs, zones/rooms (men's, women's, family, premium), sizes (small/medium/large/full-height), physical status (in service / out of order / maintenance), and ideally a visual floor map. Most commercial systems have a grid or list view; only the higher-end ones (Gantner, Ojmar) offer a floor-plan visualization.

**Assignment & rental lifecycle.** Day-use temporary lock (free, auto-released at close-of-day) vs. rented locker (paid, persistent). Self-service rental from member portal, admin override, waitlist when full, transfer between lockers, and clean-out workflow for expired rentals. AnyLock-LS's "pending verification" step where staff confirm the physical handoff is a useful real-world detail.

**Payments & billing.** Recurring monthly/annual subscriptions, prorated charges, one-time day-pass fees, deposit/refund for keys, failed-payment retry, and dunning. Stripe is the de facto integration; Laravel Cashier wraps it natively. Auto-renewal with online cancellation (subject to minimum term) is the industry-standard policy.

**Member & access integration.** Each locker rental links to a member record with status (active/suspended/expired). If the gym uses RFID wristbands or PINs, the locker must be linkable to the member's access credential. When membership is cancelled or suspended, the locker should auto-release or be flagged.

**Hardware integration (optional but high-value).** REST or MQTT calls to smart locks for remote lock/unlock, status polling, and event logging (who opened what, when). All three major lock vendors (Ojmar, Digilock, Gantner) expose APIs. Building the system hardware-agnostic with a thin adapter layer per vendor is the right call.

**Reporting & operations.** Occupancy rate, revenue per locker, average rental duration, abandoned-belongings log, maintenance tickets, and audit trail of every assignment change. Staff also need a daily report of expired rentals to clean out.

## 5. Architecture Patterns Used in Similar Systems

**Authentication.** The Laravel + React standard in 2026 is **Laravel Sanctum with SPA cookie-based authentication**. Sanctum issues an HttpOnly session cookie tied to your stateful domain, gives CSRF protection via the `XSRF-TOKEN` cookie, and avoids the XSS risks of storing JWTs in localStorage. The configuration essentials: shared top-level domain between API and SPA, `SANCTUM_STATEFUL_DOMAINS` set correctly, `supports_credentials: true` in CORS, and HTTPS in production. This is what we should use. JWT/Passport are over-engineered for our case unless we add third-party API consumers later.

**SPA vs. Inertia.js.** Two viable shapes for a Laravel + React build. A **classic decoupled SPA** (separate React app talking to a Laravel JSON API) gives the most flexibility, supports mobile apps from the same API, and is what most commercial systems use. **Inertia.js** glues Laravel and React into a single deployment, eliminates the API layer, and lets Laravel controllers return React pages — much less boilerplate but harder to repurpose for a future mobile app. Recommendation: if a mobile app or third-party integrations are likely, go decoupled SPA + Sanctum. If this is web-only and the team is small, Inertia is faster to build.

**Database shape.** A typical gym schema has Members, Memberships/Plans, Payments, Attendance, and Trainers. We extend it with: `lockers` (id, number, zone, size, status, hardware_id), `locker_rentals` (member_id, locker_id, plan, start_at, end_at, status, payment_id), `locker_events` (locker_id, event_type, actor, timestamp) for audit, and `hardware_devices` (vendor, endpoint, credentials) if we integrate physical locks.

**Smart-lock integration layer.** Best practice from industrial IoT locker systems: an abstraction (`LockerHardwareDriver` interface) with concrete drivers per vendor (OjmarDriver, DigilockDriver, GantnerDriver), each translating our domain calls (`unlock(locker)`, `getStatus(locker)`) into the vendor's REST or MQTT protocol. Webhook endpoint on the Laravel side receives lock events. This is what Seam.co and similar aggregators do at a much larger scale.

**Three-tier architecture.** Presentation (React SPA), application logic (Laravel controllers/services/jobs), data (MySQL/PostgreSQL + Redis for queues and caching). Use Laravel Queues for any hardware call so the UI never blocks on a slow lock response.

## 6. Recommended MVP Feature List for Our Build

Based on the research, here is the recommended scope split into MVP (ship first) and Phase 2 (after validation).

**MVP — Phase 1.** Member registration and login (Sanctum SPA auth). Locker inventory CRUD by admin (number, zone, size, status). Locker assignment to a member with a rental period (day / monthly / annual). Manual payment recording plus Stripe integration via Laravel Cashier for recurring rentals. Admin dashboard: occupancy view, expiring rentals this week, revenue summary. Member portal: see my locker, my rental dates, payment history, request renewal/cancellation. Email notifications for assignment, renewal, expiry, and failed payment. Audit log for every assignment change.

**Phase 2 — after MVP works.** Visual floor-plan view of locker layout. Waitlist for popular zones when full. Day-pass kiosk flow (member taps RFID, system assigns next free day-locker). Smart-lock hardware adapter layer with at least one driver (start with Ojmar or Digilock — both have well-documented REST APIs). Reporting dashboard (occupancy trends, revenue per zone, abandoned-belongings tracking). Mobile-friendly PWA. Multi-location/multi-gym support.

**Explicitly out of scope** to keep the project focused: class booking, trainer scheduling, workout tracking, nutrition plans. These exist in every gym SaaS but are not what makes a locker system valuable. If the gym needs them, they should keep using their existing gym SaaS and we integrate via webhook for member sync.

## 7. Key Differentiation Opportunities

The research surfaced three clear gaps where our system can be better than what's available:

The first is **locker-first UX**. Every commercial product treats lockers as an after-thought attached to a bloated gym SaaS. A clean, focused locker-only experience for both members (rent / view / renew) and staff (assign / verify / clean out) is genuinely missing.

The second is **hardware vendor-agnosticism**. Most commercial offerings tie you to a hardware vendor (GymMaster ships its own readers, Ojmar's software only works with Ojmar locks). A driver-based architecture lets a gym pick whichever locks they already have or want to buy.

The third is **transparent self-service**. Members in most existing gyms still rent lockers via paper forms or by emailing the front desk. A self-service rental flow with online payment, automatic renewal, and email reminders is a step up most facilities don't have yet.

---

## Sources

- [Best Gym Management Software 2026 — Zenoti](https://www.zenoti.com/thecheckin/gym-management-software)
- [The 19 Best Gym Management Software for 2026 — Kisi](https://www.getkisi.com/blog/best-gym-management-systems-compared)
- [Best Gym Management Software (2026) — Gymdesk](https://gymdesk.com/blog/best-gym-management-software)
- [Smart Fitness Lockers — Ojmar](https://ojmar.com/en/solutions/industries/fitness-gym-sport-club-locker-locks/)
- [Smart Keyless Digital Locker Locks — Digilock](https://www.digilock.com/solutions/digital-locker-locks-gyms/)
- [Smart Locker Solutions — Gantner](https://www.gantner.com/solutions/smart-locks/)
- [Comparison of the Leading Smart Lock Providers — Lockertek](https://www.lockertek.co.uk/comparison-of-the-leading-smart-lock-providers/)
- [Gym Door Reader (RFID + Bluetooth) — GymMaster](https://www.gymmaster.com/hardware/gym-door-reader-rfid/)
- [Integrating Smart Lockers Into Your Gym Experience — Keynius](https://keynius.eu/blog-posts/integrating-smart-lockers-into-your-gym-experience)
- [Integrate Smart Locks Across Global Brands With a Single API — Seam](https://www.seam.co/smartlocks)
- [Monthly Locker Rental — P365 Fitness](https://p365fitness.com/monthly-locker-rental/)
- [Monthly Locker Rental — Chelsea Piers Fitness](https://fitness.chelseapiers.com/my-account/locker-rental)
- [Locker Rentals — BU FitRec](https://www.bu.edu/fitrec/membership-services/services/locker-rentals/)
- [AnyLock-LS (Laravel locker rental, MIT) — GitHub](https://github.com/Dmitri-2/AnyLock-LS)
- [LaraGym (Laravel + React gym mgmt) — GitHub](https://github.com/johndavedecano/laragym)
- [laravel-gymie (Laravel gym & club SaaS, MIT) — GitHub](https://github.com/lubusIN/laravel-gymie)
- [MotionGym (Laravel + Voyager, MIT) — GitHub](https://github.com/cristianmarint/MotionGym)
- [How to Build a Database Schema for a Gym Management System — Back4App](https://www.back4app.com/tutorials/how-to-build-a-database-schema-for-a-gym-management-system)
- [Database for Gym Management System — Wellyx](https://wellyx.com/blog/database-for-gym-management-system-an-ultimate-guide-for-gym-owners/)
- [Laravel Sanctum docs (12.x)](https://laravel.com/docs/12.x/sanctum)
- [Using Sanctum to authenticate a React SPA — Laravel News](https://laravel-news.com/using-sanctum-to-authenticate-a-react-spa)
- [A Practical Guide to Using ReactJS with Inertia.js 2 and Laravel 11 — DEV](https://dev.to/thefeqy/a-practical-guide-to-using-reactjs-with-inertiajs-2-and-laravel-11-4adc)
- [How to structure the frontend of a Laravel Inertia React application — Spatie](https://spatie.be/blog/how-to-structure-the-frontend-of-a-laravel-inertia-react-application)
- [Connecting MQTT and REST API — EMQX](https://www.emqx.com/en/blog/connecting-mqtt-and-rest-api)
