No. 12...O-O-O would have been fine for Black.
Going back a little, 10.Nf6+ giving up a pawn to be able to threaten Qh5+ is clearly wrong. 10.exf6 Nxf6 11.Ng3 was much simpler, giving you chances to occupy h5 and/or open the f file with f2-f4.
Going back a little more, 8.e5 seems like a good move, but any time you advance a center pawn you are giving up center squares as well as getting them. Why not play 8.f4 instead trying to immediately profit from the weak black f file? Keep the e and d pawns next to each other until you can REALLY profit from advancing one of them.
Did I just get lucky that my opponent played some bad moves at the end, or were my sacrifices justified?