Whoops my first and second last annonations are early, but you get my drift.
1400 bracket

I only care about long too...but I think black could have prevented mate by 22...f6
Black can not play f6 because if the F pawn moves his king is checked by the bishop.

I wonder why Black didn't play 7...d5. I mean, 8.exd5 exd5 9.Bd3 and Black has achieved at least equality, maybe more. Which means one of your earlier moves was suspect--I'm guessing 5.Nf3 followed by 6.O-O or 6.d4 is stronger.
13...e5! 14.Nde2 Qxd1 15.Rexd1 Nxc2 -+
21.Rg4! - Very nice!
Congratulations on winning and joining the 1400 bracket. :)

Definitely not textbook moves in the opening but a wins a win. Kudos.
What do you think I should have done differently in the opening?

i think b3 was an inaccuracy but you did well with it. i always played closed scillian e4, d3 nd2, g3, bg2, nf3, 0-0 and go from there but what ever youre cofortable with

My supposedly 2500 strength computer analysis agrees with you.
5. B3 - (+0.04) INACCURACY - Perhaps better was 5. d3
11. Be2 (-1.36) MISTAKE - With that last move you went from roughly equal to having a worse position. Your best continuation was 11. exd5
16. c3 (+0.12) INACCURACY - Perhaps better was 16. Qh5
20. Bxd5 (+1.12) INACCURACY - Perhaps better was 20. Qxd5
3 innacuracies and one mistake is definitely one of the better games I have played :D
So I recently reached the 1400 bracket in live chess long (which is all I really care about), after quite a long chess slump. (well a couple of weeks is not so long I guess)
Anyway here is the game which got me there, I think it is one of the best I have played. Comments and critique are very welcome.