next.config.mjs:
images: {
domains: ["secure.meetupstatic.com", "images.cppserbia.org"],
unoptimized: true,
},
Two problems:
domains is deprecated in favour of remotePatterns.
unoptimized: true makes every next/image a plain <img> at full source resolution.
The cost just went up: speaker portraits are 750×750 PNGs (scripts/upload-speaker-avatar.ts, AVATAR_SIZE = 750) rendered into a 72px slot on the event page, and a 56px slot on panels. That is on top of the full-size event banners already used as hero backgrounds.
Fix
Move to remotePatterns, drop unoptimized, and confirm the Vercel image optimizer is happy with the R2 origin at images.cppserbia.org. Check the OG image route (opengraph-image.tsx) separately — it runs under Satori and deliberately uses a raw <img>.
next.config.mjs:Two problems:
domainsis deprecated in favour ofremotePatterns.unoptimized: truemakes everynext/imagea plain<img>at full source resolution.The cost just went up: speaker portraits are 750×750 PNGs (
scripts/upload-speaker-avatar.ts,AVATAR_SIZE = 750) rendered into a 72px slot on the event page, and a 56px slot on panels. That is on top of the full-size event banners already used as hero backgrounds.Fix
Move to
remotePatterns, dropunoptimized, and confirm the Vercel image optimizer is happy with the R2 origin atimages.cppserbia.org. Check the OG image route (opengraph-image.tsx) separately — it runs under Satori and deliberately uses a raw<img>.