Pretty sure I could have won this.. but lost :(
I think you are right.
Your 15th move isn't the best although it's 17... Qc6? that seals the deal. After 17... Qe7 (bringing the kngight back to e7 may or maynot be even better) the situation doesn't look that bad. Black will be few pawns down but there's definite compensation.
15... g6 you suggest is not a bad move but seeing how passive white is (it isn't apparent how he can activate Rh1) you might also want to examine more active alternatives. You must find way to bring your reserves into the attack and one idea to do that might be 15... c6 planning Qc7+0-0-0. Say 15... c6 16. Nc3 (16. Qh5+ g6 17. Qxh7 Be6! and white can't take the bishop due to the weak back rank) Qc7 17. Qh5+ g6 18. Qxh7 Bf2+ 19. Kf1 Bxe3+.
Another interesting idea is 15... Be6!? when 16. Qxd8+? Rxd8 17. Bxe6? is clearly impossible due to 17... Rd1# and 17. Be2 Bc4! 18. Rh3 Rd1+!! 19. Bxd1 Rf1# is no better but white can try 16. Be2/Bb3.
7. ... Ne4 ? was a blunder, offering your opponent a pawn through Qxd5 without compensation.
After 8. Ng5 ? the answer 8 ... Bg4+ ? was also a mistake, you could have won a pawn by simply playing Nxg5 fxg5 Qxg5 attacking with your queen and making room for castling queenside but because of Bg4+ ? you had to retreat your bishop first.
You didn't play Bg3+ too soon, you should have played it even earlier.
11. ... Bg3+ would have caused more trouble to white since you could answer 12. Kf1 with 0-0+ 13.Kg1 Qe7 (14. Qxd5+ Be6) followed by threats white can't defend and if white plays 12.Kd2 instead he'll still be in deep trouble.
Bg3+ would still have been best at move 12 and was at move 13.
16. ... Ke7 looks better than g6 and and even even after 16. ... g6 17. Qxh7 Ne7 you'd still have good attack chances.
Thanks both - always annoying to lose a winning game.