A series of unfortunate events ...
In summary
1. first technical interview was all html questions, and they were very odd questions - such as multiple choice questions on what is the correct tag for some very very rarely used elements. Not a good indicator of dev skill, because this is the stuff people don't memorize but just google the tag because it takes 3 seconds. Nothing to show css or javascript skill.
2. The recruiter I was working with forgot that we had already spoke on my second interview with him until I had to remind him. Awkward.
3. They emailed me before my last technical interview to schedule another panel interview. I thought it was odd that I received it before even finishing the second technical interview, so I asked about it to confirm. I was told that it wasn't a mistake and they wanted to schedule because things were looking 'very good for me'. So I sent my availability to them, but then I never heard back until I emailed them a week later at which time I was told they went with another candidate.
I just pretty much felt like they (especially the recruiter) were mixing their candidates up throughout the process.