ai-wpa/app/layout.tsx

91 lines
2.9 KiB
TypeScript

import type { Metadata } from 'next'
import { Inter, Poppins } from 'next/font/google'
import { ThemeProvider } from '@/components/theme-provider'
import { QueryProvider } from '@/contexts/QueryProvider'
import { AuthProvider } from '@/contexts/AuthContext'
import { Toaster } from '@/components/ui/toaster'
import PWAInstallPrompt from '@/components/PWAInstallPrompt'
// Removed StartupTest import - we'll do server-side checks only
import './globals.css'
const inter = Inter({
subsets: ['latin'],
variable: '--font-inter',
display: 'swap',
preload: true,
weight: ['300', '400', '500', '600', '700', '800'],
})
const poppins = Poppins({
subsets: ['latin'],
weight: ['300', '400', '500', '600', '700', '800', '900'],
variable: '--font-poppins',
display: 'swap',
preload: true,
})
export const metadata: Metadata = {
title: 'SiliconPin - Professional Hosting & Developer Services',
description:
'Professional web hosting, Kubernetes, VPS, developer services, and web tools. Built by developers, for developers.',
manifest: '/manifest.json',
themeColor: '#000000',
viewport: 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
icons: {
icon: [
{ url: '/icons/icon-192x192.png', sizes: '192x192', type: 'image/png' },
{ url: '/icons/icon-512x512.png', sizes: '512x512', type: 'image/png' },
],
apple: [{ url: '/icons/icon-192x192.png' }],
},
appleWebApp: {
capable: true,
statusBarStyle: 'default',
title: 'SiliconPin',
},
formatDetection: {
telephone: false,
},
openGraph: {
type: 'website',
siteName: 'SiliconPin',
title: 'SiliconPin - Professional Hosting & Developer Services',
description:
'Professional web hosting, Kubernetes, VPS, developer services, and web tools. Built by developers, for developers.',
},
twitter: {
card: 'summary_large_image',
title: 'SiliconPin - Professional Hosting & Developer Services',
description:
'Professional web hosting, Kubernetes, VPS, developer services, and web tools. Built by developers, for developers.',
},
}
export default async function RootLayout({ children }: { children: React.ReactNode }) {
// Run startup checks only during runtime (not build time)
if (typeof window === 'undefined' && process.env.NEXT_PHASE !== 'phase-production-build') {
try {
const { runStartupChecks } = await import('@/lib/startup')
await runStartupChecks()
} catch (error) {
console.log('Startup checks failed, continuing anyway...')
}
}
return (
<html lang="en" suppressHydrationWarning>
<body className={`${inter.variable} ${poppins.variable} antialiased`}>
<ThemeProvider defaultTheme="system">
<QueryProvider>
<AuthProvider>
{children}
<Toaster />
<PWAInstallPrompt />
</AuthProvider>
</QueryProvider>
</ThemeProvider>
</body>
</html>
)
}