First off, well played! Black made a couple of mistakes, and you punished them with strong attacking play. I love to analyse these games, but don't dare to play like this is live games!
7. d4 definitely looks like a good way to liven things up. 11...d5 is not too clever from black, and 12...Ne7 is disasterous! Now on move 15, I instinctively looked at exf7+, and on checking this with the PC, it reckons it is about equally as strong as exNd7. I liked the idea of cementing the pawn there on f7 with e6, which looks very uncomfortable for black. However, practically, grabbing material makes sense for sure.
18. Qe4 or 18. Qh4 is probably worth a go, since you have the bishop so nicely placed on d3. Also 21. Bxh6 is always fun, but your move was very strong.
Nice game - a powerful attack to savour!
(By the way, this was played on Livechess on 15/0 time controls.