import type { NextConfig } from "next"; const nextConfig: NextConfig = { output: "standalone", poweredByHeader: false, compress: true, images: { formats: ["image/avif", "image/webp"], minimumCacheTTL: 604800, deviceSizes: [360, 640, 768, 1024, 1280, 1536], imageSizes: [64, 96, 160, 256, 384, 560], remotePatterns: [ { protocol: "https", hostname: "media.cruzcloud.net", pathname: "/ari-products/**", }, { protocol: "https", hostname: "shop.cruzcloud.net", pathname: "/images/products/**", }, { protocol: "https", hostname: "shop.cruzcloud.net", pathname: "/images/thumbnails/**", }, ], }, async headers() { return [ { source: "/images/:path*", headers: [ { key: "Cache-Control", value: "public, max-age=604800, stale-while-revalidate=2592000", }, ], }, // Assets de marca (logo, favicon) cambian con cada iteracion de // identidad visual, a diferencia de las fotos de producto -- el // cache de 7 dias de la regla anterior dejaba servido el logo // viejo en Cloudflare/navegador durante toda una semana despues de // cada deploy (ver ADR 0008). Next.js aplica el ultimo header que // matchee un mismo path, asi que esta regla, al ir despues, // sobreescribe el Cache-Control solo para /images/brand/*. { source: "/images/brand/:path*", headers: [ { key: "Cache-Control", value: "public, max-age=300, must-revalidate", }, ], }, ]; }, }; export default nextConfig;