Skip to content
ESC

Searching...

Quick Links

Type to search • Press to navigate • Enter to select

Keep typing to search...

No results found

No documentation matches ""

Health Center.

System diagnostics dashboard for monitoring your Reward Loyalty installation.

Jun 11, 2026

The Health Center is a read-only diagnostics dashboard available to super administrators. It runs real-time checks against your server environment, database, storage, and services, helping you identify and resolve configuration issues before they affect your users.

Accessing the Health Center

Navigate to Admin → Health Center in the sidebar. The Health Center is only visible to super administrators (role 1).

A JSON endpoint is also available at /{locale}/admin/health/json for programmatic monitoring or external uptime tools.

What Gets Checked

The Health Center runs 15 diagnostic checks across 5 categories:

Environment

Check What It Verifies
PHP Version PHP 8.2+ recommended, 8.1+ required
PHP Extensions All 12 required extensions are loaded
Disabled Functions proc_open, proc_close, exec, shell_exec are available

Application

Check What It Verifies
APP_URL Matches the current request URL
Debug Mode Disabled in production (prevents exposing sensitive data)
HTTPS Active for production environments
App Version Current installed version

Database

Check What It Verifies
Connection Database is reachable
Version Database server version (MySQL, MariaDB, SQLite)
Migrations All migrations are applied, none pending

Storage

Check What It Verifies
Writable Directories All 6 required directories are writable
Storage Symlink public/storage symlink exists

Services

Check What It Verifies
Queue Driver Queue is configured and processing jobs
Mail Driver Mail transport is configured for transactional email
Cron / Scheduler Laravel scheduler is running via cron
Birthday Sweep Birthday vouchers were issued today (only when a club has the birthday reward configured)
Win-Back Sweep Win-back vouchers were issued today (only when a club has the win-back reward configured)
Pass Expiry Sweep Lapsed prepaid passes were closed out today and expiry reminders went out (only when members hold active passes)

Status Levels

Each check reports one of three statuses:

  • OK — Check passed, no action needed
  • Warning — Non-critical issue that should be reviewed
  • Critical — Requires immediate attention

The summary cards at the top show the total count for each status level.

Reward Loyalty uses Laravel's task scheduler for background operations. All core loyalty features work without cron — it is recommended for automated maintenance, not required.

What the scheduler handles:

  • OTP cleanup — removes expired one-time passwords hourly
  • Birthday vouchers — issues birthday rewards daily at 02:30
  • Win-back vouchers — issues win-back rewards daily at 02:45
  • Stamp card expiration — processes expired stamps daily at 03:00
  • Pass expiry — closes out lapsed prepaid passes and sends expiry reminders daily at 03:15
  • Demo refresh — resets demo data daily (demo mode only)
  • Health heartbeat — writes a timestamp every minute for diagnostics

To enable the scheduler, add this cron entry to your server:

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

On cPanel, use the Cron Jobs interface to add this command with a "Once Per Minute" frequency.

If the scheduler is not configured, the Health Center shows a warning. The daily loyalty tasks — birthday vouchers, win-back vouchers, stamp card expiration, and pass expiry — still run: the first admin, partner, or staff activity of the day triggers them in the background, at most once per day. OTP codes still expire on their own, but database cleanup runs only with cron, and the daily tasks may run later in the day than their scheduled time.

Scheduled Tasks Panel

Below the status banner, the Scheduled tasks panel shows the daily loyalty tasks — birthday vouchers, win-back vouchers, stamp card expiration, and pass expiry — with the date of their last run and the result. Each task has a Run now button that processes it immediately. All tasks are safe to run repeatedly: members never receive duplicate birthday or win-back vouchers, stamps only expire when they are actually due, and each pass sends its expiry reminder at most once.

Use Run now after configuring a birthday or win-back reward to issue today's vouchers right away, or to verify a task works before relying on the schedule.

Queue Driver Guidance

Reward Loyalty uses queued jobs for email delivery, notifications, and integrations. The queue driver determines how these jobs are processed:

Driver Behavior Recommended For
Sync Jobs run immediately during the HTTP request Single-business installs, shared hosting
Database Jobs are stored in the database and processed by a worker Multi-partner installs, moderate traffic
Redis Jobs are stored in Redis and processed by a worker SaaS operators, high-volume deployments
Null Jobs are silently discarded (⚠️ warning) Testing only — mail and notifications will not be sent

For most self-hosted installs, sync is perfectly fine. The application works correctly with sync queues — jobs simply run inline instead of being deferred. If you notice slow page loads when sending email or processing large batches, switch to database and run a queue worker.

To start a queue worker (for database or Redis drivers):

php artisan queue:work --sleep=3 --tries=3

On production servers, use a process manager like Supervisor to keep the worker running.

JSON API

The Health Center JSON endpoint returns structured diagnostic data:

GET /{locale}/admin/health/json

Response:

{
  "success": true,
  "data": {
    "checks": [
      {
        "category": "environment",
        "label": "PHP Version",
        "status": "ok",
        "value": "8.4.1",
        "detail": null
      }
    ],
    "summary": {
      "ok": 14,
      "warning": 1,
      "critical": 0,
      "total": 15
    }
  }
}

This endpoint requires admin authentication and super administrator role.