mirror of
https://github.com/yusufipk/OpenFrame.git
synced 2026-09-11 17:46:06 +00:00
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
const FALLBACK_SITE_URL = 'https://open-frame.net';
|
|
|
|
function normalizeSiteUrl(rawUrl: string | undefined): string {
|
|
if (!rawUrl) {
|
|
return FALLBACK_SITE_URL;
|
|
}
|
|
|
|
const trimmed = rawUrl.trim();
|
|
|
|
if (!trimmed) {
|
|
return FALLBACK_SITE_URL;
|
|
}
|
|
|
|
const withProtocol = /^https?:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`;
|
|
|
|
try {
|
|
return new URL(withProtocol).origin;
|
|
} catch {
|
|
return FALLBACK_SITE_URL;
|
|
}
|
|
}
|
|
|
|
export function getSiteUrl(): string {
|
|
return normalizeSiteUrl(process.env.NEXT_PUBLIC_APP_URL ?? process.env.NEXTAUTH_URL);
|
|
}
|
|
|
|
export const seoConfig = {
|
|
name: 'OpenFrame',
|
|
title: 'Video Review & Approval',
|
|
description:
|
|
'Review videos together with timestamped text and voice comments. Keep feedback organized and your team on the same page.',
|
|
keywords: [
|
|
'fair source video review platform',
|
|
'video review platform',
|
|
'video review tool',
|
|
'timestamped video feedback',
|
|
'video collaboration',
|
|
'video annotation',
|
|
'creative review workflow',
|
|
],
|
|
url: getSiteUrl(),
|
|
ogImage: '/meta.webp',
|
|
logoPath: '/icon.svg',
|
|
logo: '/icon.svg?v=2',
|
|
githubUrl: 'https://github.com/yusufipk/OpenFrame',
|
|
} as const;
|