This was a good game for your level, nicely done. My suggestion for improvement would be to put more emphasis on the efficiency of your stones, trying hard to make your next move work well with your previous moves.
Some random comments:

is a little suspect, in terms of efficiency, because the B side position is already undercut by the W stone at R4. If W slides in at S6, the B stone at R10 will lose much of its effectiveness. Conversely, if B manages to play S6 or S5, the B stone at R10 becomes very good. So a play by either side around here is worth more than might be apparent.

might look like a strong attack, but direct attachments like this actually help the opponent make shape. It is much better to attack from a distance. A sequence like P10-O12-O14 might be expected. Pretty soon B will be able to profit from the attack by invading around M17.

leaves the field of an intense battle to play a calm move away from the fight. In the right side and upper right corner, both sides have multiple separated weak groups. Anything you can do to strengthen or link up these groups should take precedence over a big play elsewhere on the board. Blocking at P13 would be good to keep all the B stones working efficiently together. Wedging at Q11 to separate the W groups might be good, but requires reading. Blocking at R18 has a huge impact on life (for the three B stones) and death (for the two W stones). Even the hane at Q8 has more impact on this critical fight that the game move.

comes too late to be good. By now W has strengthened his group enough that this move is ineffective. Saving the two stones at R8 would be much larger. Blocking at R18 would still be huge.
:b127: looks like a move played by reflex and is essentially a pass. Even if W could capture three stones, that would just be a small endgame play, worth far less than a move in the upper right corner.
As a matter of technique, when looking to kill a group, consider outside moves which reduce eye space before clever inside placements. :b137: at R18 would leave W with no space to make two eyes. Consider this as a life-and-death problem and see if you can read out how to kill any W attempt to live. Similarly :b147: would be simpler at R19. But good job recognizing the kill after W failed to defend.
:b181: should just connect at M2 or M1. That way B either gets sente or earns the later hane at O1 in sente. Both results are several points more profitable than the game move. This is an important endgame technique worth learning.