I also can't agree with the recommendation on using pixel values over relative values. I guess most people are using some sort of CSS preprocessor these days, so a pixel to rem mixin would be my recommendation.
Not to poo-poo the whole thing though. A lot of that stuff I agree with. A small amount I don't, and a couple of things I think are up for debate.
Is there any explanation for the reason for a lot of these things?
Some things are just personal preferences and some things are just completely subjective. Overall, though, these advices tend to make front-end code better. The JS part, for example, is largely based on functional programming best practices. Things like immutability, statelessness and the point about JS performance aren't subjective: they'll basically always improve your code's quality.
// bad void function() { /* IIFE / }();
// good (function() { / IIFE */ }());
To me, the "bad" one was more readable until I noticed you were invoking the function. Personally, I don't like either notation, but the point is that this example (along with quite a few others) seems to need more explanation to get the point across.
I would maybe think about defining "IIFE" as well as maybe sectioning off the more "functional programming" sections.
Thank you for taking the time to put this together.
const toArray = (() => Array.from ? Array.from : obj => [].slice.call(obj) )();