spb/tools-spboucher-ai
Public
1import type { MetadataRoute } from "next";2import { allPublicSlugs, categoryTree, listCollections } from "@/lib/public/queries";3import { APP_URL } from "@/lib/env";4export const revalidate = 3600;5export default async function sitemap(): Promise<MetadataRoute.Sitemap> {6 // Never fail the build if the database is unavailable at generation time (revalidated hourly at runtime).7 const [tools, tree, cols] = await Promise.all([allPublicSlugs(), categoryTree(), listCollections()]).catch(() => [[], [], []] as const);8 return [9 { url: `${APP_URL}/`, changeFrequency: "daily", priority: 1 }, { url: `${APP_URL}/tools`, changeFrequency: "daily", priority: 0.9 }, { url: `${APP_URL}/categories`, changeFrequency: "weekly", priority: 0.7 }, { url: `${APP_URL}/collections`, changeFrequency: "weekly", priority: 0.7 }, { url: `${APP_URL}/about`, changeFrequency: "monthly", priority: 0.4 },10 ...tree.flatMap((c) => [{ url: `${APP_URL}/categories/${c.slug}`, changeFrequency: "weekly" as const, priority: 0.6 }, ...c.children.map((x) => ({ url: `${APP_URL}/categories/${x.slug}`, changeFrequency: "weekly" as const, priority: 0.6 }))]),11 ...cols.map((c) => ({ url: `${APP_URL}/collections/${c.slug}`, lastModified: c.updatedAt, changeFrequency: "weekly" as const, priority: 0.7 })),12 ...tools.map((t) => ({ url: `${APP_URL}/tools/${t.slug}`, lastModified: t.updatedAt, changeFrequency: "monthly" as const, priority: 0.8 })),13 ];14}15