From e22d8d6f9611cc7170da52ade87f651c4d4cea4d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Jan 2026 10:45:25 +0000 Subject: [PATCH] fix(web): resolve sitemap and middleware issues for Vercel deployment - sitemap.ts: revert to static doc list (fs.readdirSync fails in Vercel monorepo because process.cwd() doesn't point to apps/web/) - middleware.ts: exclude .xml and .txt files from Clerk middleware (was causing "Redirecting..." response for sitemap.xml) --- apps/web/src/app/sitemap.ts | 30 +++++++++++++----------------- apps/web/src/middleware.ts | 4 ++-- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/apps/web/src/app/sitemap.ts b/apps/web/src/app/sitemap.ts index b22541a..54b50ac 100644 --- a/apps/web/src/app/sitemap.ts +++ b/apps/web/src/app/sitemap.ts @@ -1,32 +1,28 @@ import { MetadataRoute } from 'next' -import fs from 'fs' -import path from 'path' - -function getDocSlugs(): string[] { - const docsDir = path.join(process.cwd(), 'content/docs') - try { - return fs - .readdirSync(docsDir) - .filter((file) => file.endsWith('.mdx')) - .map((file) => file.replace('.mdx', '')) - .filter((slug) => slug !== 'index') - } catch { - return [] - } -} export default function sitemap(): MetadataRoute.Sitemap { const baseUrl = 'https://replimap.com' const now = new Date() + // Static list - more reliable than fs.readdirSync in Vercel monorepo + // Update this when adding new docs (matches content/docs/*.mdx) + const docSlugs = [ + 'quick-start', + 'installation', + 'cli-reference', + 'iam-policy', + 'security', + 'changelog', + 'contributing', + ] + // Core pages const coreRoutes: MetadataRoute.Sitemap = [ { url: baseUrl, lastModified: now, changeFrequency: 'weekly', priority: 1.0 }, { url: `${baseUrl}/docs`, lastModified: now, changeFrequency: 'weekly', priority: 0.9 }, ] - // Dynamic documentation pages - const docSlugs = getDocSlugs() + // Documentation pages const docRoutes: MetadataRoute.Sitemap = docSlugs.map((slug) => ({ url: `${baseUrl}/docs/${slug}`, lastModified: now, diff --git a/apps/web/src/middleware.ts b/apps/web/src/middleware.ts index 21f5b24..f6f82e5 100644 --- a/apps/web/src/middleware.ts +++ b/apps/web/src/middleware.ts @@ -14,8 +14,8 @@ export default clerkMiddleware(async (auth, req) => { export const config = { matcher: [ - // Skip Next.js internals and static files - "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)", + // Skip Next.js internals and static files (including xml for sitemap, txt for robots) + "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest|xml|txt)).*)", // Always run for API routes "/(api|trpc)(.*)", ],