Serve the built PWA behind your own domain: multi-stage Dockerfile builds
dist/ and serves it with Caddy on :80 (TLS terminated at your Cloudflare
edge). Caddyfile sets no-cache on sw.js/index/manifest and immutable on
hashed assets; SPA fallback to index.html. docker-compose maps :8087.
Verified locally: image builds, container serves 200s with correct cache
headers and SPA fallback.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>