Go-live checklist
The final pre-launch checklist — server, security, email, Meta, WhatsApp, payments, mobile, cron, backups and monitoring — before real leads flow.
Work through this list top to bottom on a fresh production install before handing it to a client or pointing real ad spend at it. Every item is verifiable from the app or the server; nothing here is theoretical.
Who this is for
- Super-admin / hosting admin — running the launch.
- Support / account manager — auditing a deployment someone else built.
Prerequisites: completed cPanel deployment walkthrough and Domain, subdomain & SSL.
1. Application & server
- [ ] PHP 8.4 selected for the domain; all required extensions green in the installer /
php -v - [ ] Document root points at
public/— or the subfolder bridge works (/crm/loginloads) - [ ]
APP_ENV=productionandAPP_DEBUG=falsein.env - [ ]
APP_URLmatches the real HTTPS URL exactly (no trailing slash, includes subfolder if any) - [ ]
APP_KEYset (installer did it; changing it later breaks encrypted data) - [ ]
php artisan storage:linkran — logos/attachments/recordings serve correctly - [ ]
storage/andbootstrap/cache/writable (775), no permission errors inlaravel.log - [ ]
php artisan optimize:clearrun after the last.envedit
2. Database
- [ ] Dedicated DB user with rights on only this database
- [ ] Migrations all
Ran(php artisan migrate:statusor installer finished) - [ ] Base seeders applied (roles/permissions/plans); no demo seeders on production
- [ ]
GET /api/v1/healthshowschecks.db: "ok"
3. Security
- [ ] HTTPS certificate live; Force HTTPS on
- [ ] Session hardening enabled on HTTPS:
SESSION_SECURE_COOKIE=true,SESSION_HTTP_ONLY=true,SESSION_SAME_SITE=lax - [ ]
TRUSTED_PROXIESset correctly if behind Cloudflare/host proxy - [ ]
SA_IP_ALLOWLISTconsidered for the platform panels (optional but recommended) - [ ]
SECURITY_ENFORCE_2FAdecision made for platform staff - [ ] All default/demo passwords changed; owner account uses a strong password
- [ ]
LEADHUB_DEMO_MODEoff - [ ]
.envnot readable over HTTP (dotfile blocks active) - [ ]
storage/installed.lockpresent (installer cannot re-run)
4. Email
- [ ] SMTP configured in Settings (host, port, user, password, from-address)
- [ ] Test e-mail sends and arrives (check the spam folder; SPF/DKIM at the domain if it lands there)
- [ ] A test invitation reaches a real inbox
5. Meta (Facebook) lead ads
- [ ] Platform app credentials saved in Super Admin → Settings → Meta Developer (health card green)
- [ ] OAuth redirect URI pasted into the Meta app dashboard
- [ ] Test tenant connected via OAuth; Page + Ad Account selected
- [ ] Lead forms selected (only selected forms ingest) and field mapping verified
- [ ] End-to-end test lead submitted from a real form and visible in the workspace within a minute
- [ ] Webhook log shows the delivery (
pending/processed), notinvalid_signature - [ ]
leadhub:meta-healthtask has run at least once (every 6 h)
6. WhatsApp
- [ ] WABA / phone number connected in workspace settings
- [ ] Callback URL + verify token pasted into Meta and verified (handshake returns the challenge)
- [ ] App secret present so
X-Hub-Signature-256is verified - [ ] Message templates approved and their statuses synced
- [ ] Test inbound message appears in the inbox; test outbound template sends
- [ ] STOP keyword opt-out verified on a test number
7. Payments (only if commercial billing is live)
- [ ] Razorpay/Cashfree keys + webhook secret saved in Super Admin → Billing → Providers & Settings
- [ ] Webhook URLs registered at the provider
- [ ] Test payment completes; invoice + payment records update
- [ ] Allowlist
RESTRICTEDlifecycle screens (grace → restriction) reviewed with the client
8. Mobile app
- [ ] Mobile server URL points at
https://…/api/v1/mobile/(trailing slash) — in the distributed build and/or via Advanced → Server URL - [ ]
POST /api/v1/mobile/loginsucceeds with a real agent account - [ ] Push token registered (device/register) and a test push arrives
- [ ] Offline queue syncs after reconnect; Device Health screen shows a sane state
9. Cron & queue
- [ ] Exactly one scheduler entry present (or the
cron.phpvariant), running every minute - [ ] Queue drained:
jobstable does not grow unbounded; a test e-mail sent while watching the log fires its job - [ ]
failed_jobsinspected — recurring failures understood before launch - [ ]
queue:restartrun after the final deploy
10. Backups
- [ ] One manual backup created and verified (smoke test)
- [ ] Nightly backup toggle decision made; if on, next 02:00 run confirmed
- [ ] Prune/retention chosen and an off-site copy downloaded
- [ ] Restore procedure documented for whoever is on call (see Backups & restore)
11. Monitoring & ops
- [ ] Uptime monitor pointed at
/api/v1/health(expects 200ok; 503 means degraded) - [ ]
LOG_LEVELsensible (errororwarning); log rotation/disk watched - [ ] Daily-checks habit agreed (Daily checks)
- [ ]
leadhub:check-updates(or the in-app updater) used to confirm the version before hand-off
Sign-off
| Area | Owner | Date |
|---|---|---|
| Server & TLS | ||
| Meta / WhatsApp | ||
| Payments | ||
| Mobile | ||
| Backups |
Common mistakes
- Skipping the end-to-end test lead, then discovering field mapping is wrong during a live campaign.
- Launching with cron missing — nothing time-based works, including backups.
- Leaving
APP_DEBUG=true"just for launch week". - No off-site backup copy.
- Handing over before the client can log into the mobile app on a real phone.
Troubleshooting
| Symptom found during checklist | Where to go |
|---|---|
| Health endpoint 503 | laravel.log; subsystem named in checks |
| Test lead never appears | Leads not entering the CRM |
| WhatsApp handshake fails | Webhook endpoints |
| Cron not firing | Cron & queue workers |
| Mobile cannot log in | Mobile troubleshooting |
Related guides
Was this page helpful?
Thanks — noted. ✦