From b219873dfb86d88ade094ffbac5cc9cdf26679fa Mon Sep 17 00:00:00 2001 From: Jared Schoeny Date: Fri, 24 Oct 2025 23:47:23 -1000 Subject: [PATCH] Add dynamic sitemap --- src/app/sitemap.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/app/sitemap.ts diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts new file mode 100644 index 0000000..1ce439e --- /dev/null +++ b/src/app/sitemap.ts @@ -0,0 +1,25 @@ +import { createClient } from "@/utils/supabase/server"; +import { MetadataRoute } from "next"; + +export default async function Sitemap(): Promise { + let routes: MetadataRoute.Sitemap = [ + { url: "/", lastModified: new Date().toISOString() }, + { url: "/discover", lastModified: new Date().toISOString(), changeFrequency: "daily" as const }, + ]; + + const supabase = await createClient(); + + const { data: hacks } = await supabase.from("hacks").select("slug,updated_at"); + if (hacks) { + routes.push(...hacks.map((hack) => ({ + url: `/hack/${hack.slug}`, + changeFrequency: "weekly" as const, + lastModified: hack.updated_at || new Date().toISOString(), + }))); + } + + return routes.map((route) => ({ + ...route, + url: `${process.env.NEXT_PUBLIC_SITE_URL!}/${route.url}`, + })); +}