Let me take this step by step. |22.d19 is a good move, because the 2-5 gap (b16-d21) is too close to the edge. Typically the response would be 23.b20 or 23.c19 or a18 (illegal), but there's no room on the left to make any of that work. White is left with two options: 23.c18 (which falls apart quickly) or 23.d17, which doesn't. Black then makes good on his threat, 24.e21. Now, 25.h18 might be an interesting line to explore, but let's follow Aaron's suggestion of 25.f18. Black should see the impending parallelogram threat at f22, which means he can't leave a gap. If 26.i21, for example, then 27.f22 is an instant loss for Black (assuming White's d11 can connect to the top). Of the linked options, 26.g20 is his strongest choice. Then White can't play 27.h18 because 28.h17 works, so he is forced to play 27.h19. From here, on out, it is a battle toward the right: first, a ladder chase, 28.i1929.j1830.k1831.l1732.m19 and then maybe 33.p1934.o2035.r1836.p1837.q1638.resign.
|20.d16 would have given black an easy win.
But even after e15, black still could have won with |22.d19 for example
|22.d19 23.d17 24.e21 25.f18 26.i21 27.g20 28.g22 29.i19 30.k20 31.j17 32.p18
And even after |27.c15 black probably still had a win with |28.f7
So |28.b13 threw away all winning chances for black.