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 { 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]; }