Sifa professional network frontend (Next.js, React, TailwindCSS) sifa.id/
at main 61 lines 1.7 kB view raw
1import type { Metadata } from 'next'; 2import Script from 'next/script'; 3import { NextIntlClientProvider } from 'next-intl'; 4import { getLocale, getMessages } from 'next-intl/server'; 5import { ThemeProvider } from '@/components/theme-provider'; 6import { KonamiRickroll } from '@/components/konami-rickroll'; 7import { StaleDeploymentDetector } from '@/components/stale-deployment-detector'; 8import { Toaster } from 'sonner'; 9import './globals.css'; 10 11export const metadata: Metadata = { 12 metadataBase: new URL('https://sifa.id'), 13 title: { 14 default: 'Sifa ID', 15 template: '%s | Sifa ID', 16 }, 17 description: 'Professional identity on the AT Protocol', 18 openGraph: { 19 siteName: 'Sifa ID', 20 type: 'website', 21 }, 22 twitter: { 23 card: 'summary_large_image', 24 }, 25}; 26 27export default async function RootLayout({ 28 children, 29}: Readonly<{ 30 children: React.ReactNode; 31}>) { 32 const locale = await getLocale(); 33 const messages = await getMessages(); 34 35 return ( 36 <html lang={locale} suppressHydrationWarning> 37 <head> 38 <Script 39 src="/u/script.js" 40 data-website-id="7f659ec9-5d5f-4ee4-96e0-10d8bcefd69d" 41 strategy="afterInteractive" 42 /> 43 </head> 44 <body className="antialiased"> 45 <NextIntlClientProvider locale={locale} messages={messages}> 46 <ThemeProvider 47 attribute="class" 48 defaultTheme="system" 49 enableSystem 50 disableTransitionOnChange 51 > 52 {children} 53 <KonamiRickroll /> 54 <StaleDeploymentDetector /> 55 <Toaster position="bottom-left" closeButton /> 56 </ThemeProvider> 57 </NextIntlClientProvider> 58 </body> 59 </html> 60 ); 61}