What we have learned building a transforming image proxy: formats, caching, and the arithmetic behind a page that loads quickly. No launch announcements.
Centre-cropping fails on rule-of-thirds composition, group shots and anything with copy space. What a saliency map actually predicts, why it needs a centre bias, and what to cache so it stays affordable.
Read itsrcset, sizes, and why a continuous range of widths is the wrong answer. How to pick a handful of sizes and stop shipping a 2000px hero to a phone.
Read itReserving the space costs nothing and is skipped constantly. Filling it is the second half — and the placeholder tiers differ by an order of magnitude in bytes for a difference few users can see.
Read itEvery parameter you allow in a URL is a dimension. Four of them turn one image into a few thousand renditions, and the arithmetic is worth doing before your origin bill does it for you.
Read itA domain allow-list stops another site embedding your images. It does not stop anyone who has your key, because the header it trusts is written by the caller — and omitting it is easier than forging it.
Read itContent negotiation done properly — what the Accept header actually tells you, why Vary matters more than the format you picked, and how to avoid serving AVIF to something that cannot read it.
Read itBefore fonts, before JavaScript, before anything clever: the pictures. Why image bytes dominate a page, and the three changes that move the number most.
Read itMaking a 300px thumbnail from a 24-megapixel photograph does not require decoding 24 megapixels. How JPEG's block structure lets you skip most of the work — and the size guard it quietly breaks.
Read itA photograph carries GPS coordinates, a camera serial number and a thumbnail that does not update when you crop. What to strip, and the two tags that break the picture if you strip them blindly.
Read it