Files

74 lines
2.4 KiB
TypeScript

import type { MetadataRoute } from 'next';
import { getLessons } from '@/lib/actions/lessonActions';
import { getCheatsheets } from '@/lib/actions/cheatsheetActions';
import { getPrompts } from '@/lib/actions/promptActions';
const BASE_URL = 'https://ayrisai.xyz';
const LOCALES = ['en'];
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const now = new Date();
// Static pages
const staticRoutes = [
{ path: '', priority: 1.0, changeFrequency: 'daily' as const },
{ path: '/lessons', priority: 0.9, changeFrequency: 'daily' as const },
{ path: '/cheatsheets', priority: 0.8, changeFrequency: 'weekly' as const },
{ path: '/prompts', priority: 0.8, changeFrequency: 'weekly' as const },
{ path: '/contact', priority: 0.5, changeFrequency: 'monthly' as const },
];
const staticEntries: MetadataRoute.Sitemap = LOCALES.flatMap((locale) =>
staticRoutes.map(({ path, priority, changeFrequency }) => ({
url: `${BASE_URL}/${locale}${path}`,
lastModified: now,
changeFrequency,
priority,
}))
);
// Dynamic: Lessons
let lessonEntries: MetadataRoute.Sitemap = [];
try {
const lessons = await getLessons();
lessonEntries = LOCALES.flatMap((locale) =>
lessons.map((lesson: any) => ({
url: `${BASE_URL}/${locale}/lessons/${lesson.slug}`,
lastModified: lesson.updatedAt || now,
changeFrequency: 'weekly' as const,
priority: 0.85,
}))
);
} catch {}
// Dynamic: Cheatsheets
let cheatEntries: MetadataRoute.Sitemap = [];
try {
const sheets = await getCheatsheets();
cheatEntries = LOCALES.flatMap((locale) =>
sheets.map((sheet: any) => ({
url: `${BASE_URL}/${locale}/cheatsheets/${sheet.slug}`,
lastModified: sheet.updatedAt || now,
changeFrequency: 'monthly' as const,
priority: 0.7,
}))
);
} catch {}
// Dynamic: Prompts
let promptEntries: MetadataRoute.Sitemap = [];
try {
const prompts = await getPrompts();
promptEntries = LOCALES.flatMap((locale) =>
prompts.map((prompt: any) => ({
url: `${BASE_URL}/${locale}/prompts/${prompt.slug}`,
lastModified: prompt.updatedAt || now,
changeFrequency: 'monthly' as const,
priority: 0.7,
}))
);
} catch {}
return [...staticEntries, ...lessonEntries, ...cheatEntries, ...promptEntries];
}