diff --git a/app/entry.client.tsx b/app/entry.client.tsx index 170d52bc3..27ab5d3c9 100644 --- a/app/entry.client.tsx +++ b/app/entry.client.tsx @@ -4,6 +4,13 @@ import { i18nLoader } from "./modules/i18n"; import i18next from "i18next"; import { I18nextProvider } from "react-i18next"; +if ("serviceWorker" in navigator) { + window.addEventListener("load", () => { + // we will register it after the page complete the load + void navigator.serviceWorker.register("/sw.js"); + }); +} + i18nLoader() .then(() => hydrateRoot( diff --git a/app/root.tsx b/app/root.tsx index 1f8bb8526..e19849584 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -57,8 +57,10 @@ export const meta: MetaFunction = () => ({ title: "sendou.ink", description: "Competitive Splatoon Hub featuring gear planner, event calendar, builds by top players, and more!", - viewport: "width=device-width,initial-scale=1", - "theme-color": "#02011e", + viewport: "initial-scale=1, viewport-fit=cover, user-scalable=no", + "apple-mobile-web-app-status-bar-style": "black-translucent", + "apple-mobile-web-app-capable": "yes", + "theme-color": "#010115", "og:image": COMMON_PREVIEW_IMAGE, }); @@ -125,6 +127,8 @@ function Document({ + + @@ -141,23 +145,6 @@ function Document({ ); } -function Fonts() { - return ( - <> - - - - - ); -} - // TODO: this should be an array if we can figure out how to make Typescript // enforce that it has every member of keyof CustomTypeOptions["resources"] without duplicating the type manually export const namespaceJsonsToPreloadObj: Record< @@ -214,3 +201,198 @@ export const ErrorBoundary: ErrorBoundaryComponent = ({ error }) => { ); }; + +function Fonts() { + return ( + <> + + + + + ); +} + +function PWALinks() { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/app/styles/common.css b/app/styles/common.css index cc4949033..f60bbe32b 100644 --- a/app/styles/common.css +++ b/app/styles/common.css @@ -13,6 +13,7 @@ body { -moz-osx-font-smoothing: antialiased; line-height: 1.55; overflow-x: hidden; + -webkit-tap-highlight-color: transparent; } *:focus:not(:focus-visible) { diff --git a/app/styles/layout.css b/app/styles/layout.css index 916eacfbb..d26754c46 100644 --- a/app/styles/layout.css +++ b/app/styles/layout.css @@ -256,6 +256,17 @@ background-color: var(--theme-transparent); } +@media screen and (display-mode: standalone) { + .layout__header { + height: 80px; + align-items: flex-end; + } + + .layout__main { + padding-block-start: var(--s-26); + } +} + @media screen and (max-width: 900px) { .layout__side-nav { display: none; diff --git a/app/styles/vars.css b/app/styles/vars.css index d4ec1be9e..218a78518 100644 --- a/app/styles/vars.css +++ b/app/styles/vars.css @@ -68,6 +68,7 @@ --s-16: 4rem; --s-20: 5rem; --s-24: 6rem; + --s-26: 6.5rem; --s-28: 7rem; --s-32: 8rem; --s-40: 10rem; diff --git a/public/app.webmanifest b/public/app.webmanifest new file mode 100644 index 000000000..c1649601e --- /dev/null +++ b/public/app.webmanifest @@ -0,0 +1,51 @@ +{ + "name": "sendou.ink", + "start_url": "/", + "display": "standalone", + "id": "sendou.ink", + "description": "Competitive Splatoon Hub", + "theme_color": "#010115", + "background_color": "#02011e", + "icons": [ + { + "src": "/static-assets/img/app-icon.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "shortcuts": [ + { + "name": "Builds", + "url": "/builds", + "icons": [ + { + "src": "/static-assets/img/pwa-icons/builds.png", + "type": "image/png", + "sizes": "96x96" + } + ] + }, + { + "name": "Build Analyzer", + "url": "/analyzer", + "icons": [ + { + "src": "/static-assets/img/pwa-icons/analyzer.png", + "type": "image/png", + "sizes": "96x96" + } + ] + }, + { + "name": "Calendar", + "url": "/calendar", + "icons": [ + { + "src": "/static-assets/img/pwa-icons/calendar.png", + "type": "image/png", + "sizes": "96x96" + } + ] + } + ] +} diff --git a/public/static-assets/img/app-icon.png b/public/static-assets/img/app-icon.png new file mode 100644 index 000000000..6fcb355f6 Binary files /dev/null and b/public/static-assets/img/app-icon.png differ diff --git a/public/static-assets/img/pwa-icons/analyzer.png b/public/static-assets/img/pwa-icons/analyzer.png new file mode 100644 index 000000000..17f4ceade Binary files /dev/null and b/public/static-assets/img/pwa-icons/analyzer.png differ diff --git a/public/static-assets/img/pwa-icons/builds.png b/public/static-assets/img/pwa-icons/builds.png new file mode 100644 index 000000000..939f1e42e Binary files /dev/null and b/public/static-assets/img/pwa-icons/builds.png differ diff --git a/public/static-assets/img/pwa-icons/calendar.png b/public/static-assets/img/pwa-icons/calendar.png new file mode 100644 index 000000000..89968914f Binary files /dev/null and b/public/static-assets/img/pwa-icons/calendar.png differ diff --git a/public/static-assets/img/splash-screens/10.2__iPad_landscape.png b/public/static-assets/img/splash-screens/10.2__iPad_landscape.png new file mode 100644 index 000000000..1dc72a155 Binary files /dev/null and b/public/static-assets/img/splash-screens/10.2__iPad_landscape.png differ diff --git a/public/static-assets/img/splash-screens/10.2__iPad_portrait.png b/public/static-assets/img/splash-screens/10.2__iPad_portrait.png new file mode 100644 index 000000000..5166e1040 Binary files /dev/null and b/public/static-assets/img/splash-screens/10.2__iPad_portrait.png differ diff --git a/public/static-assets/img/splash-screens/10.5__iPad_Air_landscape.png b/public/static-assets/img/splash-screens/10.5__iPad_Air_landscape.png new file mode 100644 index 000000000..bbcf9b0a2 Binary files /dev/null and b/public/static-assets/img/splash-screens/10.5__iPad_Air_landscape.png differ diff --git a/public/static-assets/img/splash-screens/10.5__iPad_Air_portrait.png b/public/static-assets/img/splash-screens/10.5__iPad_Air_portrait.png new file mode 100644 index 000000000..3535ad352 Binary files /dev/null and b/public/static-assets/img/splash-screens/10.5__iPad_Air_portrait.png differ diff --git a/public/static-assets/img/splash-screens/10.9__iPad_Air_landscape.png b/public/static-assets/img/splash-screens/10.9__iPad_Air_landscape.png new file mode 100644 index 000000000..09bb6771c Binary files /dev/null and b/public/static-assets/img/splash-screens/10.9__iPad_Air_landscape.png differ diff --git a/public/static-assets/img/splash-screens/10.9__iPad_Air_portrait.png b/public/static-assets/img/splash-screens/10.9__iPad_Air_portrait.png new file mode 100644 index 000000000..03d419db6 Binary files /dev/null and b/public/static-assets/img/splash-screens/10.9__iPad_Air_portrait.png differ diff --git a/public/static-assets/img/splash-screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png b/public/static-assets/img/splash-screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png new file mode 100644 index 000000000..9826cabf6 Binary files /dev/null and b/public/static-assets/img/splash-screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png differ diff --git a/public/static-assets/img/splash-screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png b/public/static-assets/img/splash-screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png new file mode 100644 index 000000000..e69d4c1e1 Binary files /dev/null and b/public/static-assets/img/splash-screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png differ diff --git a/public/static-assets/img/splash-screens/12.9__iPad_Pro_landscape.png b/public/static-assets/img/splash-screens/12.9__iPad_Pro_landscape.png new file mode 100644 index 000000000..13a808681 Binary files /dev/null and b/public/static-assets/img/splash-screens/12.9__iPad_Pro_landscape.png differ diff --git a/public/static-assets/img/splash-screens/12.9__iPad_Pro_portrait.png b/public/static-assets/img/splash-screens/12.9__iPad_Pro_portrait.png new file mode 100644 index 000000000..6fb540317 Binary files /dev/null and b/public/static-assets/img/splash-screens/12.9__iPad_Pro_portrait.png differ diff --git a/public/static-assets/img/splash-screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png b/public/static-assets/img/splash-screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png new file mode 100644 index 000000000..8d9da563f Binary files /dev/null and b/public/static-assets/img/splash-screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png differ diff --git a/public/static-assets/img/splash-screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png b/public/static-assets/img/splash-screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png new file mode 100644 index 000000000..e8d169b81 Binary files /dev/null and b/public/static-assets/img/splash-screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png differ diff --git a/public/static-assets/img/splash-screens/8.3__iPad_Mini_landscape.png b/public/static-assets/img/splash-screens/8.3__iPad_Mini_landscape.png new file mode 100644 index 000000000..1b29e1ec6 Binary files /dev/null and b/public/static-assets/img/splash-screens/8.3__iPad_Mini_landscape.png differ diff --git a/public/static-assets/img/splash-screens/8.3__iPad_Mini_portrait.png b/public/static-assets/img/splash-screens/8.3__iPad_Mini_portrait.png new file mode 100644 index 000000000..236cefd30 Binary files /dev/null and b/public/static-assets/img/splash-screens/8.3__iPad_Mini_portrait.png differ diff --git a/public/static-assets/img/splash-screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png b/public/static-assets/img/splash-screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png new file mode 100644 index 000000000..354f52c1a Binary files /dev/null and b/public/static-assets/img/splash-screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png differ diff --git a/public/static-assets/img/splash-screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png b/public/static-assets/img/splash-screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png new file mode 100644 index 000000000..31e5b3f1b Binary files /dev/null and b/public/static-assets/img/splash-screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png b/public/static-assets/img/splash-screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png new file mode 100644 index 000000000..6e972c520 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png b/public/static-assets/img/splash-screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png new file mode 100644 index 000000000..a06ced7d5 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_11__iPhone_XR_landscape.png b/public/static-assets/img/splash-screens/iPhone_11__iPhone_XR_landscape.png new file mode 100644 index 000000000..e372584ae Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_11__iPhone_XR_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_11__iPhone_XR_portrait.png b/public/static-assets/img/splash-screens/iPhone_11__iPhone_XR_portrait.png new file mode 100644 index 000000000..d2933a298 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_11__iPhone_XR_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png b/public/static-assets/img/splash-screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png new file mode 100644 index 000000000..f76778b09 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png b/public/static-assets/img/splash-screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png new file mode 100644 index 000000000..603ac4e66 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png b/public/static-assets/img/splash-screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png new file mode 100644 index 000000000..df82607f1 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png b/public/static-assets/img/splash-screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png new file mode 100644 index 000000000..d7cc008c4 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14_Pro_Max_landscape.png b/public/static-assets/img/splash-screens/iPhone_14_Pro_Max_landscape.png new file mode 100644 index 000000000..791b91b79 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14_Pro_Max_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14_Pro_Max_portrait.png b/public/static-assets/img/splash-screens/iPhone_14_Pro_Max_portrait.png new file mode 100644 index 000000000..4b3120e5a Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14_Pro_Max_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14_Pro_landscape.png b/public/static-assets/img/splash-screens/iPhone_14_Pro_landscape.png new file mode 100644 index 000000000..08917f831 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14_Pro_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14_Pro_portrait.png b/public/static-assets/img/splash-screens/iPhone_14_Pro_portrait.png new file mode 100644 index 000000000..0e803f3f6 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14_Pro_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png b/public/static-assets/img/splash-screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png new file mode 100644 index 000000000..8f86c94cc Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png b/public/static-assets/img/splash-screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png new file mode 100644 index 000000000..c1a9b7a8b Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png b/public/static-assets/img/splash-screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png new file mode 100644 index 000000000..24cd7196c Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png b/public/static-assets/img/splash-screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png new file mode 100644 index 000000000..adbb429a0 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png b/public/static-assets/img/splash-screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png new file mode 100644 index 000000000..208dca2ed Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png differ diff --git a/public/static-assets/img/splash-screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png b/public/static-assets/img/splash-screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png new file mode 100644 index 000000000..6fc7a32d3 Binary files /dev/null and b/public/static-assets/img/splash-screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png differ diff --git a/public/sw.js b/public/sw.js new file mode 100644 index 000000000..ec9c1d84c --- /dev/null +++ b/public/sw.js @@ -0,0 +1,3 @@ +self.addEventListener("fetch", function () { + return; +});