Core platform
- Database connectivity: App can reach Postgres, if this fails, nothing works.
- Config files: Required configs exist to avoid silent misconfigurations.
- PHP extensions: curl (Stripe), gd (QR/images), pdo_pgsql (DB), json.
QR flow
- Directories: qr_codes, temp_qr_codes, vendor/phpqrcode present for IO.
- QR library: phpqrcode loadable.
- Active location: At least one active location to exercise flows.
- Default template on location: Ensures surveys render after scans.
- Survey URL: Uses location + institution (no template in URL).
- QR PNG generation: Generates a real QR (scannable prerequisites).
Surface/UI footprint
- Critical pages exist: index, how‑it‑works, faq, locations, survey, org/superadmin dashboards, blog, analytics.
- Core APIs present: qr, locations, surveys, auth, superadmin, stripe‑webhook, backups, business types.
- HTTP reachability probes: Lightweight checks verify key pages/APIs are reachable without returning server errors.
- Automation scripts: Verifies required cron-driven scripts exist and are readable.
- Stripe config: Keys present for payment/webhook paths.
- Email utils: PHPMailer loads for notifications.
Confidence boosters: one‑click, broad coverage, clear pass/fail with details, aligned to current QR design, repeatable after any deploy.