It looks fine right up until you called his river raise. If he's a normal 25NL player then you have the best hand about 0.1% of the time when he raises you on the river.

If this opponent were any good (which he's not) then I would hate your river bet. It's plain as day that you have an ace with no heart, or maybe something like 99. When you bet $3 into a $10 pot like that, you're basically saying "I want to see a cheap showdown, please don't raise me." A good opponent will exploit that and feel free to make a big raise to push you off your hand, whether he has a heart or not. But a sucky opponent like this guy probably isn't capable of raising that bet if he doesn't have a heart, so your river bet is fine and you can simply fold when he raises you.