Files
gridpilot.gg/apps/website/app/layout.tsx
2026-01-14 23:46:04 +01:00

89 lines
2.6 KiB
TypeScript

import { FeatureFlagService } from '@/lib/feature/FeatureFlagService';
import { initializeGlobalErrorHandling } from '@/lib/infrastructure/GlobalErrorHandler';
import { initializeApiLogger } from '@/lib/infrastructure/ApiRequestLogger';
import { Metadata, Viewport } from 'next';
import React from 'react';
import './globals.css';
import { AppWrapper } from '@/components/AppWrapper';
import { Header } from '@/ui/Header';
import { HeaderContent } from '@/ui/HeaderContent';
import { MainContent } from '@/ui/MainContent';
export const dynamic = 'force-dynamic';
export const viewport: Viewport = {
width: 'device-width',
initialScale: 1,
maximumScale: 1,
userScalable: false,
viewportFit: 'cover',
};
export const metadata: Metadata = {
title: 'GridPilot - SimRacing Platform',
description: 'The dedicated home for serious sim racing leagues. Automatic results, standings, team racing, and professional race control.',
themeColor: '#0a0a0a',
appleWebApp: {
capable: true,
statusBarStyle: 'black-translucent',
},
openGraph: {
title: 'GridPilot - iRacing League Racing Platform',
description: 'Structure over chaos. The professional platform for iRacing league racing.',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'GridPilot - iRacing League Racing Platform',
description: 'Structure over chaos. The professional platform for iRacing league racing.',
},
icons: {
icon: '/favicon.svg',
},
};
export default async function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
// Initialize debug tools in development
if (process.env.NODE_ENV === 'development') {
try {
initializeGlobalErrorHandling({
showDevOverlay: true,
verboseLogging: true,
captureEnhancedStacks: true,
});
initializeApiLogger({
logToConsole: true,
logBodies: true,
logResponses: true,
});
} catch (error) {
console.warn('Failed to initialize debug tools:', error);
}
}
// Initialize feature flag service from API
const featureService = await FeatureFlagService.fromAPI();
const enabledFlags = featureService.getEnabledFlags();
return (
<html lang="en" className="scroll-smooth overflow-x-hidden">
<head>
<meta name="mobile-web-app-capable" content="yes" />
</head>
<body className="antialiased overflow-x-hidden">
<AppWrapper enabledFlags={enabledFlags}>
<Header>
<HeaderContent />
</Header>
<MainContent>
{children}
</MainContent>
</AppWrapper>
</body>
</html>
);
}