Files
BelgianBitcoinEmbassy/frontend/app/sitemap.ts
Michilis 76210db03d first commit
Made-with: Cursor
2026-04-01 02:46:53 +00:00

57 lines
2.2 KiB
TypeScript

import type { MetadataRoute } from "next";
const siteUrl =
process.env.NEXT_PUBLIC_SITE_URL || "https://belgianbitcoinembassy.org";
const apiUrl = process.env.NEXT_PUBLIC_API_URL || "http://localhost:4000/api";
async function fetchJson<T>(path: string): Promise<T | null> {
try {
const res = await fetch(`${apiUrl}${path}`, { next: { revalidate: 3600 } });
if (!res.ok) return null;
return res.json();
} catch {
return null;
}
}
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const staticRoutes: MetadataRoute.Sitemap = [
{ url: siteUrl, lastModified: new Date(), changeFrequency: "weekly", priority: 1.0 },
{ url: `${siteUrl}/blog`, lastModified: new Date(), changeFrequency: "daily", priority: 0.9 },
{ url: `${siteUrl}/events`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.9 },
{ url: `${siteUrl}/community`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.7 },
{ url: `${siteUrl}/contact`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.5 },
{ url: `${siteUrl}/faq`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.6 },
{ url: `${siteUrl}/privacy`, lastModified: new Date(), changeFrequency: "yearly", priority: 0.3 },
{ url: `${siteUrl}/terms`, lastModified: new Date(), changeFrequency: "yearly", priority: 0.3 },
];
const blogRoutes: MetadataRoute.Sitemap = [];
const postsData = await fetchJson<{ posts: any[]; total: number }>("/posts?limit=500");
if (postsData?.posts) {
for (const post of postsData.posts) {
blogRoutes.push({
url: `${siteUrl}/blog/${post.slug}`,
lastModified: post.updatedAt || post.publishedAt || post.createdAt,
changeFrequency: "weekly",
priority: 0.8,
});
}
}
const eventRoutes: MetadataRoute.Sitemap = [];
const meetups = await fetchJson<any[]>("/meetups");
if (Array.isArray(meetups)) {
for (const meetup of meetups) {
eventRoutes.push({
url: `${siteUrl}/events/${meetup.id}`,
lastModified: meetup.updatedAt || meetup.createdAt,
changeFrequency: "weekly",
priority: 0.7,
});
}
}
return [...staticRoutes, ...blogRoutes, ...eventRoutes];
}