Why Gym Manager: Memberships, Renewals & Class Booking
What makes it better
than the alternatives
- 01
Renewal reminders on WhatsApp
The dashboard lists members who are expiring soon or expired and every unpaid balance, each with a one-tap WhatsApp message ready to send
- 02
Front-desk check-in
Search by name, phone or member number; it blocks lapsed or inactive members, duplicates and members who used up their plan's class limit
- 03
Public class booking page
Live spots left, weekday and duplicate checks, drop-in fee for guests, honeypot and rate limit
- 04
Member portal on a private link
Membership and days left, balance, visits, workout and nutrition plans, notices and upcoming classes
- 05
Part-payments with receipts
Numbered receipts (RC-2026-00001) on signed links the member can print or save as PDF, balance tracked per membership
Members
- profiles with photo
- trainer
- goal
- emergency contact and body measurements; numbered member IDs (M-00001); active
- expiring soon
- expired and no-membership filters; private portal link per member
Plans and memberships
- plans by length in days with price
- one-time sign-up fee and optional class limit; renewal starts the day after the current membership ends; discount; cancel a membership (admin)
Payments
- part-payments
- balance due
- numbered receipts
- signed receipt links (90 days
- configurable)
- print or save as PDF
- payment methods cash/card/bank/online/other
Check-in and attendance
- front-desk check-in page
- membership and duplicate checks
- class limit per plan
- visit history per member
- check-ins chart
Classes and booking
- weekly schedule with trainer
- location
- capacity and drop-in fee; public booking page with live spots left; staff bookings with the same rules; booking status (booked
- attended
- no-show
- cancelled)
Training
- workout plans (day
- exercise
- sets
- reps
- weight
- level) and nutrition plans (meals and notes) per member
- shown on the member portal
Shop
- products with SKU
- price
- stock and reorder level; sales reduce stock and never go below zero; deleting a sale restores stock; products-to-reorder widget
Business
- expenses by category
- income vs expenses chart (6 months)
- unpaid balances
- renewals due
- notices shown on the member portal
- trainers
Settings and white-label
- gym name
- address
- phone
- currency
- receipt footer and expiring-soon window in Settings; re-brand member pages by changing one colour variable
Admin and security
- Filament 5 admin
- roles admin and staff with policies (staff cannot open Settings
- manage logins or delete)
- rate-limited public pages
- no public registration
- optional demo login
- Docker with HTTPS behind Cloudflare
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| PHP | — | — | Web, API | 88.6% |
| SQL | — | — | Database | 7.8% |
| CSS | — | — | Styling | 2.8% |
| Shell | — | — | Scripts | 0.5% |
| JavaScript | — | — | Front-end | 0.3% |
- Primary language
- PHP 8.3+
- Framework
- Laravel 13 + Filament 5
- Database
- MySQL 8.0 / MariaDB 10.6+
- Authentication
- Laravel session-based (Filament panel)
- Licence
- Single-site
- Screens
- 32
- Database tables
- 16
- Supported languages
- English
- Browser support
- Modern browsers (Chrome, Firefox, Safari, Edge)
| Minimum | Recommended | |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 MB | 2 GB |
| OS | PHP 8.3+ with intl, gd, zip, bcmath, exif, mbstring, pdo_mysql; Node 20+ for build | PHP 8.3+ with intl, gd, zip, bcmath, exif, mbstring, pdo_mysql; Node 20+ for build |
| Est. monthly hosting | $10 | $10 |
Needs Docker with the Compose plugin. Unzip the source, open a terminal in the folder, then: ```bash cat > .env <<ENV APP_KEY=base64:$(openssl rand -base64 32) DB_PASSWORD=$(openssl rand -hex 16) SEED_ADMIN_EMAIL=you@yourgym.com SEED_ADMIN_PASSWORD=choose-a-strong-password APP_URL=https://gym.example.com APP_PORT=8080 ENV docker compose up -d --build ``` Open http://localhost:8080/admin. The container runs the migrations and creates the first admin and demo data. For HTTPS behind Cloudflare see HowToSetup.md.
```bash sudo apt update && sudo apt install -y nginx mysql-server unzip composer php8.3-fpm php8.3-mysql php8.3-intl php8.3-gd php8.3-zip php8.3-bcmath php8.3-mbstring php8.3-xml php8.3-curl nodejs npm sudo mkdir -p /var/www/gym && cd /var/www/gym # unzip the source here composer install --no-dev --optimize-autoloader npm ci && npm run build cp .env.example .env && php artisan key:generate # edit .env: APP_URL, DB_* (database gym), SEED_ADMIN_EMAIL, SEED_ADMIN_PASSWORD php artisan migrate --force --seed php artisan storage:link sudo chown -R www-data:www-data storage bootstrap/cache # point an nginx server block at /var/www/gym/public (full example in HowToSetup.md) ```
Set the domain's document root to the `public` folder, create the MySQL database in cPanel, then run the `.env`, `composer install`, `migrate --seed` and `storage:link` steps from the terminal. Run `npm ci && npm run build` once on your computer if the host has no Node.
Quality report
Manually reviewedHow to read the quality report
What this is. Every project on Vibe96 goes through an automated audit of its source code before a reviewer in Dubai checks it by hand. The score is out of 100; 75 is the minimum to be listed, and any single failing check blocks a listing regardless of the score.
- Security
- No real credentials in the code, every data-changing route protected, admin areas role-gated, no SQL built from user input.
- Code structure
- A developer can navigate and extend it: clear module boundaries, no giant files, little copy-paste.
- Docs & completeness
- The setup guide, example config, schema and required files the builder committed to are actually in the archive.
- Dependency health
- Packages pinned, no known critical vulnerabilities, no abandoned libraries in production paths.
- Build & deploy
- A clean machine can restore, build and start it by following the shipped instructions.
Warnings are problems that didn't block the listing; they stay visible here until a later version clears them. The audit reads the code — it does not run it — so always try the live demo before you buy. Lines of code are counted from the same audited archive.
87/ 100
Automated audit score
✓ Passed the auditReviewer notes (3 minor)
Weak default password in seeder; no real credentials found; strong authentication on all mutating endpoints; minor ownership gaps on read-only member data; moderate duplication in filament resources; some oversized form schemas and hard-coded values; schema solid; missing indexes on foreign keys and one unscoped delete in seeder. None of these stop the software from working; the developer has been told and improvements come in a future update.
Versions & updates
No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.
What you get
- </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
- ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
- ↻One year of updatesEvery new version the builder publishes, free for 12 months.
- ♧30 days of supportInstallation and defect support through Vibe96 tickets.