From 52f08964da9d74634c405232b936e1ebe62b9aa8 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Jan 2026 17:28:49 +0000 Subject: [PATCH] feat: make Grimoire installable as a PWA - Created web manifest (site.webmanifest) with app metadata - Added app name, description, theme colors - Configured standalone display mode for native-like experience - Included all required icon sizes (192x192, 512x512) - Added keyboard shortcut for command palette - Generated 192x192 icon for PWA requirements - Added manifest and theme-color meta tags to index.html - Implemented service worker (sw.js) for offline functionality - Network-first caching strategy for optimal performance - Precaches core assets on install - Provides offline fallback for navigation requests - Registered service worker in main.tsx Users can now install Grimoire as a standalone app on desktop and mobile devices. --- index.html | 2 + public/favicon-192x192.png | Bin 0 -> 62702 bytes public/site.webmanifest | 49 ++++++++++++++++++++++ public/sw.js | 84 +++++++++++++++++++++++++++++++++++++ src/main.tsx | 14 +++++++ 5 files changed, 149 insertions(+) create mode 100644 public/favicon-192x192.png create mode 100644 public/site.webmanifest create mode 100644 public/sw.js diff --git a/index.html b/index.html index c85cf4b..5b5cf95 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,8 @@ + + diff --git a/public/favicon-192x192.png b/public/favicon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..3887e808f7fb4f64ec0d9430abef37cfa3266d91 GIT binary patch literal 62702 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 Z{{Ul7I5&&FU-AF|002ovPDHLkV1m<+(>4GA literal 0 HcmV?d00001 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..3231cf2 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,49 @@ +{ + "name": "Grimoire - A Nostr Client for Magicians", + "short_name": "Grimoire", + "description": "A tiling window manager interface for exploring the Nostr protocol. Each window is a Nostr app (profile viewer, event feed, NIP documentation, etc.). Commands are launched Unix-style via Cmd+K palette.", + "start_url": "/", + "display": "standalone", + "background_color": "#020817", + "theme_color": "#b366ff", + "orientation": "any", + "icons": [ + { + "src": "/favicon-16x16.png", + "sizes": "16x16", + "type": "image/png" + }, + { + "src": "/favicon-32x32.png", + "sizes": "32x32", + "type": "image/png" + }, + { + "src": "/apple-touch-icon.png", + "sizes": "180x180", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/favicon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/favicon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ], + "categories": ["social", "utilities", "productivity"], + "shortcuts": [ + { + "name": "Command Palette", + "short_name": "Commands", + "description": "Open the command palette to launch Nostr apps", + "url": "/?action=command-palette" + } + ] +} diff --git a/public/sw.js b/public/sw.js new file mode 100644 index 0000000..8824bde --- /dev/null +++ b/public/sw.js @@ -0,0 +1,84 @@ +// Grimoire Service Worker - v1.0.0 +const CACHE_NAME = "grimoire-v1"; +const RUNTIME_CACHE = "grimoire-runtime"; + +// Core assets to cache on install +const PRECACHE_URLS = [ + "/", + "/index.html", + "/favicon.ico", + "/favicon-192x192.png", + "/favicon-512x512.png", +]; + +// Install event - precache core assets +self.addEventListener("install", (event) => { + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + return cache.addAll(PRECACHE_URLS); + }), + ); + // Activate immediately + self.skipWaiting(); +}); + +// Activate event - clean up old caches +self.addEventListener("activate", (event) => { + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames + .filter((name) => name !== CACHE_NAME && name !== RUNTIME_CACHE) + .map((name) => caches.delete(name)), + ); + }), + ); + // Take control immediately + self.clients.claim(); +}); + +// Fetch event - network first, fallback to cache +self.addEventListener("fetch", (event) => { + // Skip non-GET requests + if (event.request.method !== "GET") return; + + // Skip cross-origin requests + if (!event.request.url.startsWith(self.location.origin)) return; + + // Network first strategy for app shell and assets + event.respondWith( + fetch(event.request) + .then((response) => { + // Clone the response before caching + const responseClone = response.clone(); + + // Cache successful responses + if (response.status === 200) { + caches.open(RUNTIME_CACHE).then((cache) => { + cache.put(event.request, responseClone); + }); + } + + return response; + }) + .catch(() => { + // Fallback to cache if network fails + return caches.match(event.request).then((cachedResponse) => { + if (cachedResponse) { + return cachedResponse; + } + + // If no cache, return offline page for navigation requests + if (event.request.mode === "navigate") { + return caches.match("/index.html"); + } + + // For other requests, just fail + return new Response("Offline", { + status: 503, + statusText: "Service Unavailable", + }); + }); + }), + ); +}); diff --git a/src/main.tsx b/src/main.tsx index dd08235..3959323 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -35,3 +35,17 @@ createRoot(document.getElementById("root")!).render( , ); + +// Register service worker for PWA functionality +if ("serviceWorker" in navigator) { + window.addEventListener("load", () => { + navigator.serviceWorker + .register("/sw.js") + .then((registration) => { + console.log("SW registered:", registration); + }) + .catch((error) => { + console.log("SW registration failed:", error); + }); + }); +}