From 54bba9c82728516f1df2a8904ac4984ec54e4034 Mon Sep 17 00:00:00 2001 From: Aditya Gupta Date: Sat, 6 Jun 2026 11:01:34 +0530 Subject: [PATCH] feat: Added ios/ipadOS prompt --- src/App.jsx | 4 ++ src/components/IosPromptModal.jsx | 76 +++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/components/IosPromptModal.jsx diff --git a/src/App.jsx b/src/App.jsx index d48c629..f393a86 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -13,6 +13,7 @@ import BrewForm from "./components/BrewForm"; import BeanDetail from "./components/BeanDetail"; import BrewCard from "./components/BrewCard"; import BottomNav from "./components/BottomNav"; +import IosPromptModal from "./components/IosPromptModal"; // Import constants @@ -334,6 +335,9 @@ export default function CoffeeLogbook() { {modal === "addBean" && setModal(null)} />} {modal === "editBean" && editingBean && { setModal(null); setEditingBean(null); }} />} {modal === "addBrew" && setModal(null)} />} + + {/* iOS/iPadOS PWA Install Prompt */} + ); } diff --git a/src/components/IosPromptModal.jsx b/src/components/IosPromptModal.jsx new file mode 100644 index 0000000..0e7d714 --- /dev/null +++ b/src/components/IosPromptModal.jsx @@ -0,0 +1,76 @@ +import React, { useState, useEffect } from "react"; + +export default function IosPromptModal() { + const [show, setShow] = useState(false); + + useEffect(() => { + // Detect if user is on iOS or iPadOS + const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) || + (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); + + // Check if app is in standalone mode (already installed) + const isStandalone = window.matchMedia('(display-mode: standalone)').matches || + window.navigator.standalone; + + // Check if user has already dismissed it this session + const isDismissed = sessionStorage.getItem("ios-prompt-dismissed"); + + if (isIOS && !isStandalone && !isDismissed) { + setShow(true); + } + }, []); + + if (!show) return null; + + const handleClose = () => { + sessionStorage.setItem("ios-prompt-dismissed", "true"); + setShow(false); + }; + + return ( +
+
e.stopPropagation()}> + {/* Handle bar */} +
+ + {/* Close Button */} + + + {/* Content */} +
+ {/* Brew Logo */} +
+ Brew Logo +
+ + {/* Brew Text */} +
Brew
+ + {/* Description */} +

+ Open this page on safari and then install this app to your homescreen for a better experience. +

+ + {/* Instruction */} +
+ + Tap + + + + + + then "Add to Home Screen" + +
+
+
+
+ ); +}