This project went through a lot of iterations before I finished. It turns out that HTML doesn’t really offer any kind semantic markup or even a microformat for song lyrics. This led me to experiment.
I knew I didn’t want to manually update the HTML on every song every time I changed my mind. So I treated the lyrics themselves as data instead of markup. Then, I scripted the output I wanted with Jade and fed it the song data.
Now, I could now change the markup in a single place and all the songs would update. That’s the DRY principle at work.
(If you’re curious, I ended up using unordered lists for each line of the chorus and verses.)
As a result, this project includes the greatest, most beautiful piece of template code I’ve ever written.