Unless I'm missing something, White had a perpetual with 37 Qe5+.
In general I think you seem from your notes to be overestimating your opponent's chances while negating your own. Your opponent would've had a good game if he had not stranded his knight, but after he hung it it was your game all the way (until right at the very end...or so it should've worked out).
Au contraire, I think doubling your rooks worked out fine! Of course, being a piece down your opponent had to try something, but opening up the game like that will only help your attack. For example, 27... Re2 looks very strong to me. Now White pretty much has to play 28 Qf1 (to prevent the lethal 28... Qh3), and then you can win the queen with 28... Re1.
You said you weren't very happy by your 31st move...but I would be delighted with your position! White's king is wide-open with no defenders to speak of, and its days look numbered indeed. One or two more checks and the big guy with the funny hat is likely to be a goner (don't get too cocky about it though; kings have been known to run for days and days if you let them). Anyway, so forget about your hanging bishop; that is, unless it can join in the attack! You had a mate with 32... Qc6+ (33 Ke3 Qe8+), and also I think 32... Qh3 would be strong, since he can't ever flee to e4 because of Qe6+.
One more idea earlier (which I couldn't quite manage to work in, mainly because there were other, stronger continuations) was ...c4 followed by ...Bb6+. Such a notion can be potent in similar situations.


Here's my first game analysis. It's a 10 minute game played here and my opponent were ranked slightly lower than me. But since I'm fairly new to chess it's entirely possible he's a lot better than me. Usually I get into time trouble and I suck enough at end games that I need time to think to be able to finish even if I do wind up ahead.
Mostly I try to play at least somewhat principled and hope good things happen rather than doing much calculating. Mostly because I am much too slow to be able to afford it. But remember, I basically suck a lot so there's a ton of mistakes (including a missed forced checkmate deftly turned into a bungled perpetual check). My annotations are done without engine aid, but I took a look afterwards and my thoughts weren't exactly spot on.