diff --git a/src/components/seo/ProductGridCard.tsx b/src/components/seo/ProductGridCard.tsx index 970ee32fb..42c702f55 100644 --- a/src/components/seo/ProductGridCard.tsx +++ b/src/components/seo/ProductGridCard.tsx @@ -20,8 +20,21 @@ export function ProductGridCard({ product }: { product: LandingProduct }) { const isMerchantOffer = product.href.startsWith("http://") || product.href.startsWith("https://"); const detailUrl = - product.productUrl || - `/search?q=${encodeURIComponent(product.name)}`; + product.productUrl || `/search?q=${encodeURIComponent(product.name)}`; + + function handleMerchantClick(e: React.MouseEvent) { + e.preventDefault(); + e.stopPropagation(); + window.open(product.href, "_blank", "noopener,noreferrer"); + } + + function handleMerchantKeyDown(e: React.KeyboardEvent) { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + e.stopPropagation(); + window.open(product.href, "_blank", "noopener,noreferrer"); + } + } return ( {isMerchantOffer ? ( - e.stopPropagation()} - className="inline-flex items-center rounded-full bg-amber-700 px-3 py-1.5 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-amber-800" + Buy at {product.merchant} - + ) : ( View details diff --git a/src/components/seo/SeoLandingPage.tsx b/src/components/seo/SeoLandingPage.tsx index f71522eeb..97194fba2 100644 --- a/src/components/seo/SeoLandingPage.tsx +++ b/src/components/seo/SeoLandingPage.tsx @@ -79,13 +79,10 @@ function buildRefreshedLabel(config: SeoLandingPageConfig, products: LandingProd return `Updated ${formatted}`; } - // No live products with a timestamp — use the build/date of render. - return `Updated ${new Date().toLocaleDateString("en-US", { - month: "long", - day: "numeric", - year: "numeric", - timeZone: "UTC", - })}`; + // No live products with a timestamp — use a stable, deterministic label. + // Relying on new Date() here produces different text on the server and client, + // which triggers React hydration mismatches (Minified React error #418/#422). + return "Live prices updated regularly"; }