In fact, Zitadel allows different approaches. Since there is not one single right way to follow, but depending on the use case there can be several options and you can simply choose the one you prefer, it can seem confusing. I'm not sure about the examples, but they probably don't cover all the options you have, but choose one way or another just to show any. I would suggest you read the linked articles and look at different example implementations: