I’ve never been a fan of the approach of teaching something by giving examples of bad realizations of whatever the subject – for example, Vincent Flanders’ Web Pages That Suck.com (I wish I could think of more examples). In the case of websites, avoiding all elements that suck (according to Mr. Flanders) doesn’t result in a good design. (Here, for some reason, Strunk & White’s “Omit needless words” comes to my mind.) Identifying the sucky things is easy; nailing down the fundamental principles of good design is hard.
But I like the notion of code smells, as defined in Martin Fowler’s Refactoring. The difference is that for each thing that sucks (or smells), the corresponding good alternative is pointed out, along with pointers to how you might improve your design (in the form of references to the catalog of refactorings).
I don’t know whether the process suggested by Christopher Alexander – which seems to me to be “refactoring-driven architecting,” or perhaps even “test-driven architecting,” with the test being “Does it make my life more whole?” – can be adapted for web design.