"use client"; import { useState, useEffect } from "react"; import { X, Download, Smartphone } from "lucide-react"; interface BeforeInstallPromptEvent extends Event { prompt: () => Promise; userChoice: Promise<{ outcome: "accepted" | "dismissed" }>; } export function PWAInstallPrompt() { const [deferredPrompt, setDeferredPrompt] = useState(null); const [showPrompt, setShowPrompt] = useState(false); const [isIOS, setIsIOS] = useState(false); useEffect(() => { // Check if already installed as PWA if (window.matchMedia("(display-mode: standalone)").matches) { return; } // Check if dismissed recently (within 7 days) const dismissedAt = localStorage.getItem("pwa-prompt-dismissed"); if (dismissedAt) { const dismissedTime = parseInt(dismissedAt, 10); const sevenDays = 7 * 24 * 60 * 60 * 1000; if (Date.now() - dismissedTime < sevenDays) { return; } } // Check for iOS const isIOSDevice = /iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream; setIsIOS(isIOSDevice); // Listen for beforeinstallprompt (Chrome, Edge, etc.) const handleBeforeInstallPrompt = (e: Event) => { e.preventDefault(); setDeferredPrompt(e as BeforeInstallPromptEvent); // Show prompt after a short delay setTimeout(() => setShowPrompt(true), 3000); }; window.addEventListener("beforeinstallprompt", handleBeforeInstallPrompt); // For iOS, show instructions after delay if on mobile if (isIOSDevice) { setTimeout(() => setShowPrompt(true), 5000); } return () => { window.removeEventListener("beforeinstallprompt", handleBeforeInstallPrompt); }; }, []); const handleInstall = async () => { if (!deferredPrompt) return; deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; if (outcome === "accepted") { setShowPrompt(false); } setDeferredPrompt(null); }; const handleDismiss = () => { setShowPrompt(false); localStorage.setItem("pwa-prompt-dismissed", Date.now().toString()); }; if (!showPrompt) return null; return (

Install Lidify

{isIOS ? (

Tap the Share button, then{" "} "Add to Home Screen" for the best experience.

) : (

Add Lidify to your home screen for quick access and background audio.

)}
{!isIOS && deferredPrompt && ( )}
); }