- checker.js: checkSecurityHeaders() graded A+-F, checkSSL() via SSL Labs API
- Both run in parallel with sitespeed.io to minimise wait time
- DB: auto-migrate headers_json + ssl_json columns
- Layout: coach scores + CWV side-by-side, headers + SSL below
- Scorecard + CWV made compact
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- LCP/TTFB/TBT: read from statistics.googleWebVitals (flat median values)
- FCP: statistics.timings.paintTiming['first-contentful-paint']
- pageTimings: nested under statistics.timings.pageTimings, not at root
- Remove PerceptualSpeedIndex (not present in this sitespeed version)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- runner.js: auto-detects sitespeed.io via which/candidates instead of
hardcoded path; collects all stderr and appends last 20 lines to the
error so the real failure is visible in the UI log
- running.pug: render multi-line error messages line-by-line
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sitespeed.io web UI with Express/Pug/SQLite — port 3132.
Includes job queue, SSE live log, full metrics dashboard,
site history, CO2/axe/CWV sections, and Docker support.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>