:{$PORT:5000} {
    root * /usr/share/caddy

    header {
        Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' https: http: ws: wss:; worker-src 'self' blob:"
    }

    @staticAssets {
        path *.js *.wasm *.woff *.woff2 *.ttf *.otf
    }
    header @staticAssets Cache-Control "public, max-age=86400"

    @hashedAssets {
        path_regexp hashedAssets .*[._-][0-9a-fA-F]{8,}\.(js|css|wasm|woff2?|ttf|otf)$
    }
    header @hashedAssets Cache-Control "public, max-age=31536000, immutable"

    @serviceWorker path /flutter_service_worker.js /version.json
    header @serviceWorker Cache-Control "no-cache, must-revalidate"

    @index path / /index.html
    header @index Cache-Control "public, max-age=300, must-revalidate"

    # Proxy API calls to backend service on the internal Docker network.
    handle /api/* {
        reverse_proxy recipe-api:8080
    }

    # SPA-routing – returnera alltid index.html för okända paths
    handle {
        try_files {path} /index.html
        file_server
    }

    encode gzip
}
