Skip to content

Commit 48d04d5

Browse files
committed
Add WPA
1 parent 7cac25c commit 48d04d5

File tree

5 files changed

+67
-0
lines changed

5 files changed

+67
-0
lines changed

web/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "web",
33
"version": "1.0.0",
44
"private": true,
5+
"homepage": ".",
56
"scripts": {
67
"serve": "next dev -p 3000",
78
"ts-watch": "tsc --watch --noEmit --incremental --preserveWatchOutput --pretty",

web/pages/_app.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,18 @@ function MyApp({Component, pageProps}: AppProps<PageProps>) {
5050
useEffect(printBuildInfo, [])
5151
useHasLoaded()
5252

53+
useEffect(() => {
54+
console.log('registering service worker...');
55+
if ('serviceWorker' in navigator) {
56+
navigator.serviceWorker
57+
.register('/service-worker.js')
58+
.then((reg) => console.log('✅ registered', reg))
59+
.catch((err) => console.error('❌ failed', err));
60+
} else {
61+
console.warn('Service workers not supported in this browser');
62+
}
63+
}, []);
64+
5365
useEffect(() => {
5466
initTracking()
5567

web/pages/_document.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ export default function Document() {
1414
// href="https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500;600;700&display=swap"
1515
rel="stylesheet"
1616
/>
17+
18+
{/* PWA primary color */}
19+
<meta name="theme-color" content="#0d6efd" />
20+
{/*/!* Link to your manifest *!/*/}
21+
<link rel="manifest" href="/manifest.json" />
22+
{/*/!* App icons *!/*/}
23+
<link rel="apple-touch-icon" href="/favicon.ico" />
24+
1725
<Script src="/init-theme.js" strategy="beforeInteractive"/>
1826
{IS_DEPLOYED && <Script id="devtools-warning" strategy="afterInteractive" dangerouslySetInnerHTML={{
1927
__html: `(() => { try {

web/public/manifest.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"short_name": "Compass",
3+
"name": "Compass",
4+
"icons": [
5+
{
6+
"src": "/favicon.ico",
7+
"sizes": "500x500",
8+
"type": "image/ico"
9+
}
10+
],
11+
"start_url": ".",
12+
"display": "standalone",
13+
"background_color": "#ffffff",
14+
"theme_color": "#0d6efd",
15+
"orientation": "portrait-primary"
16+
}

web/public/service-worker.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
console.log('SW loaded');
2+
3+
const CACHE_NAME = 'compass-cache-v1';
4+
5+
self.addEventListener('install', (event) => {
6+
console.log('SW installing…');
7+
self.skipWaiting();
8+
});
9+
10+
self.addEventListener('activate', (event) => {
11+
console.log('SW activated!');
12+
});
13+
14+
self.addEventListener('fetch', (event) => {
15+
event.respondWith(
16+
caches.match(event.request).then((cachedResponse) => {
17+
if (cachedResponse) return cachedResponse;
18+
19+
return fetch(event.request).then((networkResponse) => {
20+
return caches.open(CACHE_NAME).then((cache) => {
21+
// Only cache GET requests to same-origin
22+
if (event.request.method === 'GET' && event.request.url.startsWith(self.location.origin)) {
23+
cache.put(event.request, networkResponse.clone());
24+
}
25+
return networkResponse;
26+
});
27+
});
28+
})
29+
);
30+
});

0 commit comments

Comments
 (0)