From c020f1b95afd7035c8592c9ff1407d56dc942dc0 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Sat, 26 Apr 2025 15:19:29 +0100 Subject: [PATCH] feat: sitemap - also compress missing.svg - add missing environment variable to .env.example --- .env.example | 1 + public/missing.svg | 24 +-------------- src/app/sitemap.ts | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 23 deletions(-) create mode 100644 src/app/sitemap.ts diff --git a/.env.example b/.env.example index b0d4ac0..4e1119c 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ BASE_URL=https://tomodachi-share.trafficlunar.net NEXTAUTH_URL=https://tomodachi-share.trafficlunar.net # This should be the same as BASE_URL AUTH_SECRET=XXXXXXXXXXXXXXXX +AUTH_TRUST_HOST=true AUTH_DISCORD_ID=XXXXXXXXXXXXXXXX AUTH_DISCORD_SECRET=XXXXXXXXXXXXXXXX diff --git a/public/missing.svg b/public/missing.svg index dcc266c..b2edb48 100644 --- a/public/missing.svg +++ b/public/missing.svg @@ -1,23 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts new file mode 100644 index 0000000..31c1d52 --- /dev/null +++ b/src/app/sitemap.ts @@ -0,0 +1,77 @@ +import { prisma } from "@/lib/prisma"; +import type { MetadataRoute } from "next"; + +type SitemapRoute = MetadataRoute.Sitemap[0]; + +export default async function sitemap(): Promise { + const baseUrl = process.env.BASE_URL; + if (!baseUrl) { + console.error("BASE_URL environment variable missing"); + return []; + } + + const miis = await prisma.mii.findMany({ + select: { + id: true, + createdAt: true, + }, + }); + + const users = await prisma.user.findMany({ + select: { + id: true, + updatedAt: true, + }, + }); + + const dynamicRoutes: MetadataRoute.Sitemap = [ + ...miis.map( + (mii) => + ({ + url: `${baseUrl}/mii/${mii.id}`, + lastModified: mii.createdAt, + changeFrequency: "weekly", + priority: 0.7, + } as SitemapRoute) + ), + ...users.map( + (user) => + ({ + url: `${baseUrl}/profile/${user.id}`, + lastModified: user.updatedAt, + changeFrequency: "weekly", + priority: 0.7, + } as SitemapRoute) + ), + ]; + + const lastModified = new Date(); + + return [ + { + url: baseUrl, + lastModified, + changeFrequency: "always", + priority: 1, + }, + { + url: `${baseUrl}/login`, + lastModified, + changeFrequency: "monthly", + priority: 0.6, + }, + { + url: `${baseUrl}/privacy`, + lastModified, + changeFrequency: "yearly", + priority: 0.4, + }, + { + url: `${baseUrl}/terms-of-service`, + lastModified, + changeFrequency: "yearly", + priority: 0.4, + }, + ...dynamicRoutes, + ]; +}