Files
gridpilot.gg/apps/website/lib/seo/MetadataHelper.ts
2026-01-20 21:35:50 +01:00

59 lines
1.4 KiB
TypeScript

import { Metadata } from 'next';
import { getWebsitePublicEnv } from '@/lib/config/env';
interface MetadataOptions {
title: string;
description: string;
path: string;
image?: string;
type?: 'website' | 'article' | 'profile';
}
export class MetadataHelper {
private static readonly DEFAULT_IMAGE = '/og-image.png';
private static readonly SITE_NAME = 'GridPilot';
static generate({
title,
description,
path,
image = this.DEFAULT_IMAGE,
type = 'website',
}: MetadataOptions): Metadata {
const env = getWebsitePublicEnv();
const baseUrl = env.NEXT_PUBLIC_SITE_URL || 'https://gridpilot.com';
const url = `${baseUrl}${path}`;
const fullTitle = `${title} | ${this.SITE_NAME}`;
return {
title: fullTitle,
description,
alternates: {
canonical: url,
},
openGraph: {
title: fullTitle,
description,
url,
siteName: this.SITE_NAME,
images: [
{
url: image.startsWith('http') ? image : `${baseUrl}${image}`,
width: 1200,
height: 630,
alt: title,
},
],
locale: 'en_US',
type,
},
twitter: {
card: 'summary_large_image',
title: fullTitle,
description,
images: [image.startsWith('http') ? image : `${baseUrl}${image}`],
},
};
}
}