From ede34ab7ce052862e5949acfb6094e0ed5ac19c7 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Wed, 10 Jun 2026 11:11:54 +0200 Subject: [PATCH] fix(prod): auto-reload on ChunkLoadError or Server Action mismatch --- apps/web/app/(site)/error.tsx | 16 ++++++++++++++++ apps/web/app/(site)/global-error.tsx | 17 ++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/web/app/(site)/error.tsx b/apps/web/app/(site)/error.tsx index c3df6f6..aa2b209 100644 --- a/apps/web/app/(site)/error.tsx +++ b/apps/web/app/(site)/error.tsx @@ -15,6 +15,22 @@ export default function Error({ // Log the error to Sentry/GlitchTip Sentry.captureException(error); console.error("Caught in error.tsx:", error); + + // Auto-reload on ChunkLoadError or Server Action errors to fetch the new deployment assets + const isChunkLoadError = + error.message && + (error.message.includes("ChunkLoadError") || + error.message.includes("Loading chunk") || + error.message.includes("Failed to find Server Action")); + + if (isChunkLoadError) { + const lastReload = sessionStorage.getItem("last-chunk-reload"); + const now = Date.now(); + if (!lastReload || now - parseInt(lastReload) > 10000) { + sessionStorage.setItem("last-chunk-reload", now.toString()); + window.location.reload(); + } + } }, [error]); return ( diff --git a/apps/web/app/(site)/global-error.tsx b/apps/web/app/(site)/global-error.tsx index 9d9344a..0a9ef7f 100644 --- a/apps/web/app/(site)/global-error.tsx +++ b/apps/web/app/(site)/global-error.tsx @@ -1,7 +1,6 @@ "use client"; import * as Sentry from "@sentry/nextjs"; -import Error from "next/error"; import { useEffect } from "react"; import { Inter, Newsreader } from "next/font/google"; import "./globals.css"; @@ -23,6 +22,22 @@ export default function GlobalError({ }) { useEffect(() => { Sentry.captureException(error); + + // Auto-reload on ChunkLoadError or Server Action errors to fetch the new deployment assets + const isChunkLoadError = + error.message && + (error.message.includes("ChunkLoadError") || + error.message.includes("Loading chunk") || + error.message.includes("Failed to find Server Action")); + + if (isChunkLoadError) { + const lastReload = sessionStorage.getItem("last-chunk-reload"); + const now = Date.now(); + if (!lastReload || now - parseInt(lastReload) > 10000) { + sessionStorage.setItem("last-chunk-reload", now.toString()); + window.location.reload(); + } + } }, [error]); return (