From 0f10613bc8f0496dc37e76f7610e641de867ed78 Mon Sep 17 00:00:00 2001 From: kamilbenkirane Date: Wed, 26 Nov 2025 21:17:47 +0100 Subject: [PATCH] fix: serve docs at root URL instead of /docs - Move [[...slug]] route from /docs to root - Merge DocsLayout into root layout - Delete redirect page and docs layout - Add favicon (icon.svg) --- src/app/{docs => }/[[...slug]]/page.tsx | 10 +++++----- src/app/api/search/route.ts | 2 +- src/app/docs/layout.tsx | 11 ----------- src/app/icon.svg | 11 +++++++++++ src/app/layout.tsx | 11 +++++++++-- src/app/og/docs/[...slug]/route.tsx | 4 ++-- src/app/page.tsx | 5 ----- src/components/Breadcrumb.tsx | 6 +++--- src/components/InstallSelector.tsx | 2 +- src/components/Sidebar.tsx | 4 ++-- src/components/docs/SidebarSearch.tsx | 4 ++-- src/lib/source.ts | 2 +- 12 files changed, 37 insertions(+), 35 deletions(-) rename src/app/{docs => }/[[...slug]]/page.tsx (91%) delete mode 100644 src/app/docs/layout.tsx create mode 100644 src/app/icon.svg delete mode 100644 src/app/page.tsx diff --git a/src/app/docs/[[...slug]]/page.tsx b/src/app/[[...slug]]/page.tsx similarity index 91% rename from src/app/docs/[[...slug]]/page.tsx rename to src/app/[[...slug]]/page.tsx index e1aaea0..07347e7 100644 --- a/src/app/docs/[[...slug]]/page.tsx +++ b/src/app/[[...slug]]/page.tsx @@ -1,16 +1,16 @@ -import { getPageImage, source } from "@/lib/source"; +import { createRelativeLink } from "fumadocs-ui/mdx"; import { DocsBody, DocsDescription, DocsPage, DocsTitle, } from "fumadocs-ui/page"; +import type { Metadata } from "next"; import { notFound } from "next/navigation"; +import { getPageImage, source } from "@/lib/source"; import { getMDXComponents } from "@/mdx-components"; -import type { Metadata } from "next"; -import { createRelativeLink } from "fumadocs-ui/mdx"; -export default async function Page(props: PageProps<"/docs/[[...slug]]">) { +export default async function Page(props: PageProps<"/[[...slug]]">) { const params = await props.params; const page = source.getPage(params.slug); if (!page) notFound(); @@ -37,7 +37,7 @@ export async function generateStaticParams() { } export async function generateMetadata( - props: PageProps<"/docs/[[...slug]]">, + props: PageProps<"/[[...slug]]">, ): Promise { const params = await props.params; const page = source.getPage(params.slug); diff --git a/src/app/api/search/route.ts b/src/app/api/search/route.ts index 565b1c8..9753c01 100644 --- a/src/app/api/search/route.ts +++ b/src/app/api/search/route.ts @@ -1,5 +1,5 @@ -import { source } from "@/lib/source"; import { createFromSource } from "fumadocs-core/search/server"; +import { source } from "@/lib/source"; // Use staticGET for static export compatibility export const { staticGET: GET } = createFromSource(source, { diff --git a/src/app/docs/layout.tsx b/src/app/docs/layout.tsx deleted file mode 100644 index 95b686f..0000000 --- a/src/app/docs/layout.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { source } from "@/lib/source"; -import { DocsLayout } from "fumadocs-ui/layouts/docs"; -import { baseOptions } from "@/lib/layout.shared"; - -export default function Layout({ children }: LayoutProps<"/docs">) { - return ( - - {children} - - ); -} diff --git a/src/app/icon.svg b/src/app/icon.svg new file mode 100644 index 0000000..41c0600 --- /dev/null +++ b/src/app/icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/app/layout.tsx b/src/app/layout.tsx index c6421b7..6f4841f 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,9 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { RootProvider } from "fumadocs-ui/provider/next"; -import "./global.css"; import { Space_Grotesk, Space_Mono } from "next/font/google"; +import { baseOptions } from "@/lib/layout.shared"; +import { source } from "@/lib/source"; +import "./global.css"; const spaceGrotesk = Space_Grotesk({ subsets: ["latin"], @@ -24,7 +27,11 @@ export default function Layout({ children }: LayoutProps<"/">) { suppressHydrationWarning > - {children} + + + {children} + + ); diff --git a/src/app/og/docs/[...slug]/route.tsx b/src/app/og/docs/[...slug]/route.tsx index b3bfb23..cc1029d 100644 --- a/src/app/og/docs/[...slug]/route.tsx +++ b/src/app/og/docs/[...slug]/route.tsx @@ -1,7 +1,7 @@ -import { getPageImage, source } from "@/lib/source"; +import { generate as DefaultImage } from "fumadocs-ui/og"; import { notFound } from "next/navigation"; import { ImageResponse } from "next/og"; -import { generate as DefaultImage } from "fumadocs-ui/og"; +import { getPageImage, source } from "@/lib/source"; export const revalidate = false; diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index f8c9409..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from "next/navigation"; - -export default function HomePage() { - redirect("/docs"); -} diff --git a/src/components/Breadcrumb.tsx b/src/components/Breadcrumb.tsx index 1559ab2..8792d08 100644 --- a/src/components/Breadcrumb.tsx +++ b/src/components/Breadcrumb.tsx @@ -1,11 +1,11 @@ "use client"; -import { usePathname } from "next/navigation"; import { useBreadcrumb } from "fumadocs-core/breadcrumb"; -import * as PageTree from "fumadocs-core/page-tree"; -import { Fragment } from "react"; +import type * as PageTree from "fumadocs-core/page-tree"; import { ChevronRight } from "lucide-react"; import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { Fragment } from "react"; export function Breadcrumb({ tree }: { tree: PageTree.Root }) { const pathname = usePathname(); diff --git a/src/components/InstallSelector.tsx b/src/components/InstallSelector.tsx index 740f5a9..6c90d03 100644 --- a/src/components/InstallSelector.tsx +++ b/src/components/InstallSelector.tsx @@ -1,7 +1,7 @@ "use client"; -import { useState } from "react"; import { Check, Copy, Terminal } from "lucide-react"; +import { useState } from "react"; import { cn } from "@/lib/utils"; // Assuming a utility for classnames exists or I'll inline it // Simplified cn utility if it doesn't exist in context diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index db25a19..e433b2d 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -1,10 +1,10 @@ "use client"; -import * as PageTree from "fumadocs-core/page-tree"; +import type * as PageTree from "fumadocs-core/page-tree"; +import { ChevronRight } from "lucide-react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useState } from "react"; -import { ChevronRight } from "lucide-react"; interface SidebarProps { tree: PageTree.Root; diff --git a/src/components/docs/SidebarSearch.tsx b/src/components/docs/SidebarSearch.tsx index 2e128e7..be3a245 100644 --- a/src/components/docs/SidebarSearch.tsx +++ b/src/components/docs/SidebarSearch.tsx @@ -1,8 +1,8 @@ "use client"; -import { Search } from "lucide-react"; import { useSearchContext } from "fumadocs-ui/contexts/search"; -import { useEffect, type ReactElement } from "react"; +import { Search } from "lucide-react"; +import { type ReactElement, useEffect } from "react"; import { cn } from "@/lib/utils"; interface SidebarSearchProps { diff --git a/src/lib/source.ts b/src/lib/source.ts index 8327949..482b458 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -1,6 +1,6 @@ -import { docs } from "@/.source"; import { type InferPageType, loader } from "fumadocs-core/source"; import { lucideIconsPlugin } from "fumadocs-core/source/lucide-icons"; +import { docs } from "@/.source"; // See https://fumadocs.dev/docs/headless/source-api for more info export const source = loader({