Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9797baf
Migrate docs app to Geistdocs canary
molebox May 28, 2026
356afb5
Fix docs proxy matcher
molebox May 28, 2026
06b4f8a
Use Geistdocs UI exports
molebox May 29, 2026
a41d3d2
Update Geistdocs to 1.3.0
molebox May 29, 2026
aa07c1b
upgrade geistdocs and fix svelte logo
molebox Jun 1, 2026
128773f
add copy prompt to certain docs pages
molebox Jun 1, 2026
94e3fa9
migrate to 1.5.0
christopherkindl Jun 3, 2026
2ea8766
refactor(docs): use geistdocs v1.5 Badge, CommandPrompt, ThemeAwareImage
christopherkindl Jun 4, 2026
7318596
fix(docs): restore install switcher width animation
christopherkindl Jun 4, 2026
fa82a7c
refactor(docs): render home code blocks with geistdocs CodeBlock
christopherkindl Jun 4, 2026
ea09caa
fix(docs): equal-height home code blocks
christopherkindl Jun 4, 2026
6de0989
chore(docs): drop dead shadcn tokens (chart-*, sidebar-primary)
christopherkindl Jun 4, 2026
49e4f48
refactor(docs): migrate consumers off shadcn tokens to Geist scale
christopherkindl Jun 4, 2026
f81772d
Update geistdocs.css
christopherkindl Jun 4, 2026
9f1a693
migrate to 1.6.0
christopherkindl Jun 4, 2026
8239c0b
chore(docs): bump @vercel/geistdocs to 1.6.1
christopherkindl Jun 4, 2026
d710689
Merge branch 'main' into migrate-docs
christopherkindl Jun 4, 2026
ea19dd7
Update pnpm-lock.yaml
christopherkindl Jun 4, 2026
4a5154c
fix(docs): drop language icons from landing-page code blocks
christopherkindl Jun 5, 2026
60372c9
chore(docs): drop redundant streamdown @source
christopherkindl Jun 5, 2026
d2c9349
update
christopherkindl Jun 5, 2026
0f36f6f
bump @vercel/geistdocs
christopherkindl Jun 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion apps/docs/.env.example
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# AI Gateway API Key (optional - for AI chat)
AI_GATEWAY_API_KEY=""

# Optional central Geistdocs chat proxy. When set, this is used instead of AI Gateway.
GEISTDOCS_CHAT_PROXY_URL=""
GEISTDOCS_CHAT_PROXY_TOKEN=""

# Production URL (automatically set on Vercel)
NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL="localhost:3000"
NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL="localhost:3000"

# Required for precomputed feature flag URLs
FLAGS_SECRET="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
10 changes: 10 additions & 0 deletions apps/docs/app/[lang]/agents.md/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { createAgentsRoute } from '@vercel/geistdocs/routes/agents';
import { config } from '@/lib/geistdocs/config';

const agentsRoute = createAgentsRoute({
config,
});

export const GET = agentsRoute.GET;
export const generateStaticParams = agentsRoute.generateStaticParams;
export const revalidate = false;
129 changes: 29 additions & 100 deletions apps/docs/app/[lang]/docs/[[...slug]]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,106 +1,35 @@
import { createRelativeLink } from "fumadocs-ui/mdx";
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { AskAI } from "@/components/geistdocs/ask-ai";
import { CopyPage } from "@/components/geistdocs/copy-page";
import {
DocsBody,
DocsDescription,
DocsPage,
DocsTitle,
} from "@/components/geistdocs/docs-page";
import { EditSource } from "@/components/geistdocs/edit-source";
import { Feedback } from "@/components/geistdocs/feedback";
import { ThemeAwareImage } from "@vercel/geistdocs/components/theme-aware-image";
import { MobileDocsBar } from "@vercel/geistdocs/mobile-docs-bar";
import { createDocsPage } from "@vercel/geistdocs/pages/docs";
import { getMDXComponents } from "@/components/geistdocs/mdx-components";
import { MobileDocsBar } from "@/components/geistdocs/mobile-docs-bar";
import { OpenInChat } from "@/components/geistdocs/open-in-chat";
import { ScrollTop } from "@/components/geistdocs/scroll-top";
import { Separator } from "@/components/ui/separator";
import { getLLMText, getPageImage, source } from "@/lib/geistdocs/source";
import { IframeBrowser } from "@/components/custom/iframe-browser";
import { LearnMore } from "@/components/custom/learn-more";
import { ProviderList } from "@/components/custom/provider-list";
import { ThemeAwareImage } from "@/components/custom/theme-aware-image";
import { config } from "@/lib/geistdocs/config";
import { geistdocsSource } from "@/lib/geistdocs/source";
import { ExternalLinkIcon } from "lucide-react";

const Page = async ({ params }: PageProps<"/[lang]/docs/[[...slug]]">) => {
const { slug, lang } = await params;
const page = source.getPage(slug, lang);

if (!page) {
notFound();
}

const markdown = await getLLMText(page);
const MDX = page.data.body;

return (
<DocsPage
full={page.data.full}
tableOfContent={{
style: "clerk",
footer: (
<div className="my-3 space-y-3">
<Separator />
<EditSource path={page.path} />
<ScrollTop />
<Feedback />
<CopyPage text={markdown} />
<AskAI href={page.url} />
<OpenInChat href={page.url} />
</div>
),
}}
tableOfContentPopover={{ enabled: false }}
toc={page.data.toc}
>
<MobileDocsBar toc={page.data.toc} />
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
<DocsBody>
<MDX
components={getMDXComponents({
a: createRelativeLink(source, page),

// Add your custom components here
IframeBrowser,
LearnMore,
ProviderList,
ThemeAwareImage,
ExternalSmall: ExternalLinkIcon,
})}
/>
</DocsBody>
</DocsPage>
);
};

export const generateStaticParams = () => source.generateParams();

export const generateMetadata = async ({
params,
}: PageProps<"/[lang]/docs/[[...slug]]">) => {
const { slug, lang } = await params;
const page = source.getPage(slug, lang);

if (!page) {
notFound();
}

const metadata: Metadata = {
title: page.data.title,
description: page.data.description,
openGraph: {
images: getPageImage(page).url,
},
alternates: {
types: {
"text/markdown": slug ? `/docs/${slug}.md` : "/docs.md",
},
},
};

return metadata;
};

export default Page;
const docsPage = createDocsPage({
config,
mdx: ({ link }) =>
getMDXComponents({
a: link,
IframeBrowser,
LearnMore,
ProviderList,
ThemeAwareImage,
ExternalSmall: ExternalLinkIcon,
}),
openGraph: {
images: true,
},
source: geistdocsSource,
tableOfContentPopover: {
enabled: false,
},
renderTop: ({ data }) => <MobileDocsBar toc={data.toc} />,
});

export default docsPage.Page;
export const generateStaticParams = docsPage.generateStaticParams;
export const generateMetadata = docsPage.generateMetadata;
Loading