"use client"; import { useEffect, useState } from "react"; import { Download, X } from "lucide-react"; interface BeforeInstallPromptEvent extends Event { prompt: () => Promise; userChoice: Promise<{ outcome: "accepted" | "dismissed" }>; } const DISMISS_KEY = "medos_install_dismissed"; const DELAY_MS = 8000; /** * PWA install prompt. Shows after a short delay on the first session. * Dismissed state persisted in localStorage. Skips if already installed. */ export function InstallPrompt() { const [evt, setEvt] = useState(null); const [visible, setVisible] = useState(false); useEffect(() => { if (typeof window === "undefined") return; if (localStorage.getItem(DISMISS_KEY) === "1") return; if (window.matchMedia?.("(display-mode: standalone)").matches) return; const handler = (e: Event) => { e.preventDefault(); setEvt(e as BeforeInstallPromptEvent); setTimeout(() => setVisible(true), DELAY_MS); }; window.addEventListener("beforeinstallprompt", handler as EventListener); return () => window.removeEventListener("beforeinstallprompt", handler as EventListener); }, []); const install = async () => { if (!evt) return; try { await evt.prompt(); const choice = await evt.userChoice; if (choice.outcome === "accepted") localStorage.setItem(DISMISS_KEY, "1"); } catch {} setVisible(false); setEvt(null); }; const dismiss = () => { localStorage.setItem(DISMISS_KEY, "1"); setVisible(false); }; if (!visible || !evt) return null; return (

Install MedOS

Add to home screen for instant access. Free, private.

); }