:80 { root * /srv/web/dist encode gzip zstd header { X-Content-Type-Options nosniff X-Frame-Options DENY Referrer-Policy strict-origin-when-cross-origin Cross-Origin-Opener-Policy same-origin Cross-Origin-Resource-Policy same-origin Permissions-Policy "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), usb=(), web-share=(), xr-spatial-tracking=()" Content-Security-Policy "default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: blob: https://avatars.githubusercontent.com; connect-src 'self' ws: wss:; worker-src 'self' blob:; frame-src 'self' https:; manifest-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' https://github.com; object-src 'none'" } @sourceMaps path *.map handle @sourceMaps { respond 404 } @cacheAssets { path /assets/* not path *.map } header @cacheAssets Cache-Control "public, max-age=31536000, immutable" @htmlNavigation { header Accept *text/html* not path /assets/* } handle @htmlNavigation { try_files {path} /index.html header Cache-Control "no-cache" file_server } handle { file_server } }