Bottom line: for a beginner SaaS, put originals in object storage and have a backend worker write each thumbnail as a separate object with a deterministic key; don't make edge transformation or synchronous resize-on-upload part of the first critical path. This is the boring design, which is exactly what I want when my platform team owns the pager. It separates durable bytes from compute, lets the application ask for a known object instead of a magical transformation URL, and gives us a queue ...