I added support for Michael Kors, which uses a JSON API similar to Farfetch and Ferragamo. The product data structure is well-defined, making it straightforward to deserialize into strongly-typed classes.

I also refactored the image handling commands. The previous GetMetadataCommand was doing too much - fetching metadata and processing Twitter images. I split it into separate GetMetadata and GetTwitterImages commands, each with a single responsibility. There’s also a new S3UploadImage command dedicated to uploading individual images.

As part of this work, I added logic to block bad images - some product pages return placeholder or error images that shouldn’t be included in tweets.