20...Re8 looks too slow. Black should try 20...Qd7 and 21...Qd6 and try to trade off Queens.
21...Rh8 looks like a waste in tempo. Perhaps 21..Nb4 and 22...Nd3.
Another idea instead of 22.Re5 is 22.Bxd5! cxd5 23.Nxg7 and if 23...Kxg7, then 24.Rxe7+ Kg8 25.Qg6+ Kf8 26.Qf7 mate.
Instead of 25...Qd6, Black should try 25...Qe8 and exchange Queens.
26...Rc8 is the losing move. Perhaps best is 26...Nc7 and try to exchange some pieces and uncramp Black's game. But White should still win after 27.hxg5 hxg5 28.Nxc7 and 29.Bxg5.
Over the weekend I participated a 4-round USCF rated swiss tournament, G90. In the first game, I played against a 1400-player. He misplayed the opening but defended pretty well til the end. Here is my first round game (annotated). I will annotate the other three in the coming days.
My comment on moves 12 & 13, that Black's Queen can be captured, overlooks the possibility of f5. I cannot change the annotation now, so excuse me.
Your comments to the game or annotation are welcome.