After more digging, I have no idea why it broke. The uploadBlob handler does mime sniffing, which ought to always be able to detect jpegs, and override whatever mime was specified (or not) on upload
I’ll go back to an old graysky version and see if it still works when I have a free moment. Very possible I did something to break it (maybe during the compression step?)
super hard to debug network issues using React Native, in the end the problem was that @atproto/api uploadBlob wasn’t detecting the mime type so didn’t add the Content-Type header, which the server then rejected. Took me ages to figure out what was wrong tho