Skip to main content

Realtime & Broadcasting

Settings โ†’ Advanced โ†’ Realtime configures the WebSocket broadcasting layer that powers live updates in the LeadHub admin panel.

When realtime is enabled:

  • The Live Lead Feed widget on the dashboard updates instantly when a new lead arrives
  • Notification badges appear without page refresh
  • The Kanban board reflects drag-and-drop changes by other team members in real time

When realtime is disabled, the panel falls back to polling (page refreshes every 30 seconds).


Supported Driversโ€‹

DriverHosted?CostNotes
Pusherโœ… CloudFree tier availableMost popular, easiest setup
Laravel ReverbโŒ Self-hostedFree (server cost only)Official Laravel WebSocket server
SoketiโŒ Self-hostedFree (server cost only)Lightweight Pusher-compatible server
Disabled (polling)โ€”FreeNo WebSockets; panel polls instead

Shared hosting: Pusher is the easiest option. Self-hosted Reverb/Soketi require a VPS with persistent processes.


Option A โ€” Pusher (Hosted)โ€‹

Step 1 โ€” Create a Pusher Appโ€‹

  1. Sign up at pusher.com (free tier: 200 connections, 200k messages/day).
  2. Go to Channels โ†’ Create App.
  3. Give it a name (e.g. LeadHub) and select your region.
  4. Under App Keys, copy:
    • App ID
    • Key
    • Secret
    • Cluster (e.g. us2, eu)

Step 2 โ€” Configure in LeadHubโ€‹

  1. Go to Settings โ†’ Advanced โ†’ Realtime.

  2. Set Driver to Pusher / Soketi / Reverb (Pusher Protocol).

  3. Fill in:

    FieldValue
    Enable Realtime UpdatesToggle on
    App IDFrom Pusher App Keys
    App KeyFrom Pusher App Keys
    App SecretFrom Pusher App Keys
    ClusterYour Pusher cluster (e.g. us2)
    Custom HostLeave blank (Pusher cloud)
    Port443
    SchemeHTTPS
  4. Click Save Settings.


Option B โ€” Laravel Reverb (Self-Hosted)โ€‹

Reverb is an official Laravel WebSocket server that uses the Pusher protocol.

Step 1 โ€” Install Reverbโ€‹

On your server:

php artisan reverb:install

Start Reverb with Supervisor:

[program:reverb]
command=php /var/www/leadhub/artisan reverb:start --host=0.0.0.0 --port=8080
autostart=true
autorestart=true
user=www-data

Step 2 โ€” Configure in LeadHubโ€‹

  1. Go to Settings โ†’ Advanced โ†’ Realtime.

  2. Fill in:

    FieldValue
    App IDAny string, e.g. leadhub-reverb
    App KeyAny string (must match Reverb config)
    App SecretAny string (must match Reverb config)
    ClusterLeave blank
    Custom HostYour server's hostname (e.g. ws.yourdomain.com)
    Port8080 (or your Reverb port)
    SchemeHTTPS (if behind SSL proxy) or HTTP

Option C โ€” Soketi (Self-Hosted, Lightweight)โ€‹

Soketi is a lightweight Node.js Pusher-compatible server.

Step 1 โ€” Install Soketiโ€‹

npm install -g @soketi/soketi
soketi start --config.port=6001 --config.appManager.driver=array \
--config.appManager.array.apps.0.id=leadhub \
--config.appManager.array.apps.0.key=leadhub-key \
--config.appManager.array.apps.0.secret=leadhub-secret

Step 2 โ€” Configure in LeadHubโ€‹

  1. Go to Settings โ†’ Advanced โ†’ Realtime.

  2. Fill in:

    FieldValue
    App IDleadhub (your Soketi app ID)
    App Keyleadhub-key
    App Secretleadhub-secret
    Custom HostYour server hostname
    Port6001
    SchemeHTTPS or HTTP

Option D โ€” Disable Realtime (Polling)โ€‹

  1. Go to Settings โ†’ Advanced โ†’ Realtime.
  2. Toggle Enable Realtime Updates off, or set Driver to Disabled (polling only).
  3. Click Save Settings.

The panel refreshes every 30 seconds. All features work correctly โ€” just without instant live updates.


Troubleshootingโ€‹

ProblemSolution
Live lead feed not updatingVerify the App Key/Secret matches your Pusher/Reverb/Soketi config
WebSocket connection errors in browser consoleCheck the Custom Host, Port, and Scheme settings
Reverb/Soketi not connectingEnsure the process is running and port is accessible (firewall rules)
"Restart the queue worker after changing the driver"If you change the broadcasting driver, restart your queue worker process

After changing realtime settings, a hard browser refresh (Ctrl+Shift+R) is needed for the new settings to take effect in the frontend.