Cursed knowledge

Cursed knowledge I learned while building Unsung that I wish I didn’t have to know. (Please note some of this might be skill issue – let me know!)

December 2025–July 2026

  • In 2026, emails still don’t support inline videos.
  • RSS readers sanitize HTML in different ways, making for example inline video tricky. Some RSS readers do not offer to play video at all, but wrapping videos in <a> links to make them active in those readers overrides inline playback controls in other readers.
  • You can use QuickTime Player to record screen from your USB-connected iPhone, and even your Apple TV over wi-fi, but the option to use is New Movie Recording, not New Screen Recording.
  • You can make videos with full 8-bit transparency, but they have to be encoded differently for Safari and differently for Chrome.
  • Browsers do not allow you to check video’s framerate (out of fears of fingerprinting), so you have to pass that on as metadata from elsewhere.
  • It is possible for simultaneous video playback to slow down or even crash user’s browser, especially on mobile – inexplicably, browsers do not seem to be garbage collecting or throttling those to prevent crashing.
  • Videos sometimes have subtle borders on their edges. It apparently has to do with rounding up the width/​height internally by video decoders to multiples of 8px or 16px, but making sure the width/​height is divisible by those large multiples is not realistic for small video, and even trying to do that didn’t get rid of borders reliably, anyway.
  • Pixel density in images is sometimes stored (or ImageMagick outputs it) in centimeters, which means that after conversion it arrives as 143.99ppi instead of 144ppi.
  • On (touch) smartphones, a click event has pointerType == "click" on iPhone, but "touch" on a Pixel Phone.
  • In CSS, there is no way to easily make responsive images with consistent aspect ratio and min width and max width without resorting to object-position, which makes laying multiple images side by side impossible as the container doesn’t wrap around the image. The only way I found to do this is by using unpleasant manual aspect ratio calculations (which you can see on this site for every image).
  • There are still ways where the (already very messy) CSS syntax for word wrapping doesn’t account for all the common possibilities, and you have to manually or programmatically insert zero-width spaces to allow for breaking (e.g. URLs). In my experience, it’s very hard to tell CSS “break, but only if you absolutely have to.”
  • After all these years, you still have to specify -webkit-user-select: none; next to user-select: none; to cover all your bases.

This page inspired by Cursed Knowledge by Immich.