diff --git a/docs/.gitignore b/docs/.gitignore
index e985853e..9d1387eb 100644
--- a/docs/.gitignore
+++ b/docs/.gitignore
@@ -1 +1,30 @@
+# deps
+node_modules
+
+# generated content
+.source
+
+# test & build
+coverage
+.next/
+out/
+build
+*.tsbuildinfo
+dist
+
+# misc
+.DS_Store
+*.pem
+.pnp
+.pnp.js
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# others
+.env*.local
.vercel
+next-env.d.ts
+
+# Turborepo
+.turbo
\ No newline at end of file
diff --git a/docs/app/[lang]/(docs)/[[...slug]]/page.tsx b/docs/app/[lang]/(docs)/[[...slug]]/page.tsx
new file mode 100644
index 00000000..5cf93f58
--- /dev/null
+++ b/docs/app/[lang]/(docs)/[[...slug]]/page.tsx
@@ -0,0 +1,88 @@
+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 { getMDXComponents } from '@/components/geistdocs/mdx-components'
+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'
+
+const Page = async ({ params }: PageProps<'/[lang]/[[...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 (
+
{description}
+ )} +{tooltip}
+{attachmentLabel}
++ {data.mediaType} +
+ )} +Used {count} sources
+
+ Tip: You can open and close chat with{" "}
+
+ {localPrompt.length} / 1000 +
+code]:grid",
+ className,
+ props.className
+ )}
+ ref={ref}
+ style={style}
+ tabIndex={tabIndex}
+ >
+ {children}
+
+ ),
+ [children, style, tabIndex, className]
+ );
+
+ if (!title) {
+ return (
+ Thank you for your feedback!
+Used {sources.length} sources
+