You are serving a 6,000px image into a 600px box, twenty times per page. Fix the delivery first, it is one component swap.
Replace <img> with next/image and give it real sizes, for example sizes="(max-width: 768px) 100vw, 33vw". It serves AVIF or WebP at the width the layout actually uses, and caches the result. A 7 MB JPEG becomes roughly 60 KB at 600px. That alone is most of your bandwidth and most of the mobile slowness.
Then fix the storage: resize on upload to a sane maximum, 2,400px long edge, and keep the original in cold storage only if a designer needs the download. Right now every visitor pays for the archive copy.