diff --git a/public/favicon/android-chrome-192x192.png b/public/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..da2ff70 Binary files /dev/null and b/public/favicon/android-chrome-192x192.png differ diff --git a/public/favicon/android-chrome-512x512.png b/public/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..61ad4d7 Binary files /dev/null and b/public/favicon/android-chrome-512x512.png differ diff --git a/public/favicon/apple-touch-icon.png b/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000..c54f310 Binary files /dev/null and b/public/favicon/apple-touch-icon.png differ diff --git a/public/favicon/favicon-16x16.png b/public/favicon/favicon-16x16.png new file mode 100644 index 0000000..7a68536 Binary files /dev/null and b/public/favicon/favicon-16x16.png differ diff --git a/public/favicon/favicon-32x32.png b/public/favicon/favicon-32x32.png new file mode 100644 index 0000000..cc80ab1 Binary files /dev/null and b/public/favicon/favicon-32x32.png differ diff --git a/public/favicon/favicon.ico b/public/favicon/favicon.ico new file mode 100644 index 0000000..9d8b2aa Binary files /dev/null and b/public/favicon/favicon.ico differ diff --git a/public/favicon/site.webmanifest b/public/favicon/site.webmanifest new file mode 100644 index 0000000..fa99de7 --- /dev/null +++ b/public/favicon/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" +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/src/app/favicon.ico and /dev/null differ diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0714cea..5ddb99e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,9 +2,9 @@ import './globals.css'; import { Inter } from 'next/font/google'; -import { SessionContextProvider } from '@supabase/auth-helpers-react'; import { Toaster } from 'react-hot-toast'; import { supabase } from '@/lib/supabaseClient'; +import { SessionContextProvider } from '@supabase/auth-helpers-react'; const inter = Inter({ subsets: ['latin'] }); // export const metadata = { diff --git a/src/app/page.tsx b/src/app/page.tsx index 2519819..c1e2258 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,6 +3,7 @@ import { useEffect, useState } from 'react'; import Announcement from './container/Announcement'; import { supabase } from '@/lib/supabaseClient'; +import Seo from '@/components/Seo'; export default function Home() { const [status, setStatus] = useState(''); @@ -26,6 +27,7 @@ export default function Home() { return (
+
); diff --git a/src/components/Emoji.tsx b/src/components/Emoji.tsx index 23c5401..90740f0 100644 --- a/src/components/Emoji.tsx +++ b/src/components/Emoji.tsx @@ -5,7 +5,7 @@ const Emoji = () => {
{ > { @@ -64,7 +64,7 @@ const Emoji = () => { { { fill='none' r='109' stroke='#6E6E96' - stroke-width='8' + strokeWidth='8' />
diff --git a/src/components/Seo.tsx b/src/components/Seo.tsx new file mode 100644 index 0000000..34cec0e --- /dev/null +++ b/src/components/Seo.tsx @@ -0,0 +1,101 @@ +'use client'; + +import Head from 'next/head'; +import { useRouter } from 'next/compat/router'; + +const defaultMeta = { + title: 'Software Engineering Laboratorium Status', + siteName: 'Software Engineering Laboratorium Status', + description: + 'Get latest status and condition for Software Engineering Laboratory in your hand', + url: 'https://status.labse.in', + type: 'website', + robots: 'follow, index', + + image: '/favicon/favicon.ico', +}; + +type SeoProps = { + date?: string; + templateTitle?: string; +} & Partial; + +export default function Seo(props: SeoProps) { + const router = useRouter(); + const meta = { + ...defaultMeta, + ...props, + }; + meta['title'] = props.templateTitle + ? `${props.templateTitle} | ${meta.siteName}` + : meta.title; + + return ( + + {meta.title} + + + {router && ( + <> + + + + )} + + + + + + + + + + + + {meta.date && ( + <> + + + + )} + + {favicons.map((linkProps) => ( + + ))} + + + + + ); +} + +const favicons: Array> = [ + { + rel: 'apple-touch-icon', + sizes: '180x180', + href: '/favicon/apple-touch-icon.png', + }, + { + rel: 'icon', + type: 'image/png', + sizes: '32x32', + href: '/favicon/favicon-32x32.png', + }, + { + rel: 'icon', + type: 'image/png', + sizes: '16x16', + href: '/favicon/favicon-16x16.png', + }, + { rel: 'manifest', href: '/favicon/site.webmanifest' }, + { + rel: 'mask-icon', + href: '/favicon/safari-pinned-tab.svg', + color: '#00e887', + }, + { rel: 'shortcut icon', href: '/favicon/favicon.ico' }, +];