I don't think any app should be built like this. Rather, I think this approach should be used when you already have a large codebase and are making atomic changes to it. In fact, I think taking this approach for greenfield work is more likely to result in slop because early accidental decisions turn into fundamental design choices.
Instead, I've settled on a top-down approach: I write an in-depth spec for the whole app first, then have the LLM implement reviewable sections of it.