From c6f048133603f78ef77269c5045e117b9915229d Mon Sep 17 00:00:00 2001 From: Rachelle Date: Tue, 17 Mar 2026 16:42:54 +1100 Subject: [PATCH] update pwa --- app/layout.tsx | 2 + components/InstallBanner.tsx | 66 ++++++++++++++++++++++++++++++ components/PwaMetaTags.tsx | 4 +- public/learn/apple-touch-icon.png | Bin 4801 -> 4622 bytes public/learn/favicon-192x192.png | Bin 5163 -> 2395 bytes public/learn/favicon-512x512.png | Bin 13637 -> 5622 bytes 6 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 components/InstallBanner.tsx diff --git a/app/layout.tsx b/app/layout.tsx index 48057f0..27c760b 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,6 +4,7 @@ import { Inter } from 'next/font/google' import { LaunchGate } from '@/components/LaunchGate' import { ServiceWorkerRegistrar } from '@/components/ServiceWorkerRegistrar' import { PwaMetaTags } from '@/components/PwaMetaTags' +import { InstallBanner } from '@/components/InstallBanner' import './globals.css' const inter = Inter({ @@ -58,6 +59,7 @@ export default function RootLayout({ children }: Readonly<{ children: React.Reac + {children} {/* Domain is encoded in the proxy script URL - no data-domain attribute needed */} {process.env.NODE_ENV === 'production' && ( diff --git a/components/InstallBanner.tsx b/components/InstallBanner.tsx new file mode 100644 index 0000000..b5b1f3e --- /dev/null +++ b/components/InstallBanner.tsx @@ -0,0 +1,66 @@ +'use client' + +import { useState, useRef, useEffect } from 'react' + +interface BeforeInstallPromptEvent extends Event { + prompt: () => Promise + userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }> +} + +export function InstallBanner() { + const [canInstall, setCanInstall] = useState(false) + const [dismissed, setDismissed] = useState(false) + const installEventRef = useRef(null) + + useEffect(() => { + const handleBeforeInstall = (e: Event) => { + e.preventDefault() + installEventRef.current = e as BeforeInstallPromptEvent + setCanInstall(true) + } + const handleInstalled = () => { + setCanInstall(false) + } + window.addEventListener('beforeinstallprompt', handleBeforeInstall) + window.addEventListener('appinstalled', handleInstalled) + return () => { + window.removeEventListener('beforeinstallprompt', handleBeforeInstall) + window.removeEventListener('appinstalled', handleInstalled) + installEventRef.current = null + setCanInstall(false) + } + }, []) + + const handleInstall = async () => { + const e = installEventRef.current + if (!e) return + await e.prompt() + const { outcome } = await e.userChoice + if (outcome === 'accepted') setCanInstall(false) + } + + if (!canInstall || dismissed) return null + + return ( +
+ Install Multicorn Learn +
+ + +
+
+ ) +} diff --git a/components/PwaMetaTags.tsx b/components/PwaMetaTags.tsx index 5a7ebc7..2eb81fe 100644 --- a/components/PwaMetaTags.tsx +++ b/components/PwaMetaTags.tsx @@ -4,13 +4,13 @@ import { useEffect } from 'react' /** * Injects iOS PWA meta tags. Next.js Metadata API does not output - * apple-mobile-web-app-capable in a way that enables Safari splash screens, + * mobile-web-app-capable in a way that enables Safari splash screens, * so we inject these on the client. */ export function PwaMetaTags() { useEffect(() => { const tags: [string, Record][] = [ - ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }], + ['meta', { name: 'mobile-web-app-capable', content: 'yes' }], ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'default' }], ['meta', { name: 'apple-mobile-web-app-title', content: 'Learn' }], ] diff --git a/public/learn/apple-touch-icon.png b/public/learn/apple-touch-icon.png index 92a8ec3882e6dbdc3090ad68f99d635de7b0b4c4..8c4d8e1965e98f82e363d5e803b20a969f257b90 100644 GIT binary patch literal 4622 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 diff --git a/public/learn/favicon-512x512.png b/public/learn/favicon-512x512.png index ebfdbf47bca732a2ce9d9d54287d91e6998f86b4..535099aaaa55ed451fa53d1a9af09c64a6088e7a 100644 GIT binary patch literal 5622 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 literal 13637 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