I did some digging; I think I understand what happened, and put together a fix:
- #173
Since page.tsx is a server component, the random check runs at build/render time, not per-visitor. When it returns null, the child components (PRList, HallOfChaos) never render, which means their fetch() calls with revalidate: 300 never execute. Without any revalidation hint, Next.js/Vercel treats the page as fully static and caches the blank result until the next deployment. So instead of 1.337% of visitors seeing nothing, one unlucky render poisoned the cache and took the site down for everyone.
#172 moves the check into IE6Layout.tsx (a client component) using useState + useEffect, so it runs per-visitor in the browser. The server always renders real content now (safe to cache), and each visitor individually rolls the 1.337% dice on hydration. Bonus: the page briefly flashes before going blank, like a crash.