SPB Git
1.4 KB · 15 lines typescript
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
Files · laptop-initial-20261102
Menu

Theme