@v1pr, you said “Logically this should not work on the original esp8266 either…” — I don’t understand what this is referring to. Did you mean some line of code should have appeared before some other line of code? If i had to take a guess: note that creating ESP8266WebServer merely creates the object, it doesn’t do anything yet and certainly does not require having WiFi ready at that point. Same with creating the OpenThingsFramework object. The WiFi AP started at this line of code:
The otf->loop() function does the house keeping of responding to WiFi web requests. AP needs to be started before that, which is the case with the code.