Requirements
SupportHub is a Laravel 12 application. The installer checks the critical runtime requirements before setup, but production environments should also meet the operational requirements below.
Server Requirements
| Requirement | Value | Notes |
|---|---|---|
| PHP | 8.2 or newer | Matches composer.json. |
| Database | MySQL or compatible | The installer writes database values to .env and runs migrations. |
| Web root | /public | The domain or local virtual host must point to Laravel's public directory. |
| Writable paths | storage/, bootstrap/cache | The installer checks these plus framework cache, sessions, views, and logs. |
| Queue | sync, database, Redis, or another Laravel queue driver | Production installs should run a worker for mail, reports, and async tasks. |
| Scheduler | Cron every minute | Required for SLA checks, scheduled reports, and time-based automations. |
PHP Extensions
The installer verifies these extensions: openssl, pdo, mbstring, tokenizer, xml, ctype, json, bcmath, and fileinfo.
Composer and Frontend Assets
The app uses Laravel, Spatie Permission, DomPDF, Laravel Excel, Google2FA, Twilio SDK, Vite, Bootstrap Icons, Flatpickr, Select2, and intl-tel-input. On a fresh deployment, run dependency installation and build assets before opening the installer unless your package already ships with built assets.
composer install --no-dev --optimize-autoloader
npm install
npm run build
Background Jobs and Scheduler
Configure one Laravel scheduler entry on the server. This cron entry wakes Laravel every minute; Laravel then decides which app command is due.
* * * * * cd /path/to/supporthub && /usr/bin/php artisan schedule:run >> /dev/null 2>&1
The app scheduler runs these commands:
tickets:check-slaevery five minutes.tickets:run-automationsevery five minutes.reports:send-scheduledhourly.
To test scheduled reports manually, run this from the project root:
php artisan reports:send-scheduled
If the command prints Sent 0 scheduled reports., the command is working but no active schedule was due at that moment, or the due schedules had no deliverable recipients.
If QUEUE_CONNECTION is not sync, also run a queue worker or process manager:
php artisan queue:work --tries=3 --timeout=120
Mail and Storage
- Email is required for password reset, OTP, report delivery, ticket activity messages, and requester portal flows.
- Run
php artisan storage:linkwhen public storage assets or attachments must be served through the web server. - Attachment upload validation allows common image, document, spreadsheet, archive, video, and audio files up to 50 MB per file in ticket flows.
- In-app consultation recordings are stored on the private local disk under
storage/app/private/ticket-video-recordings/{ticket}/{consultation}. Do not expose this folder through the public storage link. - Plan database and storage backups for consultation recordings because browser video files can become large on long sessions.
Browser Support
Use a current Chromium, Firefox, Safari, or Edge browser. The admin UI uses modern JavaScript for async tables, ticket collaboration, form controls, workflow boards, WebRTC video rooms, and MediaRecorder-based consultation recording.
Production video consultations should run over HTTPS so browsers allow camera, microphone, and screen/media capture APIs. Add TURN infrastructure when participants commonly join from strict corporate networks or mobile NATs.