One production-only cause worth adding: a blank screen that appears right after a deploy, while everything worked in dev. Vite names the JS chunks with content hashes, so if the CDN or the browser has cached index.html, returning users get old HTML pointing at chunk filenames that no longer exist on the server. The app boots to a blank page and the Network tab shows the JS file 404ing, with no console error to chase. The fix that ended it for me was never caching index.html itself (Cache-Control: no-cache) while letting the hashed assets cache for a year. It pairs well with your "does it fail locally, in production, or both" question, because this one only ever happens in production.