← back to Homesonspec

apps/web/src/components/PWARegister.tsx

23 lines

"use client";

import { useEffect } from "react";

// Registers the service worker after the page loads. Renders nothing.
// Kept out of the critical path (waits for `load`) so it never delays first paint.
export default function PWARegister() {
  useEffect(() => {
    if (typeof window === "undefined") return;
    if (!("serviceWorker" in navigator)) return;
    // Skip on localhost http if SW isn't available; SW requires HTTPS or localhost.
    const register = () => {
      navigator.serviceWorker
        .register("/sw.js", { scope: "/" })
        .catch((err) => console.warn("[pwa] service worker registration failed:", err));
    };
    if (document.readyState === "complete") register();
    else window.addEventListener("load", register, { once: true });
  }, []);

  return null;
}