Laravel based web application for gym & club management. Currently being used by many fitness centers. For more information, visit - https://www.gymie.in
- PHP >= 8.2
- Laravel Framework ^12.0
- Filament Admin Panel 5.x
- Livewire ^3.0
- nnjeim/world ^1.1
- barryvdh/laravel-dompdf ^3.1
- Laravel Herd (optional for local development)
To set up Gymie, follow these steps:
Clone the repository to your local system:
git clone git@github.com:lubusIN/laravel-gymie.gitcd laravel-gymiecomposer installRun the following script to prepare your environment:
composer run prepare-envThis will:
- Copy
.env.exampleto.env(if missing) - Clear config cache
- Generate application key
- Create a symbolic link to the storage folder
- Set your database credentials.
- Update other relevant configuration values.
- Set your application URL:
APP_URL=https://laravel-gymie.test
You can set up the database in one of two ways, depending on your requirements:
Option 1: Blank Setup (Recommended for Production)
Run the following command:
composer run setupNote
This command will prompt you to create an admin user via the terminal.
This will:
- Set up the environment (.env, app key, storage link)
- Run a fresh migration to create database tables
- Seed the world data (countries, states, cities)
- Create a default Filament admin user
Option 2: Demo Setup
If you want to explore the system with all demo data preloaded, use:
composer run setup-demoThis command will:
- Reset the database
- Seed all available demo data
- Prepare the environment automatically
Caution
This process will erase all existing data. Use it only in a local or demo environment.
Login credentials:
Email: test@example.com
Password: testMemory Errors
Ensure PHP has enough memory allocated. Edit your php.ini:
memory_limit = 512MSeeder Performance
Seeders (like WorldSeeder) can add significant data and slow down performance. For production, avoid full seeding and run only necessary seeders:
php artisan db:seed --class=WorldSeederphp artisan serveOr with Laravel Herd:
herdTo process background jobs:
php artisan queue:workphp artisan schedule:workNote
The scheduler must be running continuously to trigger time-based tasks (e.g., status updates).
If those tasks dispatch queued jobs (like import/export or notifications), then the queue worker must also be running to process them.
Gymie ships with a versioned JSON API under routes/api.php for integrations.
- Login:
POST /api/v1/auth/login - Current user:
GET /api/v1/me - Logout:
POST /api/v1/auth/logout
Example:
curl -sX POST "$APP_URL/api/v1/auth/login" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"password"}'Use the returned token:
curl -s "$APP_URL/api/v1/me" \
-H "Accept: application/json" \
-H "Authorization: Bearer <token>"Notes:
- The API is bearer-token only. Being logged into Filament in the browser does not authenticate API requests.
/api/v1/mealways includes roles and permissions. Other user endpoints include permissions only when requested:GET /api/v1/users?include=permissionsorGET /api/v1/users?include_permissions=1
All index endpoints support allowlisted query params:
- Search:
?q=... - Pagination:
?page=...&per_page=... - Sort (multi-sort):
?sort=-created_at,name - Soft deletes (where supported):
?trashed=with|only - Includes (allowlisted):
?include=service,subscription.member - Filters (allowlisted):
?filter[field]=value- Range syntax for date/datetime:
?filter[date]=2026-03-01..2026-03-31
- Range syntax for date/datetime:
Allowlists (searchable/sortable/includes/filters) are defined per resource in:
app/Services/Api/Schemas/*Schema.phpvia::queryRules()
LUBUS is a web design agency based in Mumbai.
Gymie is an open-sourced saas licensed under the MIT license
