- GTM dataLayer events: add_to_cart (CartContext), begin_checkout, form_submit_success on all forms and checkout - UTM: persist landing params in sessionStorage (UtmCapture in layout); fix field names — forms sent utm_source while /api/leads expects utmSource, so UTM was silently dropped; LeadFormBlock also sent 'source' instead of required 'formSource' (leads were rejected) - robots.ts + sitemap.ts (static pages, blog posts, locations) - PageHero: alt text for hero background - VideoSection: lazy-load video on scroll into view; hero reels transcoded 57.5MB -> 9.6MB mp4 / 33.7MB -> 10.9MB webm - Caddy: HSTS, nosniff, X-Frame-Options, Referrer-Policy headers Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
393 B
Caddyfile
21 lines
393 B
Caddyfile
{
|
|
auto_https off
|
|
}
|
|
|
|
:80 {
|
|
redir https://{host}{uri} permanent
|
|
}
|
|
|
|
:443 {
|
|
tls /certs/cert.pem /certs/key.pem
|
|
|
|
header {
|
|
Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
|
X-Content-Type-Options "nosniff"
|
|
X-Frame-Options "SAMEORIGIN"
|
|
Referrer-Policy "strict-origin-when-cross-origin"
|
|
-Server
|
|
}
|
|
|
|
reverse_proxy app:3000
|
|
}
|