@herzenschein I may not have a blog post in me about it, but I can tell you what sources I used!
First off, I was writing this in Rust, so I used the wayland-client crate, which doesn't necessarily use libwayland at all, because it also has a pure-Rust implementation of the protocol available.
There's a convention in Rust projects of having an "examples" directory, and conveniently, wayland-client has a simple_window example, so I studied that pretty carefully.
That was tricky, though, because there have been some recent breaking API changes in the wayland-client crate, and it took me a little while to notice that the example I was reading was written against current git, not against the last release, which is what I was using.
Eventually I got it to display a window but after displaying the initial contents it wouldn't redraw, so I looked for a different example. At that point I found https://wayland-book.com, which I think might be exactly what you want since it is a tutorial using libwayland. (I hadn't realized I needed to tell the compositor that the whole window was damaged to get it to repaint anything; that was a one-line fix.)
The other source that I used a lot was the Wayland Explorer, https://wayland.app/protocols/, which just makes it easy to browse the documentation for the core protocol and many extensions. It also reports which compositors support which extensions, and that's super helpful.
I got from empty source file to working demo in a 12 hour period yesterday, counting breaks and all, and I made a number of choices that were probably harder than necessary so I could learn more. I did mostly know what I was looking for beforehand though, so whether you find it easier or harder than I did could go either way. I think especially the book and the explorer might help though!