I resize on the client before upload when I can. I keep originals only when I must replay preprocessing. Everything gets a stable path: sku/date/uuid, not "final_final2.jpg."
Access is explicit. Product library photos can be public. Exception photos of a messy returns table might not be.
Delete is a feature
A lead removing a bad library photo should not 404 the app. Soft delete or a fallback image. Hard delete from storage when policy says so, including thumbnails you forgot.
Backup is not a folder on a laptop
If the visual library lives in one bucket with no lifecycle and no backup story, you will learn that during the week you needed a lookalike pair from last month.