No need to play 15...Nxf3 imo, your knight is strong there so I would have left it on d4.
He retook with 16. Qxf3 and then missed 17. Qxb7, maybe he just didn't want to open the b-file.
I think 20...f5 was a mistake, probably the mistake of the game. You weaken your control of e5 which really comes back to bite you, and it loosens the squares in front of your king, where his pieces are gathering. It also opens the file so his queen is pointing right at your king.
I got to a good position but it all went downhill from here. Any advice on how could i have turned the game around?