Reframing "calling a hook in an async function always crashes" as a render-time contract problem, "the giant configurable component" as a composition-vs-configuration tradeoff, and accessibility as a testing contract.
Directory rot and state rot are the same problem underneath: a boundary that stopped being held, a source of truth that got copied. A first-principles look at feature-based structure, the forces on three kinds of state, and why the auth boundary must clear the cache.
Which tool should manage a piece of state depends on "where its source of truth is." Unpacking why server/client/URL state must be kept separate, why use native fetch instead of axios, and why contract-style error models and OpenAPI types mechanically prevent drift.