import { Button } from "@repo/ui/components/button" import { Download, Share, X } from "lucide-react" import { AnimatePresence, motion } from "motion/react" import { useEffect, useState } from "react" export function InstallPrompt() { const [isIOS, setIsIOS] = useState(false) const [showPrompt, setShowPrompt] = useState(false) const [deferredPrompt, setDeferredPrompt] = useState(null) useEffect(() => { const isIOSDevice = /iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream const isInStandaloneMode = window.matchMedia( "(display-mode: standalone)", ).matches const hasSeenPrompt = localStorage.getItem("install-prompt-dismissed") === "true" setIsIOS(isIOSDevice) const isDevelopment = process.env.NODE_ENV === "development" setShowPrompt( !hasSeenPrompt && (isDevelopment || (!isInStandaloneMode && (isIOSDevice || "serviceWorker" in navigator))), ) const handleBeforeInstallPrompt = (e: Event) => { e.preventDefault() setDeferredPrompt(e) if (!hasSeenPrompt) { setShowPrompt(true) } } window.addEventListener("beforeinstallprompt", handleBeforeInstallPrompt) return () => { window.removeEventListener( "beforeinstallprompt", handleBeforeInstallPrompt, ) } }, []) const handleInstall = async () => { if (deferredPrompt) { deferredPrompt.prompt() const { outcome } = await deferredPrompt.userChoice if (outcome === "accepted") { localStorage.setItem("install-prompt-dismissed", "true") setShowPrompt(false) } setDeferredPrompt(null) } } const handleDismiss = () => { localStorage.setItem("install-prompt-dismissed", "true") setShowPrompt(false) } if (!showPrompt) { return null } return (

Install Supermemory

Add Supermemory to your home screen for quick access and a better experience.

{isIOS ? (

1. Tap the Share button in Safari

2. Select "Add to Home Screen" ➕

) : ( )}
) }