I don't like

. Pincer as Knotwilg suggested, or just play S4 for a safe decently sized corner, and White still needs to figure out what to do with his approaches.

makes the white stones stronger. You want to attack, but in the game you play two additional moves at

and

before that gets anywhere near off the ground, and even then White can just jump out. If the peep and connect hadn't been played, then your extension at K3 would actually threaten some tactics, but now White's three-stone pillar looks better than the two black stones next to it.
I would omit the moves around

and just play J4. That doesn't strengthen White's corner, has a decent relation to your other stones, and threatens an attack on the three white stones. If White plays an extension to defend the corner it's still locally better than the result you got in the game where your two stones got haned on top.

is the sort of attacking move that has no clear followup. What are you gaining from the attack?

just invites White to separate. If you play a knight's move, I think it would have to be the other one, at M15 ("play from the weaker side"). But M16 is perhaps more normal.

is really poor shape - making White strong again and yourself inefficient.

looks slow, I guess the idea is the followup at K13, but you shouldn't really try for this shape.

is super inefficient and slow. At least consider H13, J12 or H12.
At

consider attaching on the approach stone (at Q14). The principles here - don't just always respond, lean on other stones in the area to attack your real target.

is the driving tesuji, except you need to play

at O12 and so on. Your

does seem to leave White weak everywhere, but it's not something that would have occurred to me as the black stones also look like they could come under attack (and do). You might have been more successful if you'd played S13 at some point so as to have a more favourable capturing race against the top white stones. Even so it worked out kinda OK so it probably shouldn't be criticized too much.