5. h3 , 11. a3, and 12. f3 are wastes of time. White should have been rushing his kingside pawns at you and breaking up your cover on the kingside. He should open lines for his rooks, sacrificing if he needs to. Otherwise, black just has a better ending from this position. This is a well known idea from the dragon Sicilian.
By move 18, he no longer has the artillery to mount an attack so his pawn advances are not nearly as dangerous.
20. f5? I don't understand it either, it seems to just give away a pawn. This turns out to be the difference in the endgame.
28. Ke3 is a mistake. His only hope down a pawn is to keep the rooks on. After the rooks are traded it's all technique.
Here's a game I recently finished at this site. I'm proud to say that I don't believe either my opponent or myself made any monstrous mistakes here. Any feedback on what I could have done better would be appreciated. Be sure to check the move list for variations.