diff --git a/src/app/api/md/[...slug]/route.ts b/src/app/api/md/[...slug]/route.ts index 5c8866022..51a3d8de6 100644 --- a/src/app/api/md/[...slug]/route.ts +++ b/src/app/api/md/[...slug]/route.ts @@ -1,8 +1,19 @@ import {allPosts} from 'contentlayer/generated'; -import {NextRequest, NextResponse} from 'next/server'; +import {NextResponse} from 'next/server'; + +// Prerender every post's markdown at build time; unknown slugs 404 without +// invoking a function. +export const dynamicParams = false; + +export function generateStaticParams() { + // The root index.mdx has an empty path; a catch-all needs at least one segment. + return allPosts + .filter(post => post._raw.flattenedPath !== '') + .map(post => ({slug: post._raw.flattenedPath.split('/')})); +} export async function GET( - _: NextRequest, + _: Request, {params}: {params: {slug: string[]}} ) { const docPath = params.slug.join('/'); diff --git a/vercel.json b/vercel.json index 1625d94ae..7e1c6b897 100644 --- a/vercel.json +++ b/vercel.json @@ -1,4 +1,5 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", + "fluid": true, "ignoreCommand": "git diff --quiet HEAD^ HEAD -- . ':(exclude).github' ':(exclude).agents' ':(exclude).amp' ':(exclude).vscode' ':(exclude)AGENTS.md' ':(exclude)README.md' ':(exclude).gitignore' ':(exclude)cspell*'" }