That's impressive. And also, I don't think I would have the patience to do a quarter of the preps the author did. :D
In navigating the city, I want my players to feel as if nothing is being invented on the spot – the setting should feel as if it exists independently of them, and they are exploring its secrets
I found a middle ground to allow that without getting into that level of preps - although, it requires some programming skills. I use the same technique that the No Man's Sky videogame used to build a universe with a quintillion systems : geographically seeded procedural generation.
The thing with the random number generators we use on computers to replace dice roll is that they basically are prestidigitation : they make you think they give you a random result, but it never is, because randomness does not exist in computing. Instead, they are elaborate mathematical functions to which you give a seed number and who give in return a series of generated numbers which you can't predict. The interesting part in that being : if you give the same seed number, you'll get the same series of result numbers. When simulating dice, you don't want that, so you'll use something like the current date and time as a seed.
But that also mean we can use that to deterministically setup a whole universe before the campaign starts : we can use the coordinates of a hex as seed. I use that in my hexcrawl in the Traveller rpg, where each hex is a planetary system. Traveller already provides a mean to randomize what there is in a system, based on your usual tables and modifiers. I wrote code to implement this generation, and I seed my RNG with the coordinates of the hexes. And just like that, I have a universe of billons of randomly generated places that all exist from the very start of my game. I can explore them on my map, see what there is in a given region, imagine relations between them and their neighbors, it's there from the start and I know it won't change : provided the coordinates and the generation function do not change, the exact same content will always appear in the exact same place.
In most languages, the random function allows to provide a seed. It's not the case in javascript that I used to make my app, I can provide the functions I used, if anyone is interested (but really, they're just pasted from StackOverflow).