diff --git a/.env.sample b/.env.sample index 40b1f22..736b828 100644 --- a/.env.sample +++ b/.env.sample @@ -1,3 +1,4 @@ NEXT_PUBLIC_API_URL=http://localhost:4000/v1 UMAMI_URL= UMAMI_WEBSITE_ID= +PROD_DOMAIN= diff --git a/.gitignore b/.gitignore index 07d62d3..74213a0 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ next-env.d.ts *storybook.log storybook-static + +certificates \ No newline at end of file diff --git a/public/icons/android/android-launchericon-144-144.png b/public/icons/android/android-launchericon-144-144.png new file mode 100644 index 0000000..b070b01 Binary files /dev/null and b/public/icons/android/android-launchericon-144-144.png differ diff --git a/public/icons/android/android-launchericon-192-192.png b/public/icons/android/android-launchericon-192-192.png new file mode 100644 index 0000000..39f23e3 Binary files /dev/null and b/public/icons/android/android-launchericon-192-192.png differ diff --git a/public/icons/android/android-launchericon-48-48.png b/public/icons/android/android-launchericon-48-48.png new file mode 100644 index 0000000..c8ae7c9 Binary files /dev/null and b/public/icons/android/android-launchericon-48-48.png differ diff --git a/public/icons/android/android-launchericon-512-512.png b/public/icons/android/android-launchericon-512-512.png new file mode 100644 index 0000000..75aacc9 Binary files /dev/null and b/public/icons/android/android-launchericon-512-512.png differ diff --git a/public/icons/android/android-launchericon-72-72.png b/public/icons/android/android-launchericon-72-72.png new file mode 100644 index 0000000..3a18177 Binary files /dev/null and b/public/icons/android/android-launchericon-72-72.png differ diff --git a/public/icons/android/android-launchericon-96-96.png b/public/icons/android/android-launchericon-96-96.png new file mode 100644 index 0000000..aea8cd1 Binary files /dev/null and b/public/icons/android/android-launchericon-96-96.png differ diff --git a/public/icons/exchange-512x512.png b/public/icons/exchange-512x512.png new file mode 100644 index 0000000..311a542 Binary files /dev/null and b/public/icons/exchange-512x512.png differ diff --git a/public/icons/favicon-16x16.png b/public/icons/favicon-16x16.png new file mode 100644 index 0000000..3998f68 Binary files /dev/null and b/public/icons/favicon-16x16.png differ diff --git a/public/icons/favicon-32x32.png b/public/icons/favicon-32x32.png new file mode 100644 index 0000000..d364ca2 Binary files /dev/null and b/public/icons/favicon-32x32.png differ diff --git a/public/icons/favicon-48x48.png b/public/icons/favicon-48x48.png new file mode 100644 index 0000000..99e37a0 Binary files /dev/null and b/public/icons/favicon-48x48.png differ diff --git a/public/icons/favicon-64x64.png b/public/icons/favicon-64x64.png new file mode 100644 index 0000000..8e1b6d6 Binary files /dev/null and b/public/icons/favicon-64x64.png differ diff --git a/public/icons/favicon-96x96.png b/public/icons/favicon-96x96.png new file mode 100644 index 0000000..1754875 Binary files /dev/null and b/public/icons/favicon-96x96.png differ diff --git a/public/icons/ios/100.png b/public/icons/ios/100.png new file mode 100644 index 0000000..49176b7 Binary files /dev/null and b/public/icons/ios/100.png differ diff --git a/public/icons/ios/1024.png b/public/icons/ios/1024.png new file mode 100644 index 0000000..77a2eb0 Binary files /dev/null and b/public/icons/ios/1024.png differ diff --git a/public/icons/ios/114.png b/public/icons/ios/114.png new file mode 100644 index 0000000..c327152 Binary files /dev/null and b/public/icons/ios/114.png differ diff --git a/public/icons/ios/120.png b/public/icons/ios/120.png new file mode 100644 index 0000000..4f79b40 Binary files /dev/null and b/public/icons/ios/120.png differ diff --git a/public/icons/ios/128.png b/public/icons/ios/128.png new file mode 100644 index 0000000..8634d0f Binary files /dev/null and b/public/icons/ios/128.png differ diff --git a/public/icons/ios/144.png b/public/icons/ios/144.png new file mode 100644 index 0000000..b070b01 Binary files /dev/null and b/public/icons/ios/144.png differ diff --git a/public/icons/ios/152.png b/public/icons/ios/152.png new file mode 100644 index 0000000..bfac2b9 Binary files /dev/null and b/public/icons/ios/152.png differ diff --git a/public/icons/ios/16.png b/public/icons/ios/16.png new file mode 100644 index 0000000..c67a7cd Binary files /dev/null and b/public/icons/ios/16.png differ diff --git a/public/icons/ios/167.png b/public/icons/ios/167.png new file mode 100644 index 0000000..b3d6ce9 Binary files /dev/null and b/public/icons/ios/167.png differ diff --git a/public/icons/ios/180.png b/public/icons/ios/180.png new file mode 100644 index 0000000..ce5572e Binary files /dev/null and b/public/icons/ios/180.png differ diff --git a/public/icons/ios/192.png b/public/icons/ios/192.png new file mode 100644 index 0000000..39f23e3 Binary files /dev/null and b/public/icons/ios/192.png differ diff --git a/public/icons/ios/20.png b/public/icons/ios/20.png new file mode 100644 index 0000000..aea8874 Binary files /dev/null and b/public/icons/ios/20.png differ diff --git a/public/icons/ios/256.png b/public/icons/ios/256.png new file mode 100644 index 0000000..ca7e31a Binary files /dev/null and b/public/icons/ios/256.png differ diff --git a/public/icons/ios/29.png b/public/icons/ios/29.png new file mode 100644 index 0000000..0c0ae26 Binary files /dev/null and b/public/icons/ios/29.png differ diff --git a/public/icons/ios/32.png b/public/icons/ios/32.png new file mode 100644 index 0000000..cb65aba Binary files /dev/null and b/public/icons/ios/32.png differ diff --git a/public/icons/ios/40.png b/public/icons/ios/40.png new file mode 100644 index 0000000..860110f Binary files /dev/null and b/public/icons/ios/40.png differ diff --git a/public/icons/ios/50.png b/public/icons/ios/50.png new file mode 100644 index 0000000..3af361b Binary files /dev/null and b/public/icons/ios/50.png differ diff --git a/public/icons/ios/512.png b/public/icons/ios/512.png new file mode 100644 index 0000000..75aacc9 Binary files /dev/null and b/public/icons/ios/512.png differ diff --git a/public/icons/ios/57.png b/public/icons/ios/57.png new file mode 100644 index 0000000..82a74af Binary files /dev/null and b/public/icons/ios/57.png differ diff --git a/public/icons/ios/58.png b/public/icons/ios/58.png new file mode 100644 index 0000000..85ca1eb Binary files /dev/null and b/public/icons/ios/58.png differ diff --git a/public/icons/ios/60.png b/public/icons/ios/60.png new file mode 100644 index 0000000..9481f5c Binary files /dev/null and b/public/icons/ios/60.png differ diff --git a/public/icons/ios/64.png b/public/icons/ios/64.png new file mode 100644 index 0000000..56ea0b0 Binary files /dev/null and b/public/icons/ios/64.png differ diff --git a/public/icons/ios/72.png b/public/icons/ios/72.png new file mode 100644 index 0000000..3a18177 Binary files /dev/null and b/public/icons/ios/72.png differ diff --git a/public/icons/ios/76.png b/public/icons/ios/76.png new file mode 100644 index 0000000..f9272f6 Binary files /dev/null and b/public/icons/ios/76.png differ diff --git a/public/icons/ios/80.png b/public/icons/ios/80.png new file mode 100644 index 0000000..cbbaaec Binary files /dev/null and b/public/icons/ios/80.png differ diff --git a/public/icons/ios/87.png b/public/icons/ios/87.png new file mode 100644 index 0000000..937b443 Binary files /dev/null and b/public/icons/ios/87.png differ diff --git a/public/icons/schedule-512x512.png b/public/icons/schedule-512x512.png new file mode 100644 index 0000000..0a534b3 Binary files /dev/null and b/public/icons/schedule-512x512.png differ diff --git a/public/icons/windows11/LargeTile.scale-100.png b/public/icons/windows11/LargeTile.scale-100.png new file mode 100644 index 0000000..c752934 Binary files /dev/null and b/public/icons/windows11/LargeTile.scale-100.png differ diff --git a/public/icons/windows11/LargeTile.scale-125.png b/public/icons/windows11/LargeTile.scale-125.png new file mode 100644 index 0000000..33c0500 Binary files /dev/null and b/public/icons/windows11/LargeTile.scale-125.png differ diff --git a/public/icons/windows11/LargeTile.scale-150.png b/public/icons/windows11/LargeTile.scale-150.png new file mode 100644 index 0000000..4da4ea2 Binary files /dev/null and b/public/icons/windows11/LargeTile.scale-150.png differ diff --git a/public/icons/windows11/LargeTile.scale-200.png b/public/icons/windows11/LargeTile.scale-200.png new file mode 100644 index 0000000..6a4403e Binary files /dev/null and b/public/icons/windows11/LargeTile.scale-200.png differ diff --git a/public/icons/windows11/LargeTile.scale-400.png b/public/icons/windows11/LargeTile.scale-400.png new file mode 100644 index 0000000..0e43fb9 Binary files /dev/null and b/public/icons/windows11/LargeTile.scale-400.png differ diff --git a/public/icons/windows11/SmallTile.scale-100.png b/public/icons/windows11/SmallTile.scale-100.png new file mode 100644 index 0000000..eed4940 Binary files /dev/null and b/public/icons/windows11/SmallTile.scale-100.png differ diff --git a/public/icons/windows11/SmallTile.scale-125.png b/public/icons/windows11/SmallTile.scale-125.png new file mode 100644 index 0000000..ba39a68 Binary files /dev/null and b/public/icons/windows11/SmallTile.scale-125.png differ diff --git a/public/icons/windows11/SmallTile.scale-150.png b/public/icons/windows11/SmallTile.scale-150.png new file mode 100644 index 0000000..28e8678 Binary files /dev/null and b/public/icons/windows11/SmallTile.scale-150.png differ diff --git a/public/icons/windows11/SmallTile.scale-200.png b/public/icons/windows11/SmallTile.scale-200.png new file mode 100644 index 0000000..0042b2b Binary files /dev/null and b/public/icons/windows11/SmallTile.scale-200.png differ diff --git a/public/icons/windows11/SmallTile.scale-400.png b/public/icons/windows11/SmallTile.scale-400.png new file mode 100644 index 0000000..57b53ce Binary files /dev/null and b/public/icons/windows11/SmallTile.scale-400.png differ diff --git a/public/icons/windows11/SplashScreen.scale-100.png b/public/icons/windows11/SplashScreen.scale-100.png new file mode 100644 index 0000000..9ff15bc Binary files /dev/null and b/public/icons/windows11/SplashScreen.scale-100.png differ diff --git a/public/icons/windows11/SplashScreen.scale-125.png b/public/icons/windows11/SplashScreen.scale-125.png new file mode 100644 index 0000000..7f2468e Binary files /dev/null and b/public/icons/windows11/SplashScreen.scale-125.png differ diff --git a/public/icons/windows11/SplashScreen.scale-150.png b/public/icons/windows11/SplashScreen.scale-150.png new file mode 100644 index 0000000..4df13e7 Binary files /dev/null and b/public/icons/windows11/SplashScreen.scale-150.png differ diff --git a/public/icons/windows11/SplashScreen.scale-200.png b/public/icons/windows11/SplashScreen.scale-200.png new file mode 100644 index 0000000..f7b005d Binary files /dev/null and b/public/icons/windows11/SplashScreen.scale-200.png differ diff --git a/public/icons/windows11/SplashScreen.scale-400.png b/public/icons/windows11/SplashScreen.scale-400.png new file mode 100644 index 0000000..72fff66 Binary files /dev/null and b/public/icons/windows11/SplashScreen.scale-400.png differ diff --git a/public/icons/windows11/Square150x150Logo.scale-100.png b/public/icons/windows11/Square150x150Logo.scale-100.png new file mode 100644 index 0000000..f170cff Binary files /dev/null and b/public/icons/windows11/Square150x150Logo.scale-100.png differ diff --git a/public/icons/windows11/Square150x150Logo.scale-125.png b/public/icons/windows11/Square150x150Logo.scale-125.png new file mode 100644 index 0000000..3df0aaf Binary files /dev/null and b/public/icons/windows11/Square150x150Logo.scale-125.png differ diff --git a/public/icons/windows11/Square150x150Logo.scale-150.png b/public/icons/windows11/Square150x150Logo.scale-150.png new file mode 100644 index 0000000..15aab96 Binary files /dev/null and b/public/icons/windows11/Square150x150Logo.scale-150.png differ diff --git a/public/icons/windows11/Square150x150Logo.scale-200.png b/public/icons/windows11/Square150x150Logo.scale-200.png new file mode 100644 index 0000000..38100c5 Binary files /dev/null and b/public/icons/windows11/Square150x150Logo.scale-200.png differ diff --git a/public/icons/windows11/Square150x150Logo.scale-400.png b/public/icons/windows11/Square150x150Logo.scale-400.png new file mode 100644 index 0000000..dfd3469 Binary files /dev/null and b/public/icons/windows11/Square150x150Logo.scale-400.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png new file mode 100644 index 0000000..c67a7cd Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png new file mode 100644 index 0000000..aea8874 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png new file mode 100644 index 0000000..0fdbead Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png new file mode 100644 index 0000000..ca7e31a Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png new file mode 100644 index 0000000..d8dd5f4 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png new file mode 100644 index 0000000..cb65aba Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png new file mode 100644 index 0000000..90ce995 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png new file mode 100644 index 0000000..860110f Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png new file mode 100644 index 0000000..14e44a1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png new file mode 100644 index 0000000..c8ae7c9 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png new file mode 100644 index 0000000..9481f5c Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png new file mode 100644 index 0000000..56ea0b0 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png new file mode 100644 index 0000000..3a18177 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png new file mode 100644 index 0000000..cbbaaec Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png new file mode 100644 index 0000000..aea8cd1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png new file mode 100644 index 0000000..c67a7cd Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png new file mode 100644 index 0000000..aea8874 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png new file mode 100644 index 0000000..0fdbead Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png new file mode 100644 index 0000000..ca7e31a Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png new file mode 100644 index 0000000..d8dd5f4 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png new file mode 100644 index 0000000..cb65aba Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png new file mode 100644 index 0000000..90ce995 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png new file mode 100644 index 0000000..860110f Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png new file mode 100644 index 0000000..14e44a1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png new file mode 100644 index 0000000..c8ae7c9 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png new file mode 100644 index 0000000..9481f5c Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png new file mode 100644 index 0000000..56ea0b0 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png new file mode 100644 index 0000000..3a18177 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png new file mode 100644 index 0000000..cbbaaec Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png differ diff --git a/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png new file mode 100644 index 0000000..aea8cd1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png differ diff --git a/public/icons/windows11/Square44x44Logo.scale-100.png b/public/icons/windows11/Square44x44Logo.scale-100.png new file mode 100644 index 0000000..14e44a1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.scale-100.png differ diff --git a/public/icons/windows11/Square44x44Logo.scale-125.png b/public/icons/windows11/Square44x44Logo.scale-125.png new file mode 100644 index 0000000..f4e3c2b Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.scale-125.png differ diff --git a/public/icons/windows11/Square44x44Logo.scale-150.png b/public/icons/windows11/Square44x44Logo.scale-150.png new file mode 100644 index 0000000..ed7dfbf Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.scale-150.png differ diff --git a/public/icons/windows11/Square44x44Logo.scale-200.png b/public/icons/windows11/Square44x44Logo.scale-200.png new file mode 100644 index 0000000..ce541d5 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.scale-200.png differ diff --git a/public/icons/windows11/Square44x44Logo.scale-400.png b/public/icons/windows11/Square44x44Logo.scale-400.png new file mode 100644 index 0000000..d1ab378 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.scale-400.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-16.png b/public/icons/windows11/Square44x44Logo.targetsize-16.png new file mode 100644 index 0000000..c67a7cd Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-16.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-20.png b/public/icons/windows11/Square44x44Logo.targetsize-20.png new file mode 100644 index 0000000..aea8874 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-20.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-24.png b/public/icons/windows11/Square44x44Logo.targetsize-24.png new file mode 100644 index 0000000..0fdbead Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-24.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-256.png b/public/icons/windows11/Square44x44Logo.targetsize-256.png new file mode 100644 index 0000000..ca7e31a Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-256.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-30.png b/public/icons/windows11/Square44x44Logo.targetsize-30.png new file mode 100644 index 0000000..d8dd5f4 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-30.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-32.png b/public/icons/windows11/Square44x44Logo.targetsize-32.png new file mode 100644 index 0000000..cb65aba Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-32.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-36.png b/public/icons/windows11/Square44x44Logo.targetsize-36.png new file mode 100644 index 0000000..90ce995 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-36.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-40.png b/public/icons/windows11/Square44x44Logo.targetsize-40.png new file mode 100644 index 0000000..860110f Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-40.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-44.png b/public/icons/windows11/Square44x44Logo.targetsize-44.png new file mode 100644 index 0000000..14e44a1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-44.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-48.png b/public/icons/windows11/Square44x44Logo.targetsize-48.png new file mode 100644 index 0000000..c8ae7c9 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-48.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-60.png b/public/icons/windows11/Square44x44Logo.targetsize-60.png new file mode 100644 index 0000000..9481f5c Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-60.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-64.png b/public/icons/windows11/Square44x44Logo.targetsize-64.png new file mode 100644 index 0000000..56ea0b0 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-64.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-72.png b/public/icons/windows11/Square44x44Logo.targetsize-72.png new file mode 100644 index 0000000..3a18177 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-72.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-80.png b/public/icons/windows11/Square44x44Logo.targetsize-80.png new file mode 100644 index 0000000..cbbaaec Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-80.png differ diff --git a/public/icons/windows11/Square44x44Logo.targetsize-96.png b/public/icons/windows11/Square44x44Logo.targetsize-96.png new file mode 100644 index 0000000..aea8cd1 Binary files /dev/null and b/public/icons/windows11/Square44x44Logo.targetsize-96.png differ diff --git a/public/icons/windows11/StoreLogo.scale-100.png b/public/icons/windows11/StoreLogo.scale-100.png new file mode 100644 index 0000000..8169345 Binary files /dev/null and b/public/icons/windows11/StoreLogo.scale-100.png differ diff --git a/public/icons/windows11/StoreLogo.scale-125.png b/public/icons/windows11/StoreLogo.scale-125.png new file mode 100644 index 0000000..d9d1a37 Binary files /dev/null and b/public/icons/windows11/StoreLogo.scale-125.png differ diff --git a/public/icons/windows11/StoreLogo.scale-150.png b/public/icons/windows11/StoreLogo.scale-150.png new file mode 100644 index 0000000..4f6afea Binary files /dev/null and b/public/icons/windows11/StoreLogo.scale-150.png differ diff --git a/public/icons/windows11/StoreLogo.scale-200.png b/public/icons/windows11/StoreLogo.scale-200.png new file mode 100644 index 0000000..4fb81b1 Binary files /dev/null and b/public/icons/windows11/StoreLogo.scale-200.png differ diff --git a/public/icons/windows11/StoreLogo.scale-400.png b/public/icons/windows11/StoreLogo.scale-400.png new file mode 100644 index 0000000..755e649 Binary files /dev/null and b/public/icons/windows11/StoreLogo.scale-400.png differ diff --git a/public/icons/windows11/Wide310x150Logo.scale-100.png b/public/icons/windows11/Wide310x150Logo.scale-100.png new file mode 100644 index 0000000..2c40393 Binary files /dev/null and b/public/icons/windows11/Wide310x150Logo.scale-100.png differ diff --git a/public/icons/windows11/Wide310x150Logo.scale-125.png b/public/icons/windows11/Wide310x150Logo.scale-125.png new file mode 100644 index 0000000..c465c7c Binary files /dev/null and b/public/icons/windows11/Wide310x150Logo.scale-125.png differ diff --git a/public/icons/windows11/Wide310x150Logo.scale-150.png b/public/icons/windows11/Wide310x150Logo.scale-150.png new file mode 100644 index 0000000..c6d56c6 Binary files /dev/null and b/public/icons/windows11/Wide310x150Logo.scale-150.png differ diff --git a/public/icons/windows11/Wide310x150Logo.scale-200.png b/public/icons/windows11/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000..9ff15bc Binary files /dev/null and b/public/icons/windows11/Wide310x150Logo.scale-200.png differ diff --git a/public/icons/windows11/Wide310x150Logo.scale-400.png b/public/icons/windows11/Wide310x150Logo.scale-400.png new file mode 100644 index 0000000..f7b005d Binary files /dev/null and b/public/icons/windows11/Wide310x150Logo.scale-400.png differ diff --git a/public/images/og.png b/public/images/og.png new file mode 100644 index 0000000..e3d0c1c Binary files /dev/null and b/public/images/og.png differ diff --git a/public/images/screenshots/1.png b/public/images/screenshots/1.png new file mode 100644 index 0000000..c188260 Binary files /dev/null and b/public/images/screenshots/1.png differ diff --git a/public/images/screenshots/2.png b/public/images/screenshots/2.png new file mode 100644 index 0000000..96d87fc Binary files /dev/null and b/public/images/screenshots/2.png differ diff --git a/public/images/screenshots/3.png b/public/images/screenshots/3.png new file mode 100644 index 0000000..96d87fc Binary files /dev/null and b/public/images/screenshots/3.png differ diff --git a/public/images/screenshots/4.png b/public/images/screenshots/4.png new file mode 100644 index 0000000..8d7284e Binary files /dev/null and b/public/images/screenshots/4.png differ diff --git a/public/images/screenshots/5.png b/public/images/screenshots/5.png new file mode 100644 index 0000000..ec60a71 Binary files /dev/null and b/public/images/screenshots/5.png differ diff --git a/public/images/screenshots/6.png b/public/images/screenshots/6.png new file mode 100644 index 0000000..22b8ab7 Binary files /dev/null and b/public/images/screenshots/6.png differ diff --git a/src/app/(app)/exchange/layout.tsx b/src/app/(app)/exchange/layout.tsx new file mode 100644 index 0000000..8ba7684 --- /dev/null +++ b/src/app/(app)/exchange/layout.tsx @@ -0,0 +1,48 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Exchange | Pombo", + description: + "Don't like your schedule? Easily swap classes with other students", + openGraph: { + url: "/exchange", + type: "website", + title: "Exchange | Pombo", + description: + "Don't like your schedule? Easily swap classes with other students", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Exchange | Pombo", + description: + "Don't like your schedule? Easily swap classes with other students", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + robots: { + index: false, + follow: false, + }, +}; + +export default function ExchangeLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return children; +} diff --git a/src/app/(app)/exchange/page.tsx b/src/app/(app)/exchange/page.tsx index 118a7ea..0348070 100644 --- a/src/app/(app)/exchange/page.tsx +++ b/src/app/(app)/exchange/page.tsx @@ -1,11 +1,6 @@ import MainSection from "@/components/exchange/main-section"; import SideSection from "@/components/exchange/side-section"; import { AuthCheck } from "@/components/auth-check"; -import { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Pombo | Exchange", -}; export default function Exchange() { return ( diff --git a/src/app/(app)/layout.tsx b/src/app/(app)/layout.tsx index c8a6242..0c7ae9c 100644 --- a/src/app/(app)/layout.tsx +++ b/src/app/(app)/layout.tsx @@ -1,5 +1,43 @@ +import { Metadata } from "next"; import { AuthCheck } from "@/components/auth-check"; import Navbar from "@/components/navbar"; +import { InstallPromptProvider } from "@/contexts/install-prompt-provider"; + +export const metadata: Metadata = { + title: "Calendar | Pombo", + description: "Keep track of your calendar and don't miss a single deadline", + openGraph: { + url: "/", + type: "website", + title: "Calendar | Pombo", + description: "Keep track of your calendar and don't miss a single deadline", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Calendar | Pombo", + description: "Keep track of your calendar and don't miss a single deadline", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + robots: { + index: false, + follow: false, + }, +}; export default function AppLayout({ children, @@ -8,12 +46,14 @@ export default function AppLayout({ }>) { return ( -
- -
- {children} -
-
+ +
+ +
+ {children} +
+
+
); } diff --git a/src/app/(app)/page.tsx b/src/app/(app)/page.tsx index 81dabaf..cb13ba5 100644 --- a/src/app/(app)/page.tsx +++ b/src/app/(app)/page.tsx @@ -1,16 +1,10 @@ -import { Metadata } from "next"; import EventsCalendar from "@/components/events-calendar"; import CalendarOptions from "@/components/calendar-options"; -export const metadata: Metadata = { - title: "Pombo | Calendar", -}; - export default function Home() { return (
-
); diff --git a/src/app/(app)/schedule/layout.tsx b/src/app/(app)/schedule/layout.tsx new file mode 100644 index 0000000..0a52cca --- /dev/null +++ b/src/app/(app)/schedule/layout.tsx @@ -0,0 +1,45 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Schedule | Pombo", + description: "Keep track of your timetable and don't miss a single class", + openGraph: { + url: "/schedule", + type: "website", + title: "Schedule | Pombo", + description: "Keep track of your timetable and don't miss a single class", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Schedule | Pombo", + description: "Keep track of your timetable and don't miss a single class", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + robots: { + index: false, + follow: false, + }, +}; + +export default function ScheduleLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return children; +} diff --git a/src/app/(app)/schedule/page.tsx b/src/app/(app)/schedule/page.tsx index 04a81e6..1e79027 100644 --- a/src/app/(app)/schedule/page.tsx +++ b/src/app/(app)/schedule/page.tsx @@ -1,14 +1,8 @@ -import { Metadata } from "next"; import ScheduleCalendar from "@/components/schedule-calendar"; - import { ScheduleProvider } from "@/contexts/schedule-provider"; import CalendarOptions from "@/components/calendar-options"; import { AuthCheck } from "@/components/auth-check"; -export const metadata: Metadata = { - title: "Pombo | Schedule", -}; - export default function Schedule() { return ( diff --git a/src/app/(app)/settings/account/page.tsx b/src/app/(app)/settings/account/page.tsx index d6fca66..40cabfc 100644 --- a/src/app/(app)/settings/account/page.tsx +++ b/src/app/(app)/settings/account/page.tsx @@ -102,87 +102,92 @@ export default function Account() { const changePassword = useChangePassword(); return ( - -
- Pombo | Account - -
-
- -
-

- {firstLastName(user.data?.name)} -

-

- {user.data?.email} -

-
-
- -
-

Information

-
- + Account | Pombo + +
+
+
+ - -
- +
+

+ {firstLastName(user.data?.name)} +

+

+ {user.data?.email} +

+
+
+ +
+

Information

+
- - - {changePassword.isSuccess && ( -

Password Changed Successfully

- )} - - {changePassword.isError && ( -

{changePassword.error.message}

- )} - -
-
+
+ + + + + + {changePassword.isSuccess && ( +

+ Password Changed Successfully +

+ )} + + {changePassword.isError && ( +

+ {changePassword.error.message} +

+ )} + +
+
+
- -
+ + ); } diff --git a/src/app/(app)/settings/backoffice/configurations/page.tsx b/src/app/(app)/settings/backoffice/configurations/page.tsx index 417bb71..891477b 100644 --- a/src/app/(app)/settings/backoffice/configurations/page.tsx +++ b/src/app/(app)/settings/backoffice/configurations/page.tsx @@ -1,19 +1,17 @@ import { AuthCheck } from "@/components/auth-check"; import ExchangePeriodForm from "@/components/exchange-period-form"; import SettingsWrapper from "@/components/settings-wrapper"; -import { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Pombo | Configurations", -}; export default function Configurations() { return ( - - -

Exchange Period

- -
-
+ <> + Configurations | Pombo + + +

Exchange Period

+ +
+
+ ); } diff --git a/src/app/(app)/settings/backoffice/exports/page.tsx b/src/app/(app)/settings/backoffice/exports/page.tsx index a75181a..d2e8a0e 100644 --- a/src/app/(app)/settings/backoffice/exports/page.tsx +++ b/src/app/(app)/settings/backoffice/exports/page.tsx @@ -79,76 +79,79 @@ export default function Exports() { const validCourse = selectedCourse !== null; return ( - - Pombo | Exports - - -
-
-

Export Blackboard groups

-

Trigger the export of Blackboard groups with a few clicks

-
- -
-
-
-

Courses

- + <> + Exports | Pombo + + +
+
+

+ Export Blackboard groups +

+

Trigger the export of Blackboard groups with a few clicks

+
+ +
+
+
+

Courses

+ +
-
- -
- - - or - - -
- - {exportShiftsGroupError && ( -

- Failed to download Shifts Group! -

- )} - - {exportGroupEnrollmentsError && ( -

- Failed to download Group Enrollment! -

- )} -
-
-
-
+ +
+ + + or + + +
+ + {exportShiftsGroupError && ( +

+ Failed to download Shifts Group! +

+ )} + + {exportGroupEnrollmentsError && ( +

+ Failed to download Group Enrollment! +

+ )} + + + +
+ ); } diff --git a/src/app/(app)/settings/backoffice/generator/page.tsx b/src/app/(app)/settings/backoffice/generator/page.tsx index 85de399..610fa3a 100644 --- a/src/app/(app)/settings/backoffice/generator/page.tsx +++ b/src/app/(app)/settings/backoffice/generator/page.tsx @@ -32,73 +32,76 @@ export default function GenerateSchedule() { }); return ( - - -
-
-

Generate new schedule

-

Trigger the schedule generator with a few clicks

-
+ <> + Generator | Pombo + + +
+
+

Generate new schedule

+

Trigger the schedule generator with a few clicks

+
-
-
-
-

Degree

- -
+
+
+
+

Degree

+ +
-
-

Semester

- ({ - id: `semester-${semester}`, - name: semester.toString(), - }))} - selectedItem={selectedSemester} - setSelectedItem={setSelectedSemester} - /> +
+

Semester

+ ({ + id: `semester-${semester}`, + name: semester.toString(), + }))} + selectedItem={selectedSemester} + setSelectedItem={setSelectedSemester} + /> +
-
- + - {generateSchedule.isPending && ( -

Pending...

- )} + {generateSchedule.isPending && ( +

Pending...

+ )} - {generateSchedule.isSuccess && ( -

- {generateSchedule.data.message} -

- )} + {generateSchedule.isSuccess && ( +

+ {generateSchedule.data.message} +

+ )} - {generateSchedule.isError && ( -

- {generateSchedule.error.message} -

- )} -
-
- - + {generateSchedule.isError && ( +

+ {generateSchedule.error.message} +

+ )} +
+
+
+
+ ); } diff --git a/src/app/(app)/settings/backoffice/imports/page.tsx b/src/app/(app)/settings/backoffice/imports/page.tsx index a3724b6..81c0d9a 100644 --- a/src/app/(app)/settings/backoffice/imports/page.tsx +++ b/src/app/(app)/settings/backoffice/imports/page.tsx @@ -103,69 +103,72 @@ export default function Imports() { }; return ( - - -
-
-

Import Data

-

- Import Excel files to update the system data. Each import can be - done independently as needed. -

-
- -
-
-

Students by Courses

-

- Import student enrollment data organized by courses. Use this - when students change courses or new enrollments are added. + <> + Imports | Pombo + + +

+
+

Import Data

+

+ Import Excel files to update the system data. Each import can be + done independently as needed.

- - handleFileChange(file, "students_by_courses") - } - allowedTypes={EXCEL_TYPES} - maxSize={10 * 1024 * 1024} - disabled={isAnyMutationPending} - showSelectedFile={false} - /> -
- -
-
-

Shifts by Courses

-

- Import class schedule data organized by courses. Use this when - schedules change or new shifts are created. -

+
+
+

Students by Courses

+

+ Import student enrollment data organized by courses. Use this + when students change courses or new enrollments are added. +

+
+ + + handleFileChange(file, "students_by_courses") + } + allowedTypes={EXCEL_TYPES} + maxSize={10 * 1024 * 1024} + disabled={isAnyMutationPending} + showSelectedFile={false} + />
- - handleFileChange(file, "shifts_by_courses") - } - allowedTypes={CSV_TYPES} - maxSize={10 * 1024 * 1024} - disabled={isAnyMutationPending} - showSelectedFile={false} - /> +
+
+

Shifts by Courses

+

+ Import class schedule data organized by courses. Use this when + schedules change or new shifts are created. +

+
+ + + handleFileChange(file, "shifts_by_courses") + } + allowedTypes={CSV_TYPES} + maxSize={10 * 1024 * 1024} + disabled={isAnyMutationPending} + showSelectedFile={false} + /> +
-
- - - - + + + + + ); } diff --git a/src/app/(app)/settings/backoffice/jobs/page.tsx b/src/app/(app)/settings/backoffice/jobs/page.tsx index 0aa93ff..4f643cd 100644 --- a/src/app/(app)/settings/backoffice/jobs/page.tsx +++ b/src/app/(app)/settings/backoffice/jobs/page.tsx @@ -237,8 +237,7 @@ export default function Jobs() { return ( <> - Pombo | Jobs Monitor - + Jobs | Pombo
diff --git a/src/app/(app)/settings/backoffice/layout.tsx b/src/app/(app)/settings/backoffice/layout.tsx new file mode 100644 index 0000000..c772d4c --- /dev/null +++ b/src/app/(app)/settings/backoffice/layout.tsx @@ -0,0 +1,13 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Backoffice | Pombo", +}; + +export default function BackofficeLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return children; +} diff --git a/src/app/(app)/settings/layout.tsx b/src/app/(app)/settings/layout.tsx index e5c4b32..4bb701f 100644 --- a/src/app/(app)/settings/layout.tsx +++ b/src/app/(app)/settings/layout.tsx @@ -1,5 +1,44 @@ +import { Metadata } from "next"; import SidebarSettings from "@/components/sidebar-settings"; +export const metadata: Metadata = { + title: "Settings | Pombo", + description: "Tweak your preferences and configure Pombo to suit your needs", + openGraph: { + url: "/settings", + type: "website", + title: "Settings | Pombo", + description: + "Tweak your preferences and configure Pombo to suit your needs", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Settings | Pombo", + description: + "Tweak your preferences and configure Pombo to suit your needs", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + robots: { + index: false, + follow: false, + }, +}; + export default function SettingsLayout({ children, }: Readonly<{ diff --git a/src/app/(app)/settings/page.tsx b/src/app/(app)/settings/page.tsx index fbdd1aa..0bed4a4 100644 --- a/src/app/(app)/settings/page.tsx +++ b/src/app/(app)/settings/page.tsx @@ -1,10 +1,5 @@ -import { Metadata } from "next"; import Link from "next/link"; -export const metadata: Metadata = { - title: "Pombo | Settings", -}; - export default function Settings() { return (
diff --git a/src/app/auth/forgot_password/[token]/page.tsx b/src/app/auth/forgot_password/[token]/page.tsx index 880896f..1738f93 100644 --- a/src/app/auth/forgot_password/[token]/page.tsx +++ b/src/app/auth/forgot_password/[token]/page.tsx @@ -1,7 +1,6 @@ "use client"; import { SubmitHandler, useForm } from "react-hook-form"; - import Image from "next/image"; import Input from "@/components/input"; import Label from "@/components/label"; @@ -48,132 +47,127 @@ export default function ResetPassword() { }); return ( - <> - Pombo | Reset Password -
-
-
- Pombo Logo -
-
- -
+
+
+
Pombo Logo
+
-
+
+ Pombo Logo +
-
- {resetPassword.isSuccess ? ( - <> +
+ +
+ {resetPassword.isSuccess ? ( + <> +
+ + check_circle + +
+
+

{`It's done`}

+
+
+

+ The password was successfully changed! +

+
+ + Go back to sign in + + + ) : ( + <> +
- check_circle + key
-
-

{`It's done`}

-
-
-

- The password was successfully changed! -

-
- - Go back to sign in - - - ) : ( - <> -
-
- - key +

Reset password

+ + Enter the new password below + +
+
+
+
+ + + + {errors.password?.message}
-

- Reset password -

- - Enter the new password below - -
- -
-
- - - - {errors.password?.message} - -
-
- - - - {errors.password_confirmation?.message} - -
-
-
- - {resetPassword.isError && - "Something went wrong, please try again."} - - + Confirm Password + + + + {errors.password_confirmation?.message} +
-
- - )} -
+
+
+ + {resetPassword.isError && + "Something went wrong, please try again."} + + +
+ + + )}
- +
); } diff --git a/src/app/auth/forgot_password/layout.tsx b/src/app/auth/forgot_password/layout.tsx new file mode 100644 index 0000000..af8167d --- /dev/null +++ b/src/app/auth/forgot_password/layout.tsx @@ -0,0 +1,45 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Forgot Password | Pombo", + description: "Reset your password to regain access to your account", + openGraph: { + url: "/auth/forgot_password", + type: "website", + title: "Forgot Password | Pombo", + description: "Reset your password to regain access to your account", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Forgot Password | Pombo", + description: "Reset your password to regain access to your account", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + robots: { + index: false, + follow: false, + }, +}; + +export default function ForgotPasswordLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return children; +} diff --git a/src/app/auth/forgot_password/page.tsx b/src/app/auth/forgot_password/page.tsx index 055bf3b..dcef6e9 100644 --- a/src/app/auth/forgot_password/page.tsx +++ b/src/app/auth/forgot_password/page.tsx @@ -31,8 +31,6 @@ export default function ResetPassword() { return ( <> - Pombo | Forgot Password -
⚠️ Some emails are taking longer to appear because the university system is placing some messages in quarantine. They may take a while before diff --git a/src/app/auth/sign_in/layout.tsx b/src/app/auth/sign_in/layout.tsx new file mode 100644 index 0000000..c2dcb14 --- /dev/null +++ b/src/app/auth/sign_in/layout.tsx @@ -0,0 +1,45 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Sign in | Pombo", + description: "Sign in to manage your calendar and schedule", + openGraph: { + url: "/auth/sign_in", + type: "website", + title: "Sign in | Pombo", + description: "Sign in to manage your calendar and schedule", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Sign in | Pombo", + description: "Sign in to manage your calendar and schedule", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + robots: { + index: false, + follow: false, + }, +}; + +export default function SignInLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return children; +} diff --git a/src/app/auth/sign_in/page.tsx b/src/app/auth/sign_in/page.tsx index cd9a479..4bd2120 100644 --- a/src/app/auth/sign_in/page.tsx +++ b/src/app/auth/sign_in/page.tsx @@ -38,105 +38,97 @@ export default function SignIn() { }; return ( - <> - Pombo | Sign In -
-
-
- Pombo Logo -
-
- -
+
+
+
Pombo Logo
+
-
+
+ Pombo Logo +
-
-
-

- Welcome! Sign in to Pombo -

- - Access your account to view all the info you need - -
-
-
-
- - - - {errors.email?.message} - -
-
- +
- - - {errors.password?.message} - -
-
-
- Did you forget your password? - - Click here - +
+
+

+ Welcome! Sign in to Pombo +

+ + Access your account to view all the info you need + +
+ +
+
+ + + {errors.email?.message}
-
- {signIn.error && ( - - {signIn.error.message} - - )} - + Password + + + + + {errors.password?.message} +
- -
+
+
+ Did you forget your password? + + Click here + +
+
+ {signIn.error && ( + + {signIn.error.message} + + )} + +
+
- +
); } diff --git a/src/app/favicon.ico b/src/app/favicon.ico deleted file mode 100644 index 38b76d7..0000000 Binary files a/src/app/favicon.ico and /dev/null differ diff --git a/src/app/icon.png b/src/app/icon.png new file mode 100644 index 0000000..1754875 Binary files /dev/null and b/src/app/icon.png differ diff --git a/src/app/icon.svg b/src/app/icon.svg new file mode 100644 index 0000000..6380cf5 --- /dev/null +++ b/src/app/icon.svg @@ -0,0 +1,65 @@ + + diff --git a/src/app/layout.tsx b/src/app/layout.tsx index fb5f6c5..1d4443c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -14,8 +14,152 @@ const jamjuree = Bai_Jamjuree({ }); export const metadata: Metadata = { - description: - "Exams, events and schedules. Your hub to everything for LEI and MEI!", + metadataBase: new URL(process.env.PROD_DOMAIN || "http://localhost:3000"), + title: "Pombo", + description: "Your hub for everything LEI and MEI", + keywords: [ + "uminho", + "university of minho", + "universidade do minho", + "lei", + "mei", + "informática", + "engenharia informática", + "software", + "computer science", + "software engineering", + "students", + "student", + "hub", + "portal", + "schedule", + "timetable", + "calendar", + "events", + "schedule", + "shifts", + "exchange", + ], + robots: { + index: true, + follow: true, + "max-image-preview": "large", + "max-snippet": -1, + "max-video-preview": -1, + googleBot: "index, follow", + }, + applicationName: "Pombo", + appleWebApp: { + title: "Pombo", + statusBarStyle: "default", + capable: true, + }, + icons: { + icon: [ + { + url: "/icons/favicon-16x16.png", + sizes: "16x16", + type: "image/png", + }, + { + url: "/icons/favicon-32x32.png", + sizes: "32x32", + type: "image/png", + }, + { + url: "/icons/favicon-48x48.png", + sizes: "48x48", + type: "image/png", + }, + { + url: "/icons/favicon-64x64.png", + sizes: "64x64", + type: "image/png", + }, + { + url: "/icons/favicon-96x96.png", + sizes: "96x96", + type: "image/png", + }, + { + url: "/icons/android/android-launchericon-192-192.png", + sizes: "192x192", + type: "image/png", + }, + { + url: "/icons/android/android-launchericon-512-512.png", + sizes: "512x512", + type: "image/png", + }, + ], + apple: [ + { + url: "/icons/ios/60.png", + sizes: "60x60", + type: "image/png", + }, + { + url: "/icons/ios/76.png", + sizes: "76x76", + type: "image/png", + }, + { + url: "/icons/ios/120.png", + sizes: "120x120", + type: "image/png", + }, + { + url: "/icons/ios/152.png", + sizes: "152x152", + type: "image/png", + }, + { + url: "/icons/ios/167.png", + sizes: "167x167", + type: "image/png", + }, + { + url: "/icons/ios/180.png", + sizes: "180x180", + type: "image/png", + }, + { + url: "/icons/ios/512.png", + }, + ], + }, + openGraph: { + siteName: "Pombo", + locale: "en", + url: "/", + type: "website", + title: "Pombo", + description: "Your hub for everything LEI and MEI", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Pombo", + description: "Your hub for everything LEI and MEI", + images: [ + { + url: "/images/og.png", + width: 1200, + height: 630, + alt: process.env.PROD_DOMAIN, + }, + ], + }, + alternates: { + canonical: "/", + }, }; export default function RootLayout({ diff --git a/src/app/manifest.ts b/src/app/manifest.ts new file mode 100644 index 0000000..5180a7f --- /dev/null +++ b/src/app/manifest.ts @@ -0,0 +1,523 @@ +import type { MetadataRoute } from "next"; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "Pombo", + short_name: "Pombo", + start_url: "/", + display: "standalone", + description: "Your hub for all things LEI and MEI", + lang: "en", + dir: "auto", + theme_color: "#ffffff", + background_color: "#ffffff", + orientation: "portrait", + icons: [ + { + src: "/icons/windows11/SmallTile.scale-100.png", + sizes: "71x71", + }, + { + src: "/icons/windows11/SmallTile.scale-125.png", + sizes: "89x89", + }, + { + src: "/icons/windows11/SmallTile.scale-150.png", + sizes: "107x107", + }, + { + src: "/icons/windows11/SmallTile.scale-200.png", + sizes: "142x142", + }, + { + src: "/icons/windows11/SmallTile.scale-400.png", + sizes: "284x284", + }, + { + src: "/icons/windows11/Square150x150Logo.scale-100.png", + sizes: "150x150", + }, + { + src: "/icons/windows11/Square150x150Logo.scale-125.png", + sizes: "188x188", + }, + { + src: "/icons/windows11/Square150x150Logo.scale-150.png", + sizes: "225x225", + }, + { + src: "/icons/windows11/Square150x150Logo.scale-200.png", + sizes: "300x300", + }, + { + src: "/icons/windows11/Square150x150Logo.scale-400.png", + sizes: "600x600", + }, + { + src: "/icons/windows11/Wide310x150Logo.scale-100.png", + sizes: "310x150", + }, + { + src: "/icons/windows11/Wide310x150Logo.scale-125.png", + sizes: "388x188", + }, + { + src: "/icons/windows11/Wide310x150Logo.scale-150.png", + sizes: "465x225", + }, + { + src: "/icons/windows11/Wide310x150Logo.scale-200.png", + sizes: "620x300", + }, + { + src: "/icons/windows11/Wide310x150Logo.scale-400.png", + sizes: "1240x600", + }, + { + src: "/icons/windows11/LargeTile.scale-100.png", + sizes: "310x310", + }, + { + src: "/icons/windows11/LargeTile.scale-125.png", + sizes: "388x388", + }, + { + src: "/icons/windows11/LargeTile.scale-150.png", + sizes: "465x465", + }, + { + src: "/icons/windows11/LargeTile.scale-200.png", + sizes: "620x620", + }, + { + src: "/icons/windows11/LargeTile.scale-400.png", + sizes: "1240x1240", + }, + { + src: "/icons/windows11/Square44x44Logo.scale-100.png", + sizes: "44x44", + }, + { + src: "/icons/windows11/Square44x44Logo.scale-125.png", + sizes: "55x55", + }, + { + src: "/icons/windows11/Square44x44Logo.scale-150.png", + sizes: "66x66", + }, + { + src: "/icons/windows11/Square44x44Logo.scale-200.png", + sizes: "88x88", + }, + { + src: "/icons/windows11/Square44x44Logo.scale-400.png", + sizes: "176x176", + }, + { + src: "/icons/windows11/StoreLogo.scale-100.png", + sizes: "50x50", + }, + { + src: "/icons/windows11/StoreLogo.scale-125.png", + sizes: "63x63", + }, + { + src: "/icons/windows11/StoreLogo.scale-150.png", + sizes: "75x75", + }, + { + src: "/icons/windows11/StoreLogo.scale-200.png", + sizes: "100x100", + }, + { + src: "/icons/windows11/StoreLogo.scale-400.png", + sizes: "200x200", + }, + { + src: "/icons/windows11/SplashScreen.scale-100.png", + sizes: "620x300", + }, + { + src: "/icons/windows11/SplashScreen.scale-125.png", + sizes: "775x375", + }, + { + src: "/icons/windows11/SplashScreen.scale-150.png", + sizes: "930x450", + }, + { + src: "/icons/windows11/SplashScreen.scale-200.png", + sizes: "1240x600", + }, + { + src: "/icons/windows11/SplashScreen.scale-400.png", + sizes: "2480x1200", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-16.png", + sizes: "16x16", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-20.png", + sizes: "20x20", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-24.png", + sizes: "24x24", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-30.png", + sizes: "30x30", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-32.png", + sizes: "32x32", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-36.png", + sizes: "36x36", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-40.png", + sizes: "40x40", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-44.png", + sizes: "44x44", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-48.png", + sizes: "48x48", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-60.png", + sizes: "60x60", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-64.png", + sizes: "64x64", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-72.png", + sizes: "72x72", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-80.png", + sizes: "80x80", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-96.png", + sizes: "96x96", + }, + { + src: "/icons/windows11/Square44x44Logo.targetsize-256.png", + sizes: "256x256", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png", + sizes: "16x16", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png", + sizes: "20x20", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png", + sizes: "24x24", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png", + sizes: "30x30", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png", + sizes: "32x32", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png", + sizes: "36x36", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png", + sizes: "40x40", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png", + sizes: "44x44", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png", + sizes: "48x48", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png", + sizes: "60x60", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png", + sizes: "64x64", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png", + sizes: "72x72", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png", + sizes: "80x80", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png", + sizes: "96x96", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png", + sizes: "256x256", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", + sizes: "16x16", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", + sizes: "20x20", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", + sizes: "24x24", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", + sizes: "30x30", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", + sizes: "32x32", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", + sizes: "36x36", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", + sizes: "40x40", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", + sizes: "44x44", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", + sizes: "48x48", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", + sizes: "60x60", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", + sizes: "64x64", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", + sizes: "72x72", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", + sizes: "80x80", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", + sizes: "96x96", + }, + { + src: "/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", + sizes: "256x256", + }, + { + src: "/icons/android/android-launchericon-512-512.png", + sizes: "512x512", + }, + { + src: "/icons/android/android-launchericon-192-192.png", + sizes: "192x192", + }, + { + src: "/icons/android/android-launchericon-144-144.png", + sizes: "144x144", + }, + { + src: "/icons/android/android-launchericon-96-96.png", + sizes: "96x96", + }, + { + src: "/icons/android/android-launchericon-72-72.png", + sizes: "72x72", + }, + { + src: "/icons/android/android-launchericon-48-48.png", + sizes: "48x48", + }, + { + src: "/icons/ios/16.png", + sizes: "16x16", + }, + { + src: "/icons/ios/20.png", + sizes: "20x20", + }, + { + src: "/icons/ios/29.png", + sizes: "29x29", + }, + { + src: "/icons/ios/32.png", + sizes: "32x32", + }, + { + src: "/icons/ios/40.png", + sizes: "40x40", + }, + { + src: "/icons/ios/50.png", + sizes: "50x50", + }, + { + src: "/icons/ios/57.png", + sizes: "57x57", + }, + { + src: "/icons/ios/58.png", + sizes: "58x58", + }, + { + src: "/icons/ios/60.png", + sizes: "60x60", + }, + { + src: "/icons/ios/64.png", + sizes: "64x64", + }, + { + src: "/icons/ios/72.png", + sizes: "72x72", + }, + { + src: "/icons/ios/76.png", + sizes: "76x76", + }, + { + src: "/icons/ios/80.png", + sizes: "80x80", + }, + { + src: "/icons/ios/87.png", + sizes: "87x87", + }, + { + src: "/icons/ios/100.png", + sizes: "100x100", + }, + { + src: "/icons/ios/114.png", + sizes: "114x114", + }, + { + src: "/icons/ios/120.png", + sizes: "120x120", + }, + { + src: "/icons/ios/128.png", + sizes: "128x128", + }, + { + src: "/icons/ios/144.png", + sizes: "144x144", + }, + { + src: "/icons/ios/152.png", + sizes: "152x152", + }, + { + src: "/icons/ios/167.png", + sizes: "167x167", + }, + { + src: "/icons/ios/180.png", + sizes: "180x180", + }, + { + src: "/icons/ios/192.png", + sizes: "192x192", + }, + { + src: "/icons/ios/256.png", + sizes: "256x256", + }, + { + src: "/icons/ios/512.png", + sizes: "512x512", + }, + { + src: "/icons/ios/1024.png", + sizes: "1024x1024", + }, + ], + screenshots: [ + { + src: "/images/screenshots/1.png", + sizes: "2880x1800", + type: "image/png", + }, + { + src: "/images/screenshots/2.png", + sizes: "2880x1800", + type: "image/png", + }, + { + src: "/images/screenshots/3.png", + sizes: "2880x1800", + type: "image/png", + }, + { + src: "/images/screenshots/4.png", + sizes: "2880x1800", + type: "image/png", + }, + { + src: "/images/screenshots/5.png", + sizes: "2880x1800", + type: "image/png", + }, + { + src: "/images/screenshots/6.png", + sizes: "2880x1800", + type: "image/png", + }, + ], + prefer_related_applications: false, + shortcuts: [ + { + name: "Schedule", + url: "/schedule", + description: "A shortcut to the schedule page", + icons: [ + { + src: "/icons/schedule-512x512.png", + sizes: "512x512", + }, + ], + }, + { + name: "Exchange", + url: "/exchange", + description: "A shortcut to the exchange page", + icons: [ + { + src: "/icons/exchange-512x512.png", + sizes: "512x512", + }, + ], + }, + ], + }; +} diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 373e927..bed484a 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -13,6 +13,7 @@ import { useGetSession, useGetUserInfo } from "@/lib/queries/session"; import { useSignOut } from "@/lib/mutations/session"; import Image from "next/image"; import { firstLastName } from "@/lib/utils"; +import { useInstallPrompt } from "../contexts/install-prompt-provider"; const Logo = () => ( @@ -119,6 +120,7 @@ function MobileDropdown({ currentPage }: { currentPage: string }) { const user = useGetUserInfo(); const signOut = useSignOut(); const router = useRouter(); + const { setOpen, isCompatible } = useInstallPrompt(); const openDropdown = () => { setCurrentMenu("tabs"); @@ -281,6 +283,17 @@ function MobileDropdown({ currentPage }: { currentPage: string }) {
+ {isCompatible && ( + + )} void; + isCompatible: boolean; +} + +const InstallPromptContext = createContext< + InstallPromptContextData | undefined +>(undefined); + +export function InstallPromptProvider({ + children, +}: { + children?: React.ReactNode; +}) { + const [open, setOpen] = useState(false); + const [clicked, setClicked] = useState(false); + const [isIOS, setIsIOS] = useState(false); + const [isAndroid, setIsAndroid] = useState(false); + const [isStandalone, setIsStandalone] = useState(false); + const [deferredPrompt, setDeferredPrompt] = useState(null); + const [isInstallable, setIsInstallable] = useState(false); + + useEffect(() => { + const handleBeforeInstallPrompt = (e: Event) => { + e.preventDefault(); + setDeferredPrompt(e); + setIsInstallable(true); + }; + + window.addEventListener("beforeinstallprompt", handleBeforeInstallPrompt); + + return () => + window.removeEventListener( + "beforeinstallprompt", + handleBeforeInstallPrompt, + ); + }, []); + + const handleInstallClick = async () => { + if (deferredPrompt) { + (deferredPrompt as any).prompt(); + await (deferredPrompt as any).userChoice; + setDeferredPrompt(null); + setIsInstallable(false); + closePrompt(); + } + }; + + useEffect(() => { + setIsIOS( + /iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream, + ); + setIsAndroid( + /Android/.test(navigator.userAgent) && !(window as any).MSStream, + ); + + setIsStandalone(window.matchMedia("(display-mode: standalone)").matches); + }, []); + + function closePrompt() { + setOpen(false); + } + + return ( + + {children} + + {open && ( + + +
+ +
+
+ phone_iphone +
+
+ +

Install App

+

+ Faster access, better experience. +

+
+
+ {!clicked && ( + + )} +
+ {!clicked ? ( + <> +

+ Install Pombo on your home screen for a + better experience, faster loading and offline features. +

+ + + ) : isIOS ? ( + <> +

+ To install this app on your iOS device: +

+
    +
  • +
    +
    + ios_share +
    +
    + +

    + 1. Tap the share button +

    +

    + {"Look for the share icon in Safari's toolbar"} +

    +
    +
  • +
  • +
    +
    + add +
    +
    + +

    + {'2. Select "Add to Home Screen"'} +

    +

    + {"Scroll down in the menu to find this option"} +

    +
    +
  • +
  • +
    +
    + touch_app +
    +
    + +

    {'3. Tap "Add"'}

    +

    + {"Confirm to add the app to your home screen"} +

    +
    +
  • +
+
+ + +
+ + ) : ( + <> +

+ To install this app on your Android device: +

+
    +
  • +
    +
    + more_vert +
    +
    + +

    + 1. On Chrome, tap the three dots +

    +

    + {"Look for the three dots in the top right corner"} +

    +
    +
  • +
  • +
    +
    + add_to_home_screen +
    +
    + +

    + {'2. Select "Add to Home Screen"'} +

    +

    + {"Scroll down in the menu to find this option"} +

    +
    +
  • +
  • +
    +
    + touch_app +
    +
    + +

    {'3. Tap "Install"'}

    +

    + {"Confirm to add the app to your home screen"} +

    +
    +
  • +
+
+ + +
+ + )} +
+
+ )} +
+
+ ); +} + +export function useInstallPrompt() { + const context = useContext(InstallPromptContext); + if (context === undefined) { + throw new Error( + "useInstallPrompt must be used within an InstallPromptProvider", + ); + } + return { + open: context.open, + setOpen: context.setOpen, + isCompatible: context.isCompatible, + }; +}