A few remarks:
15. b4 is insane. White is opening up his own king, just asking to get checkmated. I wonder what was his reasoning for that.
17. - Qc8 is a very bad move. You should develop your knight somehow, then put the rooks on c8 and b8 and get a devastating attack. Instead you decided to exchange queens, which kills your own attack, loses the d6 pawn immediately and gets you in a really bad endgame. I have no idea what you had in mind.
23. Nd3 was a very weird move by white. 23. Nc6 would win an exchange (or a piece) and the game. Still, that endgame seemed hopeless with your pinned and paralyzed pieces, but you persevered and he blundered, that's very good.
Hey all, I wanted to share a game I just played, to see if any of you big brain chess peeps have any further insights. I recognise the blunder I made that nearly cost me the game, I didn't even think about Re8, as a move to avoid back rank mate, but I suppose this is why analysis is so valuable. I was pleased with my endgame as I think I'm usually weak in this area, even if my opponent messed up a little with getting his knight pinned. Any comments appreciated, currently trying to get back over a thousand, I took a few months off chess and my rating slipped but back on the rating grind.