BACKGROUND WORKERS — NO BROWSER REQUIRED
=========================================

The application can now keep scheduled campaigns, subscriber sync, and comment
bulk jobs running even when nobody has the website open.

Set ONE Cron job on the hosting server to run once every minute:

* * * * * curl -fsS "https://YOUR-DOMAIN/scheduler.php?key=YOUR_WORKER_KEY" >/dev/null 2>&1

Replace:
  YOUR-DOMAIN   with your real domain.
  YOUR_WORKER_KEY with the worker key saved in the application settings.

The scheduler wakes:
  1. Due Utility Message campaigns.
  2. Campaigns that were interrupted while processing and still have pending items.
  3. Subscriber sync jobs.
  4. Private-message/comment bulk jobs.

After the scheduler wakes a worker, the worker processes small batches and continues
itself. The browser does not need to remain open.

IMPORTANT:
- Cron must run on the server, not from your Windows PC.
- If your hosting panel has a Cron Jobs section, choose every minute.
- Cairo scheduling is fixed to Africa/Cairo; campaign times are stored safely in UTC.
- Meta Webhooks are independent and continue receiving events through webhook.php.
