50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { HomePageClient } from '@/client-wrapper/HomePageClient';
|
|
import { PageDataFetcher } from '@/lib/page/PageDataFetcher';
|
|
import { HomePageQuery } from '@/lib/page-queries/HomePageQuery';
|
|
import { notFound, redirect } from 'next/navigation';
|
|
import { routes } from '@/lib/routing/RouteConfig';
|
|
import { Metadata } from 'next';
|
|
import { MetadataHelper } from '@/lib/seo/MetadataHelper';
|
|
import { JsonLd } from '@/ui/JsonLd';
|
|
|
|
export const metadata: Metadata = MetadataHelper.generate({
|
|
title: 'iRacing League Management Infrastructure',
|
|
description: 'Infrastructure for iRacing league management. Automated standings, race management, and stewarding tools.',
|
|
path: '/',
|
|
});
|
|
|
|
export default async function Page() {
|
|
if (await HomePageQuery.shouldRedirectToDashboard()) {
|
|
redirect(routes.protected.dashboard);
|
|
}
|
|
|
|
const data = await PageDataFetcher.fetchManual(async () => {
|
|
const result = await HomePageQuery.execute();
|
|
return result.isOk() ? result.unwrap() : null;
|
|
});
|
|
|
|
if (!data) {
|
|
notFound();
|
|
}
|
|
|
|
const jsonLd = {
|
|
'@context': 'https://schema.org',
|
|
'@type': 'WebSite',
|
|
name: 'GridPilot',
|
|
url: 'https://gridpilot.com',
|
|
description: 'Professional iRacing League Management Platform',
|
|
potentialAction: {
|
|
'@type': 'SearchAction',
|
|
target: 'https://gridpilot.com/search?q={search_term_string}',
|
|
'query-input': 'required name=search_term_string',
|
|
},
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<JsonLd data={jsonLd} />
|
|
<HomePageClient viewData={data} />
|
|
</>
|
|
);
|
|
}
|