From 0c057ccd557aa78ad12e507a67ea1d36ca1cf23a Mon Sep 17 00:00:00 2001 From: nzambello Date: Sat, 19 Feb 2022 18:11:55 +0100 Subject: [PATCH] feat: add pwa capabilities --- app/entry.worker.tsx | 210 ++++++++++++++++++++++++ app/root.tsx | 89 +++++++++- app/routes/expenses/index.tsx | 4 +- app/routes/resources/manifest[.]json.ts | 57 +++++++ package.json | 4 +- public/browserconfig.xml | 9 + public/favicon.ico | Bin 16958 -> 15086 bytes public/icons/android-chrome-192x192.png | Bin 0 -> 6032 bytes public/icons/android-chrome-512x512.png | Bin 0 -> 16240 bytes public/icons/apple-touch-icon.png | Bin 0 -> 5630 bytes public/icons/favicon-16x16.png | Bin 0 -> 732 bytes public/icons/favicon-32x32.png | Bin 0 -> 1079 bytes public/icons/mstile-144x144.png | Bin 0 -> 4476 bytes public/icons/mstile-150x150.png | Bin 0 -> 2855 bytes public/icons/mstile-310x150.png | Bin 0 -> 3144 bytes public/icons/mstile-310x310.png | Bin 0 -> 9758 bytes public/icons/mstile-70x70.png | Bin 0 -> 2062 bytes public/icons/safari-pinned-tab.svg | 40 +++++ public/site.webmanifest | 19 +++ 19 files changed, 422 insertions(+), 10 deletions(-) create mode 100644 app/entry.worker.tsx create mode 100644 app/routes/resources/manifest[.]json.ts create mode 100644 public/browserconfig.xml create mode 100644 public/icons/android-chrome-192x192.png create mode 100644 public/icons/android-chrome-512x512.png create mode 100644 public/icons/apple-touch-icon.png create mode 100644 public/icons/favicon-16x16.png create mode 100644 public/icons/favicon-32x32.png create mode 100644 public/icons/mstile-144x144.png create mode 100644 public/icons/mstile-150x150.png create mode 100644 public/icons/mstile-310x150.png create mode 100644 public/icons/mstile-310x310.png create mode 100644 public/icons/mstile-70x70.png create mode 100644 public/icons/safari-pinned-tab.svg create mode 100644 public/site.webmanifest diff --git a/app/entry.worker.tsx b/app/entry.worker.tsx new file mode 100644 index 0000000..1ca26e6 --- /dev/null +++ b/app/entry.worker.tsx @@ -0,0 +1,210 @@ +/// + +import { json } from "@remix-run/server-runtime"; + +export type {}; +declare let self: ServiceWorkerGlobalScope; + +let STATIC_ASSETS = ["/build/", "/icons/"]; + +let ASSET_CACHE = "asset-cache"; +let DATA_CACHE = "data-cache"; +let DOCUMENT_CACHE = "document-cache"; + +function debug(...messages: any[]) { + if (process.env.NODE_ENV === "development") { + console.debug(...messages); + } +} + +async function handleInstall(event: ExtendableEvent) { + debug("Service worker installed"); +} + +async function handleActivate(event: ExtendableEvent) { + debug("Service worker activated"); +} + +async function handleMessage(event: ExtendableMessageEvent) { + let cachePromises: Map> = new Map(); + + if (event.data.type === "REMIX_NAVIGATION") { + let { isMount, location, matches, manifest } = event.data; + let documentUrl = location.pathname + location.search + location.hash; + + let [dataCache, documentCache, existingDocument] = await Promise.all([ + caches.open(DATA_CACHE), + caches.open(DOCUMENT_CACHE), + caches.match(documentUrl), + ]); + + if (!existingDocument || !isMount) { + debug("Caching document for", documentUrl); + cachePromises.set( + documentUrl, + documentCache.add(documentUrl).catch((error) => { + debug(`Failed to cache document for ${documentUrl}:`, error); + }) + ); + } + + if (isMount) { + for (let match of matches) { + if (manifest.routes[match.id].hasLoader) { + let params = new URLSearchParams(location.search); + params.set("_data", match.id); + let search = params.toString(); + search = search ? `?${search}` : ""; + let url = location.pathname + search + location.hash; + if (!cachePromises.has(url)) { + debug("Caching data for", url); + cachePromises.set( + url, + dataCache.add(url).catch((error) => { + debug(`Failed to cache data for ${url}:`, error); + }) + ); + } + } + } + } + } + + await Promise.all(cachePromises.values()); +} + +async function handleFetch(event: FetchEvent): Promise { + let url = new URL(event.request.url); + + if (isAssetRequest(event.request)) { + let cached = await caches.match(event.request, { + cacheName: ASSET_CACHE, + ignoreVary: true, + ignoreSearch: true, + }); + if (cached) { + debug("Serving asset from cache", url.pathname); + return cached; + } + + debug("Serving asset from network", url.pathname); + let response = await fetch(event.request); + if (response.status === 200) { + let cache = await caches.open(ASSET_CACHE); + await cache.put(event.request, response.clone()); + } + return response; + } + + if (isLoaderRequest(event.request)) { + try { + debug("Serving data from network", url.pathname + url.search); + let response = await fetch(event.request.clone()); + let cache = await caches.open(DATA_CACHE); + await cache.put(event.request, response.clone()); + return response; + } catch (error) { + debug( + "Serving data from network failed, falling back to cache", + url.pathname + url.search + ); + let response = await caches.match(event.request); + if (response) { + response.headers.set("X-Remix-Worker", "yes"); + return response; + } + + return json( + { message: "Network Error" }, + { + status: 500, + headers: { "X-Remix-Catch": "yes", "X-Remix-Worker": "yes" }, + } + ); + } + } + + if (isDocumentGetRequest(event.request)) { + try { + debug("Serving document from network", url.pathname); + let response = await fetch(event.request); + let cache = await caches.open(DOCUMENT_CACHE); + await cache.put(event.request, response.clone()); + return response; + } catch (error) { + debug( + "Serving document from network failed, falling back to cache", + url.pathname + ); + let response = await caches.match(event.request); + if (response) { + return response; + } + throw error; + } + } + + return fetch(event.request.clone()); +} + +function isMethod(request: Request, methods: string[]) { + return methods.includes(request.method.toLowerCase()); +} + +function isAssetRequest(request: Request) { + return ( + isMethod(request, ["get"]) && + STATIC_ASSETS.some((publicPath) => request.url.startsWith(publicPath)) + ); +} + +function isLoaderRequest(request: Request) { + let url = new URL(request.url); + return isMethod(request, ["get"]) && url.searchParams.get("_data"); +} + +function isDocumentGetRequest(request: Request) { + return isMethod(request, ["get"]) && request.mode === "navigate"; +} + +self.addEventListener("install", (event) => { + event.waitUntil(handleInstall(event).then(() => self.skipWaiting())); +}); + +self.addEventListener("activate", (event) => { + event.waitUntil(handleActivate(event).then(() => self.clients.claim())); +}); + +self.addEventListener("message", (event) => { + event.waitUntil(handleMessage(event)); +}); + +self.addEventListener("fetch", (event) => { + event.respondWith( + (async () => { + let result = {} as + | { error: unknown; response: undefined } + | { error: undefined; response: Response }; + try { + result.response = await handleFetch(event); + } catch (error) { + result.error = error; + } + + return appHandleFetch(event, result); + })() + ); +}); + +async function appHandleFetch( + event: FetchEvent, + { + error, + response, + }: + | { error: unknown; response: undefined } + | { error: undefined; response: Response } +): Promise { + return response; +} + diff --git a/app/root.tsx b/app/root.tsx index 516f5d8..60fd9a4 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -1,3 +1,5 @@ +import { useEffect } from "react"; +import type { ReactNode } from "react"; import { LinksFunction, LoaderFunction, @@ -5,7 +7,17 @@ import { useLoaderData, } from "remix"; import type { User, Team } from "@prisma/client"; -import { Links, LiveReload, Outlet, useCatch, Meta, Scripts } from "remix"; +import { + Links, + LiveReload, + Outlet, + useCatch, + Meta, + Scripts, + ScrollRestoration, + useLocation, + useMatches, +} from "remix"; import { getUser } from "./utils/session.server"; import styles from "./tailwind.css"; @@ -44,29 +56,94 @@ export const loader: LoaderFunction = async ({ request }) => { return data; }; +let isMount = true; + function Document({ children, title = `Explit`, }: { - children: React.ReactNode; + children: ReactNode; title?: string; }) { const data = useLoaderData(); + let location = useLocation(); + let matches = useMatches(); + + useEffect(() => { + let mounted = isMount; + isMount = false; + if ("serviceWorker" in navigator) { + if (navigator.serviceWorker.controller) { + navigator.serviceWorker.controller?.postMessage({ + type: "REMIX_NAVIGATION", + isMount: mounted, + location, + matches, + manifest: window.__remixManifest, + }); + } else { + let listener = async () => { + await navigator.serviceWorker.ready; + navigator.serviceWorker.controller?.postMessage({ + type: "REMIX_NAVIGATION", + isMount: mounted, + location, + matches, + manifest: window.__remixManifest, + }); + }; + navigator.serviceWorker.addEventListener("controllerchange", listener); + return () => { + navigator.serviceWorker.removeEventListener( + "controllerchange", + listener + ); + }; + } + } + }, [location]); + return ( - + + {title} + + + + + + + + {children} + {process.env.NODE_ENV === "development" ? : null} diff --git a/app/routes/expenses/index.tsx b/app/routes/expenses/index.tsx index 72b27ae..49b406c 100644 --- a/app/routes/expenses/index.tsx +++ b/app/routes/expenses/index.tsx @@ -66,8 +66,6 @@ export const loader: LoaderFunction = async ({ request }) => { ...userData, dueAmount: avgPerUser - userData.spent, })); - console.log("totalExpenses", totalExpenses); - console.log("expensesByUser", expensesByUser); const data: LoaderData = { lastExpenses, @@ -128,7 +126,7 @@ export default function ExpensesIndexRoute() {

Who needs to pay who

{data.teamCounts?.map((user) => ( -
+
{user.icon ?? user.username[0]} diff --git a/app/routes/resources/manifest[.]json.ts b/app/routes/resources/manifest[.]json.ts new file mode 100644 index 0000000..34c1a7e --- /dev/null +++ b/app/routes/resources/manifest[.]json.ts @@ -0,0 +1,57 @@ +import { json } from "remix"; +import type { LoaderFunction } from "remix"; + +export let loader: LoaderFunction = () => { + return json( + { + short_name: "Explit", + name: "Explit | Track and split shared expenses with friends and family.", + start_url: "/", + display: "standalone", + background_color: "#22252d", + theme_color: "#793ef9", + icons: [ + { + src: "/icons/favicon-32x32.png", + sizes: "32x32", + type: "image/png", + density: "0.75", + }, + { + src: "/icons/android-icon-48x48.png", + sizes: "48x48", + type: "image/png", + density: "1.0", + }, + { + src: "/icons/mstile-70x70.png", + sizes: "70x70", + type: "image/png", + density: "1.5", + }, + { + src: "/icons/mstile-144x144.png", + sizes: "144x144", + type: "image/png", + density: "3.0", + }, + { + src: "/icons/android-chrome-192x192.png", + sizes: "192x192", + type: "image/png", + density: "4.0", + }, + { + src: "/icons/android-chrome-512x512.png", + sizes: "512x512", + type: "image/png", + }, + ], + }, + { + headers: { + "Cache-Control": "public, max-age=600", + }, + } + ); +}; diff --git a/package.json b/package.json index ff6b5c6..75e1395 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "scripts": { "build": "npm run build:css && remix build", "build:css": "tailwindcss -o ./app/tailwind.css", - "dev": "concurrently \"npm run dev:css\" \"remix dev\"", + "build:worker": "esbuild ./app/entry.worker.ts --outfile=./public/entry.worker.js --minify --bundle --format=esm --define:process.env.NODE_ENV='\"production\"'", + "dev": "concurrently \"npm run dev:css\" \"npm run dev:worker\" \"remix dev\"", + "dev:worker": "esbuild ./app/entry.worker.ts --outfile=./public/entry.worker.js --bundle --format=esm --define:process.env.NODE_ENV='\"development\"' --watch", "dev:css": "tailwindcss -o ./app/tailwind.css --watch", "postinstall": "remix setup node", "prepare": "husky install", diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 0000000..b3930d0 --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/public/favicon.ico b/public/favicon.ico index 8830cf6821b354114848e6354889b8ecf6d2bc61..beb3f0a5e039d69f772b576f26878062fa4628f0 100644 GIT binary patch literal 15086 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 Ca=8Wo literal 16958 zcmeI3+jCXb9mnJN2h^uNlXH@jlam{_a8F3W{T}Wih>9YJpaf7TUbu)A5fv|h7OMfR zR;q$lr&D!wv|c)`wcw1?>4QT1(&|jdsrI2h`Rn)dTW5t$8pz=s3_5L?#oBxAowe8R z_WfPfN?F+@`q$D@rvC?(W!uWieppskmQ~YG*>*L?{img@tWpnYXZslxeh#TSUS3{q z1Ju6JcfQSbQuORq69@YK(X-3c9vC2c2a2z~zw=F=50@pm0PUiCAm!bAT?2jpM`(^b zC|2&Ngngt^<>oCv#?P(AZ`5_84x#QBPulix)TpkIAUp=(KgGo4CVS~Sxt zVoR4>r5g9%bDh7hi0|v$={zr>CHd`?-l4^Ld(Z9PNz9piFY+llUw_x4ou7Vf-q%$g z)&)J4>6Ft~RZ(uV>dJD|`nxI1^x{X@Z5S<=vf;V3w_(*O-7}W<=e$=}CB9_R;)m9)d7`d_xx+nl^Bg|%ew=?uoKO8w zeQU7h;~8s!@9-k>7Cx}1SDQ7m(&miH zs8!l*wOJ!GHbdh)pD--&W3+w`9YJ=;m^FtMY=`mTq8pyV!-@L6smwp3(q?G>=_4v^ zn(ikLue7!y70#2uhqUVpb7fp!=xu2{aM^1P^pts#+feZv8d~)2sf`sjXLQCEj;pdI z%~f`JOO;*KnziMv^i_6+?mL?^wrE_&=IT9o1i!}Sd4Sx4O@w~1bi1)8(sXvYR-1?7~Zr<=SJ1Cw!i~yfi=4h6o3O~(-Sb2Ilwq%g$+V` z>(C&N1!FV5rWF&iwt8~b)=jIn4b!XbrWrZgIHTISrdHcpjjx=TwJXI7_%Ks4oFLl9 zNT;!%!P4~xH85njXdfqgnIxIFOOKW`W$fxU%{{5wZkVF^G=JB$oUNU5dQSL&ZnR1s z*ckJ$R`eCUJsWL>j6*+|2S1TL_J|Fl&kt=~XZF=+=iT0Xq1*KU-NuH%NAQff$LJp3 zU_*a;@7I0K{mqwux87~vwsp<}@P>KNDb}3U+6$rcZ114|QTMUSk+rhPA(b{$>pQTc zIQri{+U>GMzsCy0Mo4BfWXJlkk;RhfpWpAB{=Rtr*d1MNC+H3Oi5+3D$gUI&AjV-1 z=0ZOox+bGyHe=yk-yu%=+{~&46C$ut^ZN+ysx$NH}*F43)3bKkMsxGyIl#>7Yb8W zO{}&LUO8Ow{7>!bvSq?X{15&Y|4}0w2=o_^0ZzYgB+4HhZ4>s*mW&?RQ6&AY|CPcx z$*LjftNS|H)ePYnIKNg{ck*|y7EJ&Co0ho0K`!{ENPkASeKy-JWE}dF_%}j)Z5a&q zXAI2gPu6`s-@baW=*+keiE$ALIs5G6_X_6kgKK8n3jH2-H9`6bo)Qn1 zZ2x)xPt1=`9V|bE4*;j9$X20+xQCc$rEK|9OwH-O+Q*k`ZNw}K##SkY z3u}aCV%V|j@!gL5(*5fuWo>JFjeU9Qqk`$bdwH8(qZovE2tA7WUpoCE=VKm^eZ|vZ z(k<+j*mGJVah>8CkAsMD6#I$RtF;#57Wi`c_^k5?+KCmX$;Ky2*6|Q^bJ8+s%2MB}OH-g$Ev^ zO3uqfGjuN%CZiu<`aCuKCh{kK!dDZ+CcwgIeU2dsDfz+V>V3BDb~)~ zO!2l!_)m;ZepR~sL+-~sHS7;5ZB|~uUM&&5vDda2b z)CW8S6GI*oF><|ZeY5D^+Mcsri)!tmrM33qvwI4r9o@(GlW!u2R>>sB|E#%W`c*@5 z|0iA|`{6aA7D4Q?vc1{vT-#yytn07`H!QIO^1+X7?zG3%y0gPdIPUJ#s*DNAwd}m1_IMN1^T&be~+E z_z%1W^9~dl|Me9U6+3oNyuMDkF*z_;dOG(Baa*yq;TRiw{EO~O_S6>e*L(+Cdu(TM z@o%xTCV%hi&p)x3_inIF!b|W4|AF5p?y1j)cr9RG@v%QVaN8&LaorC-kJz_ExfVHB za!mtuee#Vb?dh&bwrfGHYAiX&&|v$}U*UBM;#F!N=x>x|G5s0zOa9{(`=k4v^6iK3 z8d&=O@xhDs{;v7JQ%eO;!Bt`&*MH&d zp^K#dkq;jnJz%%bsqwlaKA5?fy zS5JDbO#BgSAdi8NM zDo2SifX6^Z;vn>cBh-?~r_n9qYvP|3ihrnqq6deS-#>l#dV4mX|G%L8|EL;$U+w69 z;rTK3FW$ewUfH|R-Z;3;jvpfiDm?Fvyu9PeR>wi|E8>&j2Z@2h`U}|$>2d`BPV3pz#ViIzH8v6pP^L-p!GbLv<;(p>}_6u&E6XO5- zJ8JEvJ1)0>{iSd|kOQn#?0rTYL=KSmgMHCf$Qbm;7|8d(goD&T-~oCDuZf57iP#_Y zmxaoOSjQsm*^u+m$L9AMqwi=6bpdiAY6k3akjGN{xOZ`_J<~Puyzpi7yhhKrLmXV; z@ftONPy;Uw1F#{_fyGbk04yLE01v=i_5`RqQP+SUH0nb=O?l!J)qCSTdsbmjFJrTm zx4^ef@qt{B+TV_OHOhtR?XT}1Etm(f21;#qyyW6FpnM+S7*M1iME?9fe8d-`Q#InN z?^y{C_|8bxgUE@!o+Z72C)BrS&5D`gb-X8kq*1G7Uld-z19V}HY~mK#!o9MC-*#^+ znEsdc-|jj0+%cgBMy(cEkq4IQ1D*b;17Lyp>Utnsz%LRTfjQKL*vo(yJxwtw^)l|! z7jhIDdtLB}mpkOIG&4@F+9cYkS5r%%jz}I0R#F4oBMf-|Jmmk* zk^OEzF%}%5{a~kGYbFjV1n>HKC+a`;&-n*v_kD2DPP~n5(QE3C;30L<32GB*qV2z$ zWR1Kh=^1-q)P37WS6YWKlUSDe=eD^u_CV+P)q!3^{=$#b^auGS7m8zFfFS<>(e~)TG z&uwWhSoetoe!1^%)O}=6{SUcw-UQmw+i8lokRASPsbT=H|4D|( zk^P7>TUEFho!3qXSWn$m2{lHXw zD>eN6-;wwq9(?@f^F4L2Ny5_6!d~iiA^s~(|B*lbZir-$&%)l>%Q(36yOIAu|326K ztmBWz|MLA{Kj(H_{w2gd*nZ6a@ma(w==~EHIscEk|C=NGJa%Ruh4_+~f|%rt{I5v* zIX@F?|KJID56-ivb+PLo(9hn_CdK{irOcL15>JNQFY112^$+}JPyI{uQ~$&E*=ri; z`d^fH?4f=8vKHT4!p9O*fX(brB75Y9?e>T9=X#Fc@V#%@5^)~#zu5I(=>LQA-EGTS zecy*#6gG+8lapch#Hh%vl(+}J;Q!hC1OKoo;#h3#V%5Js)tQ)|>pTT@1ojd+F9Gey zg`B)zm`|Mo%tH31s4=<+`Pu|B3orXwNyIcNN>;fBkIj^X8P}RXhF= zXQK1u5RLN7k#_Q(KznJrALtMM13!vhfr025ar?@-%{l|uWt@NEd<$~n>RQL{ z+o;->n)+~0tt(u|o_9h!T`%M8%)w2awpV9b*xz9Pl-daUJm3y-HT%xg`^mFd6LBeL z!0~s;zEr)Bn9x)I(wx`;JVwvRcc^io2XX(Nn3vr3dgbrr@YJ?K3w18P*52^ieBCQP z=Up1V$N2~5ppJHRTeY8QfM(7Yv&RG7oWJAyv?c3g(29)P)u;_o&w|&)HGDIinXT~p z3;S|e$=&Tek9Wn!`cdY+d-w@o`37}x{(hl>ykB|%9yB$CGdIcl7Z?d&lJ%}QHck77 zJPR%C+s2w1_Dl_pxu6$Zi!`HmoD-%7OD@7%lKLL^Ixd9VlRSW*o&$^iQ2z+}hTgH) z#91TO#+jH<`w4L}XWOt(`gqM*uTUcky`O(mEyU|4dJoy6*UZJ7%*}ajuos%~>&P2j zk23f5<@GeV?(?`l=ih+D8t`d72xrUjv0wsg;%s1@*2p?TQ;n2$pV7h?_T%sL>iL@w zZ{lmc<|B7!e&o!zs6RW+u8+aDyUdG>ZS(v&rT$QVymB7sEC@VsK1dg^3F@K90-wYB zX!we79qx`(6LA>F$~{{xE8-3Wzyfe`+Lsce(?uj{k@lb97YTJt#>l*Z&LyKX@zjmu?UJC9w~;|NsB{%7G}y*uNDBxirfC EKbET!0{{R3 diff --git a/public/icons/android-chrome-192x192.png b/public/icons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..df7376dd5c4bbd96b22503bcabec9cc64f5ecd26 GIT binary patch literal 6032 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 G^}hgod1Chf literal 0 HcmV?d00001 diff --git a/public/icons/apple-touch-icon.png b/public/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6951a8b1823f035395e22f63e553ddb87e84dec2 GIT binary patch literal 5630 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 Ud~!0K3bca3)78&qol`;+0M%n5^#A|> literal 0 HcmV?d00001 diff --git a/public/icons/favicon-32x32.png b/public/icons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd09361dfac1b1e9dc3720ca66f35aa1e6338719 GIT binary patch literal 1079 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EX(%Plzi}L2Byi)b!P9 zP_!yNeN{rje4t1=SR^%LOWYWA(&Ihc|Aza_G?A(`Oz( zdh~wh&YN}hJ5HT?^yA0x3m2bWzWn_E|Noyp{kVVs?XO>d7A-zAapIwxn(YS<-u?6E z?~ED8YU_4v*m&i_g{LP@KK%Lf&&`{!)~vaB=?P<3>lv-W@w{Jb3u- z;>Bl^ryOZ(-&0<(<=L~34UIdOEIIq|;rpWEO|M^n$<158XV0zTl1_`OzIyd}-~QXvryqOq;?uQjFLv#^`S{6)&0DU{nR{~Uwrl_X z{maf-*VB6-Giz;XyKe(9K*dXf{DK)gH@x__-h*S=lEv;D*S&oHca7`9MeJ)iUp}Y; zDq&3Wc6U+P!uE3}ki%Kv5m^k3%bg(1DERQKI#7_k#M9T6{TY+6fSI|ZQl1J>kGiLe zV~EA+qnE>j4><_1f4JJv5h$F~eXMQ8iq4K3flOLWO~?B7e*g7X-quT^Napve{}1(w zf6v}K^NcQogY)7ihi2_iDHj%blzD8|$0`YhR~@=*>?ciJIF&8;f*&($h}4RN`k&Rm zw-o(iXKU9w#P;vu0gs(>GP2VAz8?~d3{vG^vOOx%IMX=OW9iGBDZ0g$eG9E~h-Fz`7ubiJ%AusAT zdwWGm%wO%*2TrbR{ki$`uLI}oo4QYHbFa_Odw=A?KgFpPCiCaT$MtSs!13h1y@36G zrTaf7_gXeQKKWNkUQ|V8al>pjy9t>W7#}QsHMjMls!Moz;l8JGt|tGw`oFf@msJ!@ z6xyUz1`I{j64!{5l*E!$tK_0oAjM#0U}U6gV5Dnk8DeN=Wolw&YN~BuU}azstX=Pi zq9HdwB{QuOw+5xMg5-u&wghk1ymGX z6%tVrlvu7%P?VpRnUkteQdy9ykXcZY%)n4F=kX^Vj>0evjZ^-o&v-r!VqjM0)=TCV zRu=Z2EW#|T;L>1nIE7hxbBMy}8&^&oIdeqj2>a;@rv{j2~0 literal 0 HcmV?d00001 diff --git a/public/icons/mstile-144x144.png b/public/icons/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..d60b51929c11132e218e4b21bf25e94e490c2456 GIT binary patch literal 4476 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ⓈbFYvW3*&S?Zy+p$#DR?u1&oYZ0qOH|#Ansh^b%NCSPNUE$?BWIdcm9O2m5 z)c$M7NU=KPf#TdN_EdafHQe4_et1z|;?lUUlenW3MN*26k>G6k_snHNYm3!JENClg zoq3-|)}{^&JG!s-uPsX)0#sLDCLvO`&CfMtZ1t+i`*lg?h2oXVl<+by8yBsJBr(#*)r-QuGg)LG^T(k-dzqNHdv%=g(?JiZ3tS<)+8C)ywUlfk zCuwo);^{NyyP(C4Jx9BYWf$pz&Lej?+DqBj*QBKM_HBpb?JV9!cAoOKz_uq*x3P8~ za26(I4edYcKOy(eU+{mAs+?Zl>Nyro>u6fA08wgqBRl*}Cp=0QiA8}Epas*?Iu6r1 zu8FYLJgE!U(S@Hn27~FsVDw^7%>NKPyl%Rp1OA;*!sqsa1lvGs@Ym{eTg4meg?4pE zso(>=Q7W$9cq9P$rw-0++2nIoUA^ftv)Pn)1&~&iJAsr_P*pIC-!847Vi=}VdsAAK qX05{P<}}co=}@{XGt4CY!U;g2xD7vZ4xYH)s;SW>!@_fp;r{{PHM!CN literal 0 HcmV?d00001 diff --git a/public/icons/mstile-310x150.png b/public/icons/mstile-310x150.png new file mode 100644 index 0000000000000000000000000000000000000000..411e18f05d4ba9d532bd3e0bd7ac1022579d7d11 GIT binary patch literal 3144 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 literal 0 HcmV?d00001 diff --git a/public/icons/mstile-310x310.png b/public/icons/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd6e8fbb2ac63bb2dcf3003c1c291197f512bbc GIT binary patch literal 9758 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 literal 0 HcmV?d00001 diff --git a/public/icons/mstile-70x70.png b/public/icons/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..bab4a2cc6eccfdd866e21ebca57479a2de9fefa3 GIT binary patch literal 2062 zcmZ`(c|6oxAO0EUnoFWo)b-xTEwa=QlDf7?5^A{Uqs2CxjIAkK%4m7X4YyPXSMnBS zEMpn_lCd@zTQinuEJKVL!&t^L=bYFp4mNT!hhzW% zkh8sLg#dHZ_JT=*af$WU8knTe7WNhZKu(a|^n`+3)%zmC9st6Rfx5>4u)eMT4gh!I z05IzT04B)*pcI%^b@dzoK-{lfcD4ouC{#WYO#~+jMMQyd2VgKH94;HZO-b8381OU& z1V|)E^FV+`=YezkXd7?S9{`B~L0(i;{f`|lFY>kqMe@OtP#Drq!T)yI@q$f}$UGEk z+m1x$fYHY{2bAs9A!4yREign3reM21h8Q3JsiJaVbd<~IuWoFJwzjs!V)5*(puK%8 zHMP|bSMcH`b$on&etzYBb|(f)LSsnfBz{W#t8rmrb!J8&5D2SlhQ`L`-(_{gKC8opdA$R#*BLy*!3ogE6MJ~;cl36L z3=Z6b&TIGeYB?`2A-p#|uXalXbLE(f6G6G0HQ^jR5U$&GZ1K3Ghd|>?o{m?_aUNJi z!pqLa%3M5neE=lVcw2jG=_!b!f{}4-`kgZH8Nh64*z&#{ANwX+htej;;++ z$GKC5gDEywef~2b|9W*)(>U8u*`AZg%Ir3JI^&5OK6v5uObIz8-~u)h0TIo3rDfw) z3D>MLsMi(fPrkCdEcYvubfZ2?CqlM8QsMj{8nu!gpAMX?8 zPa;O_y`aUgL6w+!?Zorw@dISYFR&E)NreVxj=7%NQ4=Z3UWAr&!v#m*s@;Sq_=qi~ zEDM4`6}8ets(0%!p%|yDT{LpDj_N1T>M&g(6C&^*s%iC;_-TZr`yx^-bwB~J>mnoq zOTMnlMQ=(zm~ODJ-0k_Z%7-1oFbiogg|I!TH?opfBvyf zd5WzGtPr-($CtdJuB?{oNjiC?Mv!a|1GC8%sPxZ;(r$0(c*K@{p*M5tbhdKDayf!D znHK4`c6{X-IF!}<(JO+14q?a9Shs75zC_W5x~-h?vAA_q_OB~{yVl6XUN=+J0OFHw z)#L8J9fv8$Q_SNYo_T(LKTCK|B~}Y=<(}EhlxG!W#xM^kKhuI=2DxjG>WOR!jJ*dY zYcV0n&$di^s^XM*^oVk-S=t@LbbYViWX!Y(FAFtCNU-}HP5-*AC4~Twf8;+Z)cpOu zl%VzdK{Gqc(ko&<*<|fmFR{GB`bN+~jo_OG`E{Kof5OuHIqS<3$IR5EMR=+=vqDXB zTtoQ-t?kE1era|hXfs@`VsAS5O&rBryWxF2@kkTzU?i9TeYn29E?i$%?~Jpak%^&! ziJ_4;9Bu-Kdr^^n|6{-f_+U|C|KFgPF%ke8T*IB+@CeTk)xh8Y6xI)^iVq7!s$v82 z-T)AqHnF%17UZI-`Pq@yVarAUlIpT2yk!;D742T`lT=i-iZY=3NUE1OtI`Jg+nPF> iRGOq|Q5Q2Wod9N)_TU#S4PSvR09$JZs{%`p=zjyFk{SyD literal 0 HcmV?d00001 diff --git a/public/icons/safari-pinned-tab.svg b/public/icons/safari-pinned-tab.svg new file mode 100644 index 0000000..fe03a4e --- /dev/null +++ b/public/icons/safari-pinned-tab.svg @@ -0,0 +1,40 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..b20abb7 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +}