diff --git a/next.config.ts b/next.config.ts
index 021418a..dc4e192 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -10,6 +10,8 @@ const nextConfig: NextConfig = {
images: {
unoptimized: true,
},
+ // Note: rewrites don't work with static export
+ // Static .mdx files are generated via postbuild script instead
async rewrites() {
return [
{
diff --git a/package.json b/package.json
index a140c75..c013ab2 100644
--- a/package.json
+++ b/package.json
@@ -4,10 +4,12 @@
"private": true,
"scripts": {
"generate-provider-docs": "bash scripts/generate-provider-docs.sh",
+ "generate-static-mdx": "bun scripts/generate-static-mdx.ts",
"build": "next build",
"dev": "next dev",
"prebuild": "CELESTE_SOURCE=local bun run generate-provider-docs",
"predev": "CELESTE_SOURCE=local bun run generate-provider-docs",
+ "postbuild": "bun run generate-static-mdx",
"start": "next start",
"postinstall": "fumadocs-mdx",
"lint": "biome check",
diff --git a/scripts/generate-static-mdx.ts b/scripts/generate-static-mdx.ts
new file mode 100644
index 0000000..b5caef9
--- /dev/null
+++ b/scripts/generate-static-mdx.ts
@@ -0,0 +1,39 @@
+#!/usr/bin/env bun
+/**
+ * Generate static .mdx files for LLM consumption after Next.js build.
+ *
+ * This script generates markdown files in out/docs/ that correspond to
+ * the API route /llms.mdx/docs/[[...slug]] for static export compatibility.
+ */
+
+import { writeFile, mkdir } from "fs/promises";
+import { join, dirname } from "path";
+import { source, getPagesInNavOrder, getLLMText } from "../src/lib/source";
+
+async function generateStaticMdxFiles() {
+ const outDir = join(process.cwd(), "out", "docs");
+ const pages = getPagesInNavOrder();
+
+ console.log(`Generating ${pages.length} static MDX files...`);
+
+ for (const page of pages) {
+ const markdown = await getLLMText(page);
+ // Convert page URL to file path (e.g., "providers/openai" -> "providers/openai.mdx")
+ const filePath = join(outDir, `${page.url}.mdx`);
+ const fileDir = dirname(filePath);
+
+ // Ensure directory exists
+ await mkdir(fileDir, { recursive: true });
+
+ // Write markdown file
+ await writeFile(filePath, markdown, "utf-8");
+ console.log(` ā ${page.url}.mdx`);
+ }
+
+ console.log(`\nā Generated ${pages.length} static MDX files in ${outDir}`);
+}
+
+generateStaticMdxFiles().catch((error) => {
+ console.error("Error generating static MDX files:", error);
+ process.exit(1);
+});
diff --git a/src/app/[[...slug]]/page.tsx b/src/app/[[...slug]]/page.tsx
index 7e50bd5..81d846e 100644
--- a/src/app/[[...slug]]/page.tsx
+++ b/src/app/[[...slug]]/page.tsx
@@ -78,10 +78,10 @@ export default async function Page(props: PageProps<"/[[...slug]]">) {
diff --git a/src/app/llms.mdx/docs/[[...slug]]/route.ts b/src/app/llms.mdx/docs/[[...slug]]/route.ts
deleted file mode 100644
index 5983c21..0000000
--- a/src/app/llms.mdx/docs/[[...slug]]/route.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { getLLMText, source } from "@/lib/source";
-import { notFound } from "next/navigation";
-
-export const revalidate = false;
-
-export async function GET(
- _req: Request,
- { params }: RouteContext<"/llms.mdx/docs/[[...slug]]">,
-) {
- const { slug } = await params;
- const page = source.getPage(slug);
- if (!page) notFound();
-
- return new Response(await getLLMText(page), {
- headers: {
- "Content-Type": "text/markdown; charset=utf-8",
- },
- });
-}
-
-export function generateStaticParams() {
- return source.generateParams();
-}
diff --git a/src/lib/source.ts b/src/lib/source.ts
index 184001b..53c714a 100644
--- a/src/lib/source.ts
+++ b/src/lib/source.ts
@@ -69,9 +69,15 @@ export function getPageImage(page: InferPageType) {
}
export async function getLLMText(page: InferPageType) {
- const processed = await page.data.getText("processed");
+ // Try processed first, fall back to raw if not available
+ let text: string;
+ try {
+ text = await page.data.getText("processed");
+ } catch {
+ text = await page.data.getText("raw");
+ }
return `# ${page.data.title} (${page.url})
-${processed}`;
+${text}`;
}
diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx
index 404959e..55f8361 100644
--- a/src/mdx-components.tsx
+++ b/src/mdx-components.tsx
@@ -3,14 +3,11 @@ import type { MDXComponents } from "mdx/types";
import { InstallSelector } from "@/components/InstallSelector";
import { Mermaid } from "@/components/Mermaid";
-type MDXComponentsOptions = MDXComponents & {
- isProviderPage?: boolean;
-};
-
export function getMDXComponents(
- options?: MDXComponentsOptions,
+ components?: MDXComponents,
+ options?: { isProviderPage?: boolean },
): MDXComponents {
- const { isProviderPage, ...components } = options || {};
+ const { isProviderPage } = options || {};
return {
...defaultMdxComponents,
InstallSelector,