Where'd he go wrong?

Firstly, you missed an amazing fork I saw luckily:
14. Qxd5!! Qxd5 15. Nxc7+ Kd8 16. Nxd5 - And you're up a piece.
He would have had about an equal game if with moves 18-20 he would have just given up the knight and attacked your queenside pawns.
Moves 18 and 19 are not the best, but 20...Qc6?? is a downright blunder. I think 20...0-0 followed by 21...Rxa2 or 21...Qxb2 would have given him a definite shot. You might still be up a pawn materially, but that's a pretty tough game to win with all the heavy pieces (Rooks and queens) still on the board.
EDIT: I would like to say that I did not see Reb's comments until after I posted and I did not copy him.