Skip to content

Conversation

@cameronmema
Copy link

@cameronmema cameronmema commented Jun 28, 2025

Closes #

🎯 Changes

What changes are made in this PR? Is it a feature or a bug fix?

[WIP] ADDING NEW TRPC DOCS

Please merge this into a seperate branch

Summary by CodeRabbit

  • Documentation
    • Added extensive new documentation covering Fumadocs Core, UI, MDX features, integrations (OpenAPI, Python, RSS, AI, search providers), and customization options.
    • Introduced guides and usage examples for components such as Sidebar, TOC, Breadcrumb, Tabs, Accordions, Steps, Banner, Files, and more.
    • Provided setup and configuration instructions for internationalization, search (Orama, Algolia, Trieve), Open Graph, feedback, and Mermaid diagrams.
    • Included detailed metadata files to structure and organize documentation sections.
    • Added manual installation and deployment guides, including Docker support and advanced configuration tips.
    • Added comprehensive CLI tool documentation for automating setups and component installation.
    • Documented headless components with usage examples including Breadcrumb, Link, Sidebar, and TOC with active anchor support.
    • Expanded MDX plugin documentation covering remark and rehype plugins for headings, admonitions, images, and code highlighting.
    • Introduced detailed content collections and custom source integration guides with best practices for MDX imports.
    • Provided extensive search integration documentation with setup, sync scripts, and UI examples for Orama, Algolia, and Trieve.
    • Added UI customization documentation including layouts, navigation links, feedback components, and theme providers.
    • Included new documentation on AI features, LLM text generation, and AI search dialog integration.
    • Supplied rich markdown authoring guides with callouts, tabs, code blocks, math, Mermaid diagrams, and Twoslash support.
    • Added utility documentation for page tree navigation, Git last edit retrieval, and table of contents extraction.
    • Delivered new React components with usage instructions for server-side code blocks, dynamic code blocks, and image zoom.

cameronmema and others added 5 commits June 28, 2025 16:49
the docs are incomplete however i started work on some, ideally we refactor to use the new tanstack integration as primary, better docs for SSR, different collections for framework/server/client.

if you look in the content/!sample folder you will see the things you are able to do.
@cameronmema cameronmema requested a review from a team as a code owner June 28, 2025 21:38
@vercel
Copy link

vercel bot commented Jun 28, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
www ❌ Failed (Inspect) Jun 30, 2025 4:08pm

@vercel
Copy link

vercel bot commented Jun 28, 2025

@cameronmema is attempting to deploy a commit to the trpc Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 28, 2025

Walkthrough

This update introduces a comprehensive set of documentation files, metadata, type definitions, and example components for a documentation framework. It covers setup, configuration, UI customization, search integration, content source management, and advanced features such as internationalization, AI, and OpenAPI. The changes are documentation-focused, with new guides, usage examples, and supporting TypeScript types.

Changes

File(s) Change Summary
docs/!sample/cli/index.mdx, docs/!sample/cli/meta.json Added CLI tool documentation and metadata.
docs/!sample/headless/components/*.mdx, docs/!sample/headless/components/meta.json, docs/!sample/headless/components/toc-example.tsx Added headless UI component docs (Breadcrumb, Link, Sidebar, TOC) and supporting metadata and examples.
docs/!sample/headless/content-collections/index.mdx, docs/!sample/headless/custom-source.mdx, docs/!sample/headless/index.mdx, docs/!sample/headless/internationalization.mdx, docs/!sample/headless/page-conventions.mdx, docs/!sample/headless/page-tree.mdx, docs/!sample/headless/source-api.mdx Added core headless library documentation: introduction, content collections, custom sources, i18n, routing conventions, page tree, and source API.
docs/!sample/headless/mdx/*.mdx, docs/!sample/headless/mdx/meta.json Added documentation for MDX plugins (remark/rehype), usage, install, structure, and metadata.
docs/!sample/headless/meta.json Added metadata file for headless documentation structure.
docs/!sample/headless/props.ts Introduced a consolidated TypeScript types module for headless components and utilities.
docs/!sample/headless/search/*.mdx, docs/!sample/headless/search/sync-algolia.mjs Added documentation and scripts for integrating search engines (Orama, Algolia, Trieve), including setup, UI, and filtering.
docs/!sample/headless/utils/*.mdx, docs/!sample/headless/utils/meta.json Added documentation and metadata for utility functions (find neighbour, get TOC, git last edit).
docs/!sample/mdx/*.mdx, docs/!sample/mdx/meta.json, docs/!sample/mdx/props.ts Added MDX library documentation, setup, configuration, plugin usage, performance, and supporting metadata and types.
docs/!sample/ui/(integrations)/* Added documentation and code for UI integrations: feedback, AI/LLM, Open Graph, OpenAPI, Python, RSS, TypeScript, and search with supporting metadata and components.
docs/!sample/ui/components/*.mdx, docs/!sample/ui/components/server-codeblock.tsx, docs/!sample/ui/components/tabs.client.tsx Added documentation for UI components (Accordion, AutoTypeTable, Banner, CodeBlock, Files, GithubInfo, ImageZoom, InlineTOC, Steps, Tabs, TypeTable) and supporting code/examples.
docs/!sample/ui/customisation.mdx, docs/!sample/ui/index.mdx, docs/!sample/ui/manual-installation.mdx Added UI overview, customization guide, quick start, and manual installation instructions.
docs/!sample/ui/internationalization.mdx Added comprehensive internationalization (i18n) guide for UI integration.
docs/!sample/ui/layouts/*.mdx Added documentation for UI layouts (DocsLayout, HomeLayout, Notebook, RootProvider, DocsPage).
docs/!sample/ui/markdown/*.mdx Added documentation for Markdown/MDX features, math, mermaid diagrams, and twoslash integration.
docs/!sample/ui/mdx/*.mdx Added documentation for MDX components and code block usage.
docs/!sample/ui/navigation/*.mdx Added documentation for navigation configuration, sidebar, and links.
docs/!sample/ui/page-conventions.mdx Added routing conventions documentation by including shared headless conventions.
docs/!sample/ui/search/*.mdx, docs/!sample/ui/search/*.tsx, docs/!sample/ui/search/meta.json Added documentation and code for search UI integration (Orama, Algolia, Orama Cloud), customization, and tag filtering.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant DocsSite
  participant CLI
  participant ContentSource
  participant SearchEngine
  participant UIComponents

  User->>DocsSite: Access documentation
  DocsSite->>ContentSource: Load docs (MDX, Content Collections, Custom)
  DocsSite->>UIComponents: Render layouts, navigation, components
  User->>CLI: Run CLI commands (install, customize, tree)
  CLI->>ContentSource: Fetch components, transform imports
  User->>SearchEngine: Perform search (Orama, Algolia, Trieve)
  SearchEngine-->>DocsSite: Return search results
  DocsSite->>User: Display docs, search, and UI features
Loading

Poem

In burrows deep, with docs so wide,
The rabbit hops with gentle pride.
Breadcrumbs, tabs, and banners bright,
Markdown magic, code in light.
From search to sidebars, guides anew—
With every hop, more docs for you!
🐇✨📚

✨ Finishing Touches
🧪 Generate Unit Tests
  • Create PR with Unit Tests
  • Post Copyable Unit Tests in Comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

♻️ Duplicate comments (1)
docs/!sample/ui/internationalization.mdx (1)

132-141: Same Promise issue in Docs/Home layouts

Apply the same correction here to keep typings consistent.

-}: {
-  params: Promise<{ lang: string }>;
+}: {
+  params: { lang: string };
 ...
-  const { lang } = await params;
+  const { lang } = params;
🧹 Nitpick comments (120)
docs/!sample/mdx/last-modified.mdx (1)

8-10: Tighten wording & add missing article

Minor style / grammar tweak to avoid the comma-splice and insert “the”.

-This feature is not enabled by default, you can enable this from the config file. Note that it only supports Git as version control.
+This feature is not enabled by default; you can enable it from the config file. Note that it only supports Git as the version-control system.
docs/!sample/ui/components/accordion.mdx (2)

30-31: Add missing “the” before “hash parameter”

-...with the specified `id` in hash parameter.
+...with the specified `id` in the hash parameter.

42-42: Clarify default value wording

-> The value of accordion is same as title by default. When an id presents, it will be used as the value instead.
+> The accordion’s value is the same as the title by default. When an `id` is present, that `id` is used as the value instead.
docs/!sample/headless/props.ts (2)

1-6: Consolidated import can be replaced by direct re-exports

Since these are purely type imports, you can remove the local alias indirection completely and rely on TypeScript’s export type { … } from "…".
This keeps the barrel in sync with upstream names automatically and avoids an ever-growing maintenance list.

-import type * as Breadcrumb from 'fumadocs-core/breadcrumb';
-
-export type BreadcrumbItem = Breadcrumb.BreadcrumbItem;
+export type { BreadcrumbItem } from 'fumadocs-core/breadcrumb';

Same applies to the remaining modules.
Purely optional, but it keeps the file shorter and future-proof.


14-17: Verify generic default for SidebarContentProps / SidebarTriggerProps

Both generics accept an ElementType parameter that defaults to ElementType already in the upstream lib.
Passing the explicit ElementType here is harmless, but redundant. Confirm that the upstream declaration still uses that default; if so you can drop the parameter:

-export type SidebarContentProps = Sidebar.SidebarContentProps<ElementType>;
-export type SidebarTriggerProps = Sidebar.SidebarTriggerProps<ElementType>;
+export type SidebarContentProps = Sidebar.SidebarContentProps;
+export type SidebarTriggerProps = Sidebar.SidebarTriggerProps;

Tiny simplification, noop at runtime.

docs/!sample/headless/mdx/meta.json (1)

1-3: Nit: Ensure trailing newline to satisfy POSIX tools

A final newline is missing; some linters and diff tools flag this.

docs/!sample/headless/search/index.mdx (1)

1-6: Front-matter consistency

Elsewhere you use sentence-case descriptions (“Configure navigation in your Fumadocs app.”).
Consider lower-casing “Search” in the description for stylistic consistency:

-description: Configure Search in Fumadocs
+description: Configure search in Fumadocs

Pure content nit.

docs/!sample/ui/navigation/index.mdx (1)

2-4: Minor punctuation

The description already ends with a period; the title line doesn’t need one.
Consider removing the trailing period for symmetry with other pages.

-title: Navigation
-description: Configure navigation in your Fumadocs app.
+title: Navigation
+description: Configure navigation in your Fumadocs app
docs/!sample/ui/components/index.mdx (1)

3-4: Grammar tweak

“Additional components to improve documentation” reads more naturally:

-description: Additional components to improve your docs
+description: Additional components to improve your documentation

Very minor wording improvement.

docs/!sample/headless/utils/index.mdx (1)

6-6: Add a brief introduction so the page isn’t rendered completely empty

Right now the body is empty, so users who land here will just see a blank page below the heading. Consider adding a one-sentence overview or a bullet list linking to the individual utility docs.

 ---
 description: Utilities to provide extra functionality to your docs
 ---
+
+Utilities extend Fumadocs with helper functions such as navigation helpers, TOC generators, and GitHub metadata fetchers. Browse the list below to learn more.
docs/!sample/headless/components/index.mdx (1)

6-6: Populate the index page with at least a short summary

Similar to the utilities index, this page has no body content. A tiny blurb helps readers understand what they’ll find here and improves SEO.

 ---
 description: Blocks for your docs
 ---
+
+This section documents the headless UI building blocks—Breadcrumb, Link, Sidebar, ToC and more—that you can compose to craft a custom docs experience.
docs/!sample/headless/mdx/index.mdx (1)

6-6: Avoid empty body; add context or quick links

An empty MDX page can be confusing. Even a sentence explaining why MDX plugins matter (and maybe links to popular plugins) would be beneficial.

 ---
 description: Useful remark & rehype plugins for your docs.
 ---
+
+Below you’ll find guides for the core remark / rehype plugins we ship, plus tips on rolling your own.
docs/!sample/ui/search/meta.json (1)

1-3: Placeholder "..." and missing "title" may break navigation

fumadocs’ meta parser typically expects real page slugs and, for consistency, a title field like in other meta files. Verify that "..." is intentionally supported and add a title for uniformity.

 {
+  "title": "Search",
-  "pages": ["orama", "..."]
+  "pages": ["orama"]
 }
docs/!sample/headless/components/meta.json (1)

1-4: Replace placeholder "..." before merging to main docs

Leaving an ellipsis entry will surface a broken link in the sidebar. Either add the actual component docs slug or drop the placeholder until the page exists.

 {
   "title": "Components",
-  "pages": ["..."]
+  "pages": []
 }
docs/!sample/ui/components/inline-toc.mdx (2)

11-16: Minor MDX sample: remove the blank line inside fenced code for cleaner copy-paste

The extra blank line after the import statement becomes part of the pasted sample and can confuse readers.

 import { InlineTOC } from 'fumadocs-ui/components/inline-toc';

-<InlineTOC items={toc} />
+<InlineTOC items={toc} />

21-27: Example omits toc generation—add a hint to avoid “undefined” errors

Most readers will copy this block verbatim; without a toc variable the page will crash at runtime.

 <DocsPage>
   ...
+  {/* `toc` can be generated with \`getToc(content)\` or imported from
+      the page’s front-matter */} 
   <InlineTOC items={toc} />
   ...
 </DocsPage>
docs/!sample/ui/(integrations)/openapi/meta.json (1)

1-3: Metadata is incomplete – add a title to show up in navigation

Without a title, many nav generators fall back to the folder name (integrations)/openapi, which is not user-friendly.

 {
+  "title": "OpenAPI",
   "pages": ["configurations", "..."]
 }
docs/!sample/headless/utils/meta.json (1)

2-4: Placeholder "..." can break static-site generators

Some generators treat "..." as a literal path and will search for a non-existent file.
Either list concrete page IDs or remove the key until pages are added.

-  "pages": ["..."]
+  "pages": []
docs/!sample/headless/utils/find-neighbour.mdx (1)

11-11: Fix grammar: Add missing article.

The sentence should include the article "the" for proper grammar.

-It requires a page tree and the url of page.
+It requires a page tree and the url of the page.
docs/!sample/mdx/plugin.mdx (1)

26-26: Fix grammar: Add missing article.

The sentence should include the article "the" before ".source folder" for proper grammar.

-It automatically re-generates the index file in `.source` folder, ensuring Next.js hot reload is working properly.
+It automatically re-generates the index file in the `.source` folder, ensuring Next.js hot reload is working properly.
docs/!sample/ui/components/type-table.mdx (1)

17-19: Typo – “roll button” → “scroll button”

Small wording issue that could confuse readers.

-        'The percentage of scroll position to display the roll button',
+        'The percentage of scroll position to display the scroll button',
docs/!sample/ui/mdx/codeblock.mdx (2)

27-27: Grammar – use “an MDX”

Indefinite-article nitpick.

-This is a MDX component to be used with [Rehype Code](/docs/headless/mdx/rehype-code) to display highlighted codeblocks.
+This is an MDX component to be used with [Rehype Code](/docs/headless/mdx/rehype-code) to display highlighted codeblocks.

75-75: Missing determiner

Add “the” for smoother reading.

-Specify a custom icon by passing an `icon` prop to `CodeBlock` component.
+Specify a custom icon by passing an `icon` prop to the `CodeBlock` component.
docs/!sample/headless/utils/git-last-edit.mdx (2)

8-8: Grammar tweak

Insert the definite article.

-Pass your repository name, and the path to file.
+Pass your repository name and the path to the file.

21-24: Consistent “GitHub” casing

Maintain brand-correct capitalization throughout.

-### Github Token
-Notice that you may easily reach the rate limit in development mode. Hence, you
-should pass a Github token for a higher rate limit.
+### GitHub Token
+Notice that you may easily reach the rate limit in development mode. Hence, you
+should pass a GitHub token for a higher rate limit.
docs/!sample/ui/components/banner.mdx (1)

35-50: Optional: diversify sample rainbow colours

Several identical rgba(255,100,0,0.5) entries defeat the purpose of a rainbow example. Consider using seven distinct hues for clarity.

docs/!sample/ui/layouts/home-layout.mdx (1)

35-35: Fix grammatical issues for better readability.

The line contains grammatical and punctuation issues that should be corrected.

Apply this diff to fix the grammar and punctuation:

-We recommend to customise it from [`baseOptions`](/docs/ui/navigation/links).
+We recommend customising it from [`baseOptions`](/docs/ui/navigation/links).
docs/!sample/cli/index.mdx (1)

32-32: Fix missing article for better readability.

The sentence is missing the definite article "the" before "component".

Apply this diff to improve readability:

-The CLI fetches the latest version of component from the GitHub repository of Fumadocs.
+The CLI fetches the latest version of the component from the GitHub repository of Fumadocs.
docs/!sample/ui/search/index.mdx (2)

8-8: Minor grammar improvement needed.

Consider adding the article "the" before "root provider" for better readability.

-You can customise some configurations from root provider.
+You can customise some configurations from the root provider.

64-64: Minor grammar improvement for community section.

Consider adding the article "the" before "community" for better readability.

-A list of integrations maintained by community.
+A list of integrations maintained by the community.
docs/!sample/ui/(integrations)/openapi/media-adapters.mdx (1)

13-13: Minor grammar improvement needed.

Consider adding the article "the" before "use client" directive for better readability.

-Put your media adapters in a separate file with `use client` directive.
+Put your media adapters in a separate file with the `use client` directive.
docs/!sample/ui/components/github-info.mdx (1)

20-20: Fix minor grammar issue.

The sentence is missing the article "the" before "links option".

-It's recommended to add it to your docs layout with `links` option:
+It's recommended to add it to your docs layout with the `links` option:
docs/!sample/ui/components/dynamic-codeblock.mdx (2)

18-18: Fix verb agreement issue.

The verb "use" should be "uses" to agree with the singular subject "it".

-It highlights the code with Shiki and use the default component to render it.
+It highlights the code with Shiki and uses the default component to render it.

22-23: Fix sentence fragments and missing article.

The features list has grammatical issues that should be corrected for better readability.

-- Can be pre-rendered on server
-- load languages and themes on browser lazily
+- Can be pre-rendered on the server
+- Loads languages and themes on the browser lazily
docs/!sample/ui/layouts/root-provider.mdx (2)

27-27: Fix missing article in documentation.

The sentence lacks the definite article "the" before "search".

-Customize or disable the search dialog with `search` option.
+Customize or disable the search dialog with the `search` option.

43-44: Fix inconsistent word usage and missing article.

There are two issues: mixing "customise" and "customize" variants, and missing "the" before "theme".

-Fumadocs supports light/dark modes with [`next-themes`](https://github.com/pacocoursey/next-themes).
-Customise or disable it with `theme` option.
+Fumadocs supports light/dark modes with [`next-themes`](https://github.com/pacocoursey/next-themes).
+Customize or disable it with the `theme` option.
docs/!sample/headless/components/sidebar.mdx (1)

6-7: Fix missing article in description.

The sentence needs "the" before "scroll bar" for proper grammar.

-A sidebar component which handles device resizing and removes scroll bar
-automatically.
+A sidebar component which handles device resizing and removes the scroll bar
+automatically.
docs/!sample/ui/(integrations)/open-graph.mdx (1)

8-8: Fix grammar: Use "a" instead of "an" before "useful".

The static analysis tool correctly identified a grammar error.

-Next.js provides an useful set of utilities, allowing a flexible experience with Fumadocs.
+Next.js provides a useful set of utilities, allowing a flexible experience with Fumadocs.
docs/!sample/headless/internationalization.mdx (1)

40-40: Fix preposition: Use "to" instead of "on" with "attention".

The static analysis tool correctly identified an incorrect preposition usage.

-This may cause undesired cache problems, and need to pay extra attention on SEO to ensure search engines can index your pages correctly.
+This may cause undesired cache problems, and need to pay extra attention to SEO to ensure search engines can index your pages correctly.
docs/!sample/ui/components/tabs.client.tsx (1)

8-21: Consider using popstate events instead of polling for URL changes.

The current implementation polls every 100ms which is inefficient. URL changes can be detected more efficiently using browser events.

export function UrlBar() {
  const [url, setUrl] = useState('');
  useEffect(() => {
-    const timer = setInterval(() => {
+    const updateUrl = () => {
      setUrl(window.location.pathname + window.location.hash);
-    }, 100);
+    };
+    
+    updateUrl(); // Set initial value
+    window.addEventListener('popstate', updateUrl);
+    window.addEventListener('hashchange', updateUrl);

    return () => {
-      clearInterval(timer);
+      window.removeEventListener('popstate', updateUrl);
+      window.removeEventListener('hashchange', updateUrl);
    };
  }, []);

  return <pre className="bg-card rounded-lg border p-2 text-sm">{url}</pre>;
}
docs/!sample/headless/mdx/remark-ts2js.mdx (1)

88-88: Fix missing line number annotation.

The line number annotation (88~) is missing, which is inconsistent with the rest of the file's formatting.

Apply this diff to fix the formatting:

-```
+88~
docs/!sample/ui/(integrations)/feedback.mdx (2)

8-8: Fix subject-verb agreement.

Apply this diff to correct the grammar:

-Feedback is crucial for knowing what your reader thinks, and help you to further improve documentation content.
+Feedback is crucial for knowing what your reader thinks, and helps you to further improve documentation content.

50-51: Improve grammar and clarity.

Apply this diff to fix the grammar issues:

-On above example, it reports user feedback by capturing a `on_rate_docs` event on PostHog.
+In the above example, it reports user feedback by capturing an `on_rate_docs` event on PostHog.
docs/!sample/ui/markdown/math.mdx (2)

14-14: Fix verb form error.

Apply this diff to correct the grammar:

-Add the required remark/rehype plugins, the code might be vary depending on your content source.
+Add the required remark/rehype plugins, the code might vary depending on your content source.

32-32: Improve grammar and article usage.

Apply this diff to fix the grammar issues:

-Add the following to root layout to make it looks great:
+Add the following to the root layout to make it look great:
docs/!sample/ui/(integrations)/openapi/index.mdx (3)

28-28: Add missing article “the”.

Minor grammar tweak for smoother reading.

-Fumadocs OpenAPI renders the pages on server-side.
+Fumadocs OpenAPI renders the pages on the server side.

45-45: Remove superfluous comma after “Components”.

The comma breaks the flow of the sentence.

-Add `APIPage` to your MDX Components, so that you can use it in MDX files.
+Add `APIPage` to your MDX Components so that you can use it in MDX files.

73-80: Await generateFiles to surface failures.

Swallowing the returned Promise hides I/O and schema-validation errors.
Top-level await is fully supported in ESM .mjs scripts.

-void generateFiles({
+await generateFiles({
docs/!sample/ui/layouts/notebook.mdx (1)

6-6: Use more descriptive alternative text for images.

Current alt text repeats the filename and isn’t helpful for screen-reader users.
Consider something like “Screenshot of the Notebook layout” instead.

-![Notebook](/docs/notebook.png)
+![Screenshot of the Notebook layout](/docs/notebook.png)

Apply the same approach to the other screenshots.

Also applies to: 39-39, 64-64

docs/!sample/headless/mdx/headings.mdx (1)

8-9: Capitalise the acronym “IDs”.

-Applies ids to headings.
+Applies IDs to headings.
docs/!sample/ui/search/algolia.mdx (2)

10-11: Consider adding a comma for improved clarity.

Adding a comma after "generally" would improve readability and flow.

-While generally we recommend building your own search with their client-side
+While generally, we recommend building your own search with their client-side

30-30: Consider adding the missing article.

Adding "the" before "search server" would improve grammatical correctness.

-Configure [Tag Filter](/docs/headless/search/algolia#tag-filter) on search server and add the following:
+Configure [Tag Filter](/docs/headless/search/algolia#tag-filter) on the search server and add the following:
docs/!sample/ui/search/fetch.tsx (1)

38-38: Consider using a more robust check for empty results.

The hardcoded string comparison with 'empty' could be fragile if the API contract changes.

Consider using a more explicit check:

-<SearchDialogList items={query.data !== 'empty' ? query.data : null} />
+<SearchDialogList items={query.data && query.data !== 'empty' ? query.data : null} />

Or if possible, use a constant or enum for the empty state to make the contract more explicit.

docs/!sample/ui/navigation/links.mdx (1)

188-188: Add missing article for grammatical correctness.

Adding "a" before "navigation menu" would improve readability.

-In Home Layout, you can add navigation menu (fully animated) to the navbar.
+In Home Layout, you can add a navigation menu (fully animated) to the navbar.
docs/!sample/ui/components/tabs.mdx (1)

98-98: Add missing article for better readability.

Adding "the" before "HTML" would improve grammatical flow.

-Use HTML `id` attribute to link to a specific tab.
+Use the HTML `id` attribute to link to a specific tab.
docs/!sample/ui/(integrations)/python.mdx (1)

6-8: Fix typo in Callout title and wording for clarity

Experiemntal is miss-spelled and “use it in caution” is unidiomatic.

-<Callout type="warn" title="Experiemntal">
-  Support for Python docgen is still experimental, please use it in caution.
+<Callout type="warn" title="Experimental">
+  Support for Python doc-gen is still experimental—please use it with caution.
</Callout>
docs/!sample/ui/(integrations)/openapi/proxy.mdx (1)

19-21: Minor grammar – add missing article

“Create a route handler for proxy server.

-Create a route handler for proxy server.
+Create a route handler for **the** proxy server.

Tiny tweak but reads more naturally.

docs/!sample/ui/search/.shared.mdx (1)

30-38: Optional: wrap <Provider> once per tree

If the root layout already provides other context providers, make sure the new Provider is only mounted once. Nesting multiple instances (e.g. in nested layouts) will override the search dialog recursively and can create extra renders.

No code change required—just something to double-check in larger apps.

docs/!sample/headless/mdx/rehype-code.mdx (2)

25-26: Typo – “codeblock” → “code block”

-A codeblock wrapped in `<pre />` element.
+A code block wrapped in a `<pre>` element.

53-56: Clarify React rendering caveat

The comment about dangerouslySetInnerHTML might alarm newcomers. A short hint that Fumadocs UI already handles this internally—or showing a minimal example—would prevent misuse.

Consider appending:

When using the default Fumadocs UI components the icon HTML is rendered safely for you; only customise this if you replace the default code component.

docs/!sample/headless/components/breadcrumb.mdx (1)

46-66: Minor accessibility touch-up

The breadcrumb separator <ChevronRight> is decorative; add aria-hidden="true" to prevent it from being announced by screen readers.

-<ChevronRight className="size-4 shrink-0 rtl:rotate-180" />
+<ChevronRight aria-hidden="true" className="size-4 shrink-0 rtl:rotate-180" />
docs/!sample/headless/mdx/structure.mdx (2)

21-23: Use “an MDX” instead of “a MDX”.

Small article mismatch.

- write your own plugin to convert it into a MDX export.
+ You can write your own plugin to convert it into an MDX export.

33-34: Preposition & missing article.

- Paragraphs will be extracted to the `contents` array, each item contains a `heading` prop indicating the heading of paragraph.
+ Paragraphs will be extracted into the `contents` array; each item contains a `heading` prop indicating the heading of the paragraph.
docs/!sample/headless/components/toc.mdx (1)

6-6: Missing hyphen in “auto-scroll”.

- A Table of Contents with active anchor observer and auto scroll.
+ A Table of Contents with active anchor observer and auto-scroll.
docs/!sample/headless/mdx/remark-image.mdx (2)

29-30: Subject-verb agreement.

- ...into Next.js Image usage, and add required props like `width` and `height`.
+ ...into a Next.js Image usage, and adds required props such as `width` and `height`.

64-64: Missing article.

- Where `./public/hello.png` points to the image in public directory.
+ Where `./public/hello.png` points to the image in the public directory.
docs/!sample/ui/markdown/mermaid.mdx (3)

6-6: Comma splice & clarity.

Consider splitting into two sentences for readability:

- Fumadocs doesn't have a built-in Mermaid wrapper provided, we recommend using `mermaid` directly.
+ Fumadocs does not ship with a built-in Mermaid wrapper. We recommend using the `mermaid` package directly.

10-11: Preposition tweak.

- Install the required dependencies, `next-themes` is used with Fumadocs to manage the light/dark mode.
+ Install the required dependencies; `next-themes` is used by Fumadocs to manage light/dark mode.

24-26: Article “an MDX”.

- Add the component as a MDX component:
+ Add the component as an MDX component:
docs/!sample/mdx/mdx.mdx (1)

10-11: Broken anchor in link.

The collection-config link uses #mdxoptions (missing hyphen) whereas the global link uses #mdx-options. Update for consistency:

- You can customise it on [Global Config](/docs/mdx/global#mdx-options) or [Collection Config](/docs/mdx/collections#mdxoptions).
+ You can customise it on [Global Config](/docs/mdx/global#mdx-options) or [Collection Config](/docs/mdx/collections#mdx-options).
docs/!sample/ui/markdown/twoslash.mdx (2)

52-56: Clarify heading and grammar for style-import section

The phrase “Add styles, Tailwind CSS v4 is required.” is a bit abrupt and misses a determiner, which may confuse readers skimming the guide.

-Add styles, Tailwind CSS v4 is required.
+Add the styles – Tailwind CSS v4 is required.

127-133: Minor wording tweak for cache section

Insert the definite article for smoother reading.

-You can enable filesystem cache with `typesCache` option:
+You can enable a filesystem cache with the `typesCache` option:
docs/!sample/ui/navigation/sidebar.mdx (1)

58-60: Article missing before “opened tab”

-Sidebar Tabs are folders with tab-like behaviours, only the content of opened tab will be visible.
+Sidebar Tabs are folders with tab-like behaviour; only the content of the opened tab will be visible.
docs/!sample/headless/index.mdx (1)

60-64: Fix plural-noun article mismatch

-It offers simple document searching as well as components for building a good docs.
+It offers simple document searching as well as components for building good docs.
docs/!sample/mdx/collections.mdx (1)

71-74: Replace “hence” conjunction misuse

“Hence” alone can read awkwardly mid-sentence; use “therefore” or break into two clauses.

-Note that the validation is done at build time, hence the output must be serializable.
+Note that validation is done at build time; therefore, the output must be serializable.
docs/!sample/mdx/async.mdx (1)

80-80: Grammar nit ‑ plural & article usage

“better capability to handle massive amount” sounds off.
Suggested tweak for smoother reading:

- which usually have better capability to handle massive amount of content to index.
+ which usually have better capabilities to handle a massive amount of content to index.
docs/!sample/headless/search/orama-cloud.mdx (2)

28-28: Missing definite article

“from dashboard” → should be “from the dashboard”.

- using the private API key and index ID from dashboard,
+ using the private API key and index ID from the dashboard,

68-69: Consistent article usage

Both occurrences read more naturally with “the”:

- 1. Create a Crawler index from dashboard,
+ 1. Create a Crawler index from the dashboard,

- 2. Copy the public API key and index ID from dashboard
+ 2. Copy the public API key and index ID from the dashboard
docs/!sample/ui/comparisons.mdx (2)

12-13: Capitalisation after comma

The pronoun “It” mid-sentence shouldn’t be capitalised:

- As a result, It provides many server-side functions,
+ As a result, it provides many server-side functions,

66-66: Article + plural noun mismatch

“For a simple docs” → either “For simple docs” or “For a simple doc site”.

- For a simple docs, Docusaurus might be a better choice
+ For simple docs, Docusaurus might be a better choice
docs/!sample/ui/layouts/docs.mdx (4)

6-6: Run-on sentence

Consider splitting for clarity:

- The layout of documentation pages, it includes a sidebar and mobile-only navbar.
+ The Docs Layout includes a sidebar and a mobile-only navbar for documentation pages.

53-55: Verb form after “recommend”

Use gerund/infinitive:

- we recommend to customise it from `baseOptions`.
+ we recommend customising it via `baseOptions`.

120-120: Missing article

- into appropriate position.
+ into the appropriate position.

135-136: Preposition choice

appears in the browser viewport reads better than “into”.

- appears into the browser viewport,
+ appears in the browser viewport,
docs/!sample/mdx/performance.mdx (1)

40-41: Minor style – “files” already implies plural

You could drop the second “+”:

- handle nearly 500+ files
+ handle nearly 500 files
docs/!sample/headless/page-tree.mdx (4)

6-10: Grammar & clarity tweaks improve readability

Several minor issues make the intro harder to parse (article “the”, verb form, plural).

-Page tree is a tree structure that describes all navigation links, with other items like separator and folders.
-It will be sent to the client and being referenced in navigation elements including the sidebar and breadcrumb.
-Hence, you shouldn't store any sensitive or large data in page tree.
+The page-tree is a hierarchical structure that describes all navigation links, along with items such as separators and folders.
+It is sent to the client and referenced by navigation elements, including the sidebar and breadcrumb.
+Therefore, you shouldn't store any sensitive or large data in the page-tree.

13-17: Fix missing article & preposition

-By design, page tree only contains necessary information of all pages and folders.
-Unserializable data such as functions can't be passed to page tree.
+By design, the page-tree only contains the necessary information about all pages and folders.
+Unserializable data such as functions can't be passed to the page-tree.

50-51: Capitalise acronym

“urls” → “URLs”.

-> External urls are also supported
+> External URLs are also supported

90-91: Article missing before “ReactElement”

-Icon is a `ReactElement`, supported by pages and folders.
+An icon is a `ReactElement`, supported by pages and folders.
docs/!sample/ui/index.mdx (4)

54-56: Add missing verb & clarify version notice

-A minimum version of Node.js 18 required, note that Node.js 23.1 might have problems with Next.js production build.
+A minimum Node.js version of 18 **is** required. Note that Node.js 23.1 (preview) might have problems with the Next.js production build.

76-80: Subject/verb agreement

-- the React.js framework to use (the docs is only written for Next.js).
-- the content source to use.
+- the React.js framework to use (the docs **are** only written for Next.js).
+- the content source to use.

166-167: Missing article

-...remove the original MDX file from content directory (`/content/docs`).
+...remove the original MDX file from the content directory (`/content/docs`).

201-203: Polish welcome sentence

-New to here? Don't worry, we are welcome for your questions.
+New here? Don't worry, we welcome your questions.
docs/!sample/ui/(integrations)/openapi/configurations.mdx (3)

42-44: Clarify sentence & add article

-> Operation in OpenAPI schema refers to an API endpoint with specific method like `/api/weather:GET`.
+> An *operation* in an OpenAPI schema refers to an API endpoint with a specific method, such as `/api/weather:GET`.

225-226: Preposition

-Customise components in the page.
+Customise components on the page.

260-260: Use “a URL”

-...if given an URL.
+...if given a URL.
docs/!sample/headless/search/orama.mdx (5)

6-7: Comma splice & capitalisation

-Fumadocs supports document search with Orama, It is the default but also the recommended option since it can be self-hosted and totally free.
+Fumadocs supports document search with Orama. It is the default—and recommended—option because it can be self-hosted and is totally free.

42-43: Word choice

-Index with the raw content of document (unrecommended).
+Index with the raw content of the document (not recommended).

86-87: Comma splice

-Support filtering results by tag, it's useful for implementing multi-docs similar to this documentation.
+You can filter results by tag—useful for implementing multi-docs similar to this documentation.

203-205: Missing article

-To work with Next.js static export, use `staticGET` from search server.
+To work with Next.js static export, use `staticGET` from the search server.

245-245: Plural noun

-You can host the search server on other backend such as Express and Elysia.
+You can host the search server on other backends, such as Express or Elysia.
docs/!sample/headless/mdx/install.mdx (1)

51-55: Table description could be clearer

Consider expanding the second column header so readers know what to supply:

-| Component |                                    |
-| --------- | ---------------------------------- |
-| Tabs      | Accepts an array of item (`items`) |
-| Tab       | Accepts the name of item (`value`) |
+| Component | Required props / description                     |
+| --------- | ----------------------------------------------- |
+| Tabs      | `items`: string[] – list of tab labels          |
+| Tab       | `value`: string – label matching one `items` entry |
docs/!sample/headless/custom-source.mdx (3)

14-14: Improve phrasing for clarity

“examples to use Fumadocs” reads awkwardly. Prefer “examples of using Fumadocs” (or similar) to keep the sentence idiomatic.

-You can see examples to use Fumadocs with a CMS, which allows a nice experience on publishing content, and real-time update without re-building the app.
+You can see examples of using Fumadocs with a CMS, which provides a pleasant publishing experience and real-time updates without rebuilding the app.

61-63: Add missing determiners

Both occurrences lack the required article.

-In the main body of page, find the corresponding page according to the slug and render its content inside the `DocsPage` component.
-You also need table of contents, which can be generated with your own implementation, or using the [`getTableOfContents`](/docs/headless/utils/get-toc) utility (Markdown/MDX only).
+In the main body of the page, find the corresponding page by its slug and render its content inside the `DocsPage` component.
+You also need a table of contents, which can be generated with your own implementation or by using the [`getTableOfContents`](/docs/headless/utils/get-toc) utility (Markdown/MDX only).

84-84: Minor grammar fixes

  1. “similar as” → “similar to”
  2. “think it as” → “think of it as”
  3. “there’s some limitations” → “there are some limitations”
-generateMetadata` (similar as the code above).
+generateMetadata` (similar to the code above).

-You can think it as a `next-mdx-remote` with built-in plugins for Fumadocs.
+You can think of it as a `next-mdx-remote` with built-in plugins for Fumadocs.

-Since it doesn't use a bundler, there's some limitations:
+Since it doesn't use a bundler, there are some limitations:

Also applies to: 98-98, 107-107

docs/!sample/headless/content-collections/index.mdx (1)

89-90: Insert missing comma after an introductory phrase

A short pause improves readability.

-To use components from other packages like Fumadocs UI, pass them to your `<MDXContent />` component.
+To use components from other packages, like Fumadocs UI, pass them to your `<MDXContent />` component.
docs/!sample/headless/search/trieve.mdx (1)

60-63: Missing preposition breaks sentence flow

Add “to” after “script” for grammatical correctness.

-Create a script, the `sync` function will sync search indexes.
+Create a script to run the `sync` function that will synchronise the search indexes.
docs/!sample/headless/source-api.mdx (1)

80-83: Minor grammar & clarity

“it fallbacks” → “it falls back”.

-When looking for a page, it fallbacks to default locale
+When looking for a page, it falls back to the default locale
docs/!sample/mdx/index.mdx (4)

9-10: Polish the intro sentences for concision & grammar

Minor wording fixes improve readability and remove a comma-splice.

-It provides the tool for Next.js to transform content into type-safe data, similar to Content Collections.
-This library is made for Next.js, you can use it to handle blog and other contents.
+It provides a tool for Next.js to transform content into type-safe data, similar to Content Collections.
+This library is designed for Next.js; you can use it to handle blogs and other content.

43-45: Plural-agreement typo

“type of files” → “types of files”.

-**Collection** refers to a collection containing a certain type of files.
+**Collection** refers to a collection containing certain types of files.

47-48: Quote-style consistency in Tabs list

Mixed single and double quotes may trip some ESLint configs.

-<Tabs items={["doc", "meta", 'docs']}>
+<Tabs items={['doc', 'meta', 'docs']}>

117-133: Tighten wording & add missing determiners

Run-on sentence and missing “the” before .source folder.

-A `.source` folder is generated in the root directory when you run `next dev` or `next build`. It contains all output data and types, you should add it to `.gitignore`.
+A `.source` folder is generated in the project root when you run `next dev` or `next build`. It contains all output data and types, and you should add it to the `.gitignore` file.

-The `fumadocs-mdx` command also generates types for `.source` folder.
+The `fumadocs-mdx` command also generates types for the `.source` folder.

-You can access the collection output from `.source` folder with its original name:
+You can access the collection output from the `.source` folder with its original name:
docs/!sample/ui/internationalization.mdx (1)

10-12: Minor comma insertion for readability

-Fumadocs is not a full-powered i18n library, it's up to you when implementing i18n for Next.js part.
+Fumadocs is not a full-powered i18n library, so it's up to you to implement i18n for the Next.js part.
docs/!sample/headless/page-conventions.mdx (7)

6-10: Tighten grammar in Callout copy

Minor grammatical nits that make the sentence flow better:

-    This guide only applies for content sources that uses `loader()` API, such as Fumadocs MDX.
+    This guide only applies to content sources that use the `loader()` API, such as Fumadocs MDX.

14-16: Missing comma → readability

Add a comma after the parenthetical phrase to prevent the clause from running on:

-While Next.js handles routing, Fumadocs generates **page slugs** and **sidebar items** (page tree) from your content directory using [`loader()`](/docs/headless/source-api).
+While Next.js handles routing, Fumadocs generates **page slugs** and **sidebar items** (page tree) from your content directory, using [`loader()`](/docs/headless/source-api).

25-29: “An MDX file”, not “A MDX file”

-A [MDX](https://mdxjs.com) or Markdown file, you can customise its frontmatter.
+An [MDX](https://mdxjs.com) or Markdown file—you can customise its front-matter.

63-66: Split run-on sentence in “Folder” section

-Organize multiple pages, you can create a [Meta file](#meta) to customise folders.
+Organize multiple pages into folders.  
+You can create a [Meta file](#meta) (`meta.json`) to customise a folder.

68-70: Add missing determiner

-By default, putting a file into folder will change its slugs.
+By default, putting a file into a folder will change its slugs.

145-152: Article before “icon”

-Use the syntax `[Text](url)` to insert links, or `[Icon][Text](url)` to add icon.
+Use the syntax `[Text](url)` to insert links, or `[Icon][Text](url)` to add an icon.

156-161: “At runtime”, not “in runtime”

-Since Fumadocs doesn't include an icon library, you have to convert the icon names to JSX elements in runtime, and render it as a component.
+Since Fumadocs doesn't include an icon library, you have to convert icon names to JSX elements at runtime and render them as components.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8da5e5e and ba9f105.

⛔ Files ignored due to path filters (12)
  • docs/public/docs/ai-search.png is excluded by !**/*.png
  • docs/public/docs/docs-nav.png is excluded by !**/*.png
  • docs/public/docs/nav-layout-docs.png is excluded by !**/*.png
  • docs/public/docs/nav-layout-home.png is excluded by !**/*.png
  • docs/public/docs/nav-layout-menu.png is excluded by !**/*.png
  • docs/public/docs/notebook-nav-mode.png is excluded by !**/*.png
  • docs/public/docs/notebook-tab-mode.png is excluded by !**/*.png
  • docs/public/docs/notebook.png is excluded by !**/*.png
  • docs/public/docs/sidebar-tabs.png is excluded by !**/*.png
  • docs/public/docs/sidebar.png is excluded by !**/*.png
  • docs/public/docs/webhook.png is excluded by !**/*.png
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (107)
  • docs/!sample/cli/index.mdx (1 hunks)
  • docs/!sample/cli/meta.json (1 hunks)
  • docs/!sample/headless/components/breadcrumb.mdx (1 hunks)
  • docs/!sample/headless/components/index.mdx (1 hunks)
  • docs/!sample/headless/components/link.mdx (1 hunks)
  • docs/!sample/headless/components/meta.json (1 hunks)
  • docs/!sample/headless/components/sidebar.mdx (1 hunks)
  • docs/!sample/headless/components/toc-example.tsx (1 hunks)
  • docs/!sample/headless/components/toc.mdx (1 hunks)
  • docs/!sample/headless/content-collections/index.mdx (1 hunks)
  • docs/!sample/headless/custom-source.mdx (1 hunks)
  • docs/!sample/headless/index.mdx (1 hunks)
  • docs/!sample/headless/internationalization.mdx (1 hunks)
  • docs/!sample/headless/mdx/headings.mdx (1 hunks)
  • docs/!sample/headless/mdx/index.mdx (1 hunks)
  • docs/!sample/headless/mdx/install.mdx (1 hunks)
  • docs/!sample/headless/mdx/meta.json (1 hunks)
  • docs/!sample/headless/mdx/rehype-code.mdx (1 hunks)
  • docs/!sample/headless/mdx/remark-admonition.mdx (1 hunks)
  • docs/!sample/headless/mdx/remark-image.mdx (1 hunks)
  • docs/!sample/headless/mdx/remark-ts2js.mdx (1 hunks)
  • docs/!sample/headless/mdx/structure.mdx (1 hunks)
  • docs/!sample/headless/meta.json (1 hunks)
  • docs/!sample/headless/page-conventions.mdx (1 hunks)
  • docs/!sample/headless/page-tree.mdx (1 hunks)
  • docs/!sample/headless/props.ts (1 hunks)
  • docs/!sample/headless/search/algolia.mdx (1 hunks)
  • docs/!sample/headless/search/index.mdx (1 hunks)
  • docs/!sample/headless/search/orama-cloud.mdx (1 hunks)
  • docs/!sample/headless/search/orama.mdx (1 hunks)
  • docs/!sample/headless/search/sync-algolia.mjs (1 hunks)
  • docs/!sample/headless/search/trieve.mdx (1 hunks)
  • docs/!sample/headless/source-api.mdx (1 hunks)
  • docs/!sample/headless/utils/find-neighbour.mdx (1 hunks)
  • docs/!sample/headless/utils/get-toc.mdx (1 hunks)
  • docs/!sample/headless/utils/git-last-edit.mdx (1 hunks)
  • docs/!sample/headless/utils/index.mdx (1 hunks)
  • docs/!sample/headless/utils/meta.json (1 hunks)
  • docs/!sample/mdx/async.mdx (1 hunks)
  • docs/!sample/mdx/collections.mdx (1 hunks)
  • docs/!sample/mdx/global.mdx (1 hunks)
  • docs/!sample/mdx/include.mdx (1 hunks)
  • docs/!sample/mdx/index.mdx (1 hunks)
  • docs/!sample/mdx/last-modified.mdx (1 hunks)
  • docs/!sample/mdx/mdx.mdx (1 hunks)
  • docs/!sample/mdx/meta.json (1 hunks)
  • docs/!sample/mdx/page.mdx (1 hunks)
  • docs/!sample/mdx/performance.mdx (1 hunks)
  • docs/!sample/mdx/plugin.mdx (1 hunks)
  • docs/!sample/mdx/props.ts (1 hunks)
  • docs/!sample/ui/(integrations)/feedback.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/get-llm-text.ts (1 hunks)
  • docs/!sample/ui/(integrations)/llms.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/llms.mdx.ts (1 hunks)
  • docs/!sample/ui/(integrations)/llms.txt.ts (1 hunks)
  • docs/!sample/ui/(integrations)/open-graph.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/openapi/configurations.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/openapi/index.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/openapi/media-adapters.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/openapi/meta.json (1 hunks)
  • docs/!sample/ui/(integrations)/openapi/proxy.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/python.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/rss.mdx (1 hunks)
  • docs/!sample/ui/(integrations)/typescript.mdx (1 hunks)
  • docs/!sample/ui/comparisons.mdx (1 hunks)
  • docs/!sample/ui/components/accordion.mdx (1 hunks)
  • docs/!sample/ui/components/auto-type-table.mdx (1 hunks)
  • docs/!sample/ui/components/banner.mdx (1 hunks)
  • docs/!sample/ui/components/dynamic-codeblock.mdx (1 hunks)
  • docs/!sample/ui/components/files.mdx (1 hunks)
  • docs/!sample/ui/components/github-info.mdx (1 hunks)
  • docs/!sample/ui/components/image-zoom.mdx (1 hunks)
  • docs/!sample/ui/components/index.mdx (1 hunks)
  • docs/!sample/ui/components/inline-toc.mdx (1 hunks)
  • docs/!sample/ui/components/server-codeblock.tsx (1 hunks)
  • docs/!sample/ui/components/steps.mdx (1 hunks)
  • docs/!sample/ui/components/tabs.client.tsx (1 hunks)
  • docs/!sample/ui/components/tabs.mdx (1 hunks)
  • docs/!sample/ui/components/type-table.mdx (1 hunks)
  • docs/!sample/ui/customisation.mdx (1 hunks)
  • docs/!sample/ui/index.mdx (1 hunks)
  • docs/!sample/ui/internationalization.mdx (1 hunks)
  • docs/!sample/ui/layouts/docs.mdx (1 hunks)
  • docs/!sample/ui/layouts/home-layout.mdx (1 hunks)
  • docs/!sample/ui/layouts/notebook.mdx (1 hunks)
  • docs/!sample/ui/layouts/page.mdx (1 hunks)
  • docs/!sample/ui/layouts/root-provider.mdx (1 hunks)
  • docs/!sample/ui/manual-installation.mdx (1 hunks)
  • docs/!sample/ui/markdown/index.mdx (1 hunks)
  • docs/!sample/ui/markdown/math.mdx (1 hunks)
  • docs/!sample/ui/markdown/mermaid.mdx (1 hunks)
  • docs/!sample/ui/markdown/twoslash.mdx (1 hunks)
  • docs/!sample/ui/mdx/codeblock.mdx (1 hunks)
  • docs/!sample/ui/mdx/index.mdx (1 hunks)
  • docs/!sample/ui/navigation/index.mdx (1 hunks)
  • docs/!sample/ui/navigation/links.mdx (1 hunks)
  • docs/!sample/ui/navigation/sidebar.mdx (1 hunks)
  • docs/!sample/ui/page-conventions.mdx (1 hunks)
  • docs/!sample/ui/search/.shared.mdx (1 hunks)
  • docs/!sample/ui/search/.tag-filter.mdx (1 hunks)
  • docs/!sample/ui/search/algolia.mdx (1 hunks)
  • docs/!sample/ui/search/algolia.tsx (1 hunks)
  • docs/!sample/ui/search/fetch.tsx (1 hunks)
  • docs/!sample/ui/search/index.mdx (1 hunks)
  • docs/!sample/ui/search/meta.json (1 hunks)
  • docs/!sample/ui/search/orama-cloud.mdx (1 hunks)
  • docs/!sample/ui/search/orama-cloud.tsx (1 hunks)
⛔ Files not processed due to max files limit (32)
  • docs/!sample/ui/search/orama.mdx
  • docs/!sample/ui/search/static.tsx
  • docs/!sample/ui/static-export.mdx
  • docs/!sample/ui/theme.mdx
  • docs/!sample/ui/versioning.mdx
  • docs/!sample/ui/what-is-fumadocs.mdx
  • docs/.cursorrules
  • docs/.eslintrc.json
  • docs/.gitignore
  • docs/.source/source.config.mjs
  • docs/README.md
  • docs/content/docs/client/index.mdx
  • docs/content/docs/client/installation.mdx
  • docs/content/docs/client/meta.json
  • docs/content/docs/framework/concepts.mdx
  • docs/content/docs/framework/context-and-middleware.mdx
  • docs/content/docs/framework/example-apps.mdx
  • docs/content/docs/framework/getting-started.mdx
  • docs/content/docs/framework/index.mdx
  • docs/content/docs/framework/installation.mdx
  • docs/content/docs/framework/meta.json
  • docs/content/docs/framework/procedures.mdx
  • docs/content/docs/framework/quickstart.mdx
  • docs/content/docs/framework/routers.mdx
  • docs/content/docs/framework/tanstack-react-query.mdx
  • docs/content/docs/framework/videos-and-community-resources.mdx
  • docs/content/docs/index.mdx
  • docs/content/docs/meta.json
  • docs/content/docs/server/authorization.mdx
  • docs/content/docs/server/caching.mdx
  • docs/content/docs/server/context.mdx
  • docs/content/docs/server/data-transformers.mdx
🧰 Additional context used
🧠 Learnings (4)
docs/!sample/headless/mdx/remark-ts2js.mdx (1)
Learnt from: juliusmarminge
PR: trpc/trpc#6262
File: examples/minimal-react/client/package.json:16-17
Timestamp: 2025-02-12T16:56:46.960Z
Learning: In examples and codemods targeting future versions, dependencies may intentionally use upcoming versions (e.g., React v19) or `next` tags, even if those versions haven't been officially released yet.
docs/!sample/ui/markdown/twoslash.mdx (1)
Learnt from: juliusmarminge
PR: trpc/trpc#6262
File: examples/minimal-react/client/package.json:16-17
Timestamp: 2025-02-12T16:56:46.960Z
Learning: In examples and codemods targeting future versions, dependencies may intentionally use upcoming versions (e.g., React v19) or `next` tags, even if those versions haven't been officially released yet.
docs/!sample/mdx/async.mdx (1)
Learnt from: juliusmarminge
PR: trpc/trpc#6262
File: examples/minimal-react/client/package.json:16-17
Timestamp: 2025-02-12T16:56:46.960Z
Learning: In examples and codemods targeting future versions, dependencies may intentionally use upcoming versions (e.g., React v19) or `next` tags, even if those versions haven't been officially released yet.
docs/!sample/ui/markdown/index.mdx (1)
Learnt from: juliusmarminge
PR: trpc/trpc#6262
File: examples/minimal-react/client/package.json:16-17
Timestamp: 2025-02-12T16:56:46.960Z
Learning: In examples and codemods targeting future versions, dependencies may intentionally use upcoming versions (e.g., React v19) or `next` tags, even if those versions haven't been officially released yet.
🧬 Code Graph Analysis (1)
docs/!sample/headless/components/toc-example.tsx (1)
docs/!sample/headless/props.ts (1)
  • TOCItemType (21-21)
🪛 LanguageTool
docs/!sample/headless/utils/find-neighbour.mdx

[uncategorized] ~11-~11: Possible missing article found.
Context: ... It requires a page tree and the url of page. ```ts import { pageTree } from '@/lib...

(AI_HYDRA_LEO_MISSING_THE)

docs/!sample/headless/utils/git-last-edit.mdx

[uncategorized] ~8-~8: You might be missing the article “the” here.
Context: ...s your repository name, and the path to file. ```ts import { getGithubLastEdit } fr...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/internationalization.mdx

[uncategorized] ~40-~40: The preposition “to” seems more likely in this position.
Context: ...oblems, and need to pay extra attention on SEO to ensure search engines can index ...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION)

docs/!sample/ui/components/accordion.mdx

[uncategorized] ~30-~30: You might be missing the article “the” here.
Context: ... to the page with the specified id in hash parameter. ```mdx <Accord...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~42-~42: Possible missing article found.
Context: ...dions> ``` > The value of accordion is same as title by default. When an id present...

(AI_HYDRA_LEO_MISSING_THE)

docs/!sample/headless/components/toc.mdx

[uncategorized] ~6-~6: It appears that a hyphen is missing (if ‘auto’ is not used in the context of ‘cars’).
Context: ...ontents with active anchor observer and auto scroll. ## Usage ```tsx import * as Base fro...

(AUTO_HYPHEN)

docs/!sample/ui/mdx/codeblock.mdx

[misspelling] ~27-~27: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...onfig); ``` This is a MDX component to be used with [Rehype C...

(EN_A_VS_AN)


[uncategorized] ~75-~75: You might be missing the article “the” here.
Context: ...ustom icon by passing an icon prop to CodeBlock component. By default, the i...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/markdown/math.mdx

[grammar] ~14-~14: There may an error in the verb form ‘be vary’.
Context: ...d remark/rehype plugins, the code might be vary depending on your content source. ```t...

(MD_BE_NON_VBP)


[uncategorized] ~32-~32: You might be missing the article “the” here.
Context: ...## Add Stylesheet Add the following to root layout to make it looks great: ```tsx ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~32-~32: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...the following to root layout to make it looks great: ```tsx title="layout.tsx" impor...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)

docs/!sample/mdx/plugin.mdx

[uncategorized] ~26-~26: You might be missing the article “the” here.
Context: ...atically re-generates the index file in .source folder, ensuring Next.js hot re...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/mdx/structure.mdx

[misspelling] ~22-~22: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...rite your own plugin to convert it into a MDX export. ### Options <AutoTypeTabl...

(EN_A_VS_AN)


[uncategorized] ~33-~33: The preposition “into” seems more likely in this position than the preposition “to”.
Context: ... contents. Paragraphs will be extracted to the contents array, each item contain...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_TO_INTO)


[uncategorized] ~34-~34: Possible missing article found.
Context: ...heading` prop indicating the heading of paragraph. A heading can h...

(AI_HYDRA_LEO_MISSING_THE)

docs/!sample/cli/index.mdx

[uncategorized] ~32-~32: Possible missing article found.
Context: ... The CLI fetches the latest version of component from the GitHub repository of Fumadocs....

(AI_HYDRA_LEO_MISSING_THE)

docs/!sample/ui/components/image-zoom.mdx

[uncategorized] ~24-~24: Possible missing comma found.
Context: ...ny)} />, ...components, }; } ``` Now image zoom will be automatically enable...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/!sample/ui/search/index.mdx

[uncategorized] ~8-~8: You might be missing the article “the” here.
Context: ... can customise some configurations from root provider. For example, to disable sear...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~10-~10: You might be missing the article “the” here.
Context: ...root provider. For example, to disable search UI: ```tsx title="app/layout.tsx" impo...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~64-~64: You might be missing the article “the” here.
Context: ...s A list of integrations maintained by community. - [Trieve Search](/docs/headless/sear...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/mdx/remark-image.mdx

[uncategorized] ~29-~29: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...est.png)into Next.js Image usage, and add required props likewidthandheight...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[uncategorized] ~64-~64: You might be missing the article “the” here.
Context: ...ublic/hello.png` points to the image in public directory. ### Example: Without Import...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/layouts/home-layout.mdx

[grammar] ~35-~35: The verb ‘recommend’ is used with the gerund form.
Context: ...layout.tsx" /> We recommend to customise it from [baseOptions](/docs/ui/naviga...

(ADMIT_ENJOY_VB)


[uncategorized] ~35-~35: A punctuation mark might be missing here.
Context: ...les> We recommend to customise it from baseOptions...

(AI_EN_LECTOR_MISSING_PUNCTUATION)

docs/!sample/ui/components/github-info.mdx

[uncategorized] ~20-~20: You might be missing the article “the” here.
Context: ...nded to add it to your docs layout with links option: ```tsx title="app/docs/l...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/(integrations)/openapi/index.mdx

[uncategorized] ~28-~28: You might be missing the article “the” here.
Context: .... Fumadocs OpenAPI renders the pages on server-side. ```ts title="lib/source.ts" impo...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[typographical] ~45-~45: The conjunction “so that” does not have a comma in front.
Context: ...`` Add APIPage to your MDX Components, so that you can use it in MDX files. ```tsx ti...

(SO_THAT_UNNECESSARY_COMMA)

docs/!sample/ui/components/dynamic-codeblock.mdx

[uncategorized] ~18-~18: This verb does not appear to agree with the subject. Consider using a different form.
Context: .... It highlights the code with Shiki and use the default component to render it. Fe...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[style] ~22-~22: To form a complete sentence, be sure to include a subject.
Context: ...t component to render it. Features: - Can be pre-rendered on server - load langua...

(MISSING_IT_THERE)


[uncategorized] ~23-~23: You might be missing the article “the” here.
Context: ...n server - load languages and themes on browser lazily #### Options ```tsx import { D...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/(integrations)/feedback.mdx

[uncategorized] ~8-~8: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...or knowing what your reader thinks, and help you to further improve documentation co...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[uncategorized] ~50-~50: The preposition “in” seems more likely in this position than the preposition “on”.
Context: ...}} /> ); } ``` On above example, it reports user feedback...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_ON_IN)


[uncategorized] ~51-~51: You might be missing the article “the” here.
Context: ... /> ); } ``` On above example, it reports user feedback by ca...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/search/orama-cloud.mdx

[uncategorized] ~28-~28: You might be missing the article “the” here.
Context: ...g the private API key and index ID from dashboard, create a script to sync search indexes...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~68-~68: You might be missing the article “the” here.
Context: ...Crawler 1. Create a Crawler index from dashboard, and configure it correctly with the "D...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~69-~69: You might be missing the article “the” here.
Context: ...py the public API key and index ID from dashboard ### Search Client Same as REST API in...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/components/steps.mdx

[typographical] ~53-~53: This greeting should probably end with a comma.
Context: ...assName='fd-steps [&_h3]:fd-step'> ### Hello World You no longer need to use the step com...

(EN_GREETING_WITHOUT_COMMA)

docs/!sample/ui/navigation/links.mdx

[uncategorized] ~188-~188: You might be missing the article “a” here.
Context: ...ation Menu In Home Layout, you can add navigation menu (fully animated) to the navbar. !...

(AI_EN_LECTOR_MISSING_DETERMINER_A)

docs/!sample/ui/(integrations)/open-graph.mdx

[misspelling] ~8-~8: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ... --- ## Introduction Next.js provides an useful set of utilities, allowing a fle...

(EN_A_VS_AN)

docs/!sample/ui/navigation/sidebar.mdx

[uncategorized] ~58-~58: Possible missing article found.
Context: ...ab-like behaviours, only the content of opened tab will be visible. <div className='f...

(AI_HYDRA_LEO_MISSING_AN)

docs/!sample/ui/layouts/root-provider.mdx

[uncategorized] ~27-~27: You might be missing the article “the” here.
Context: ...omize or disable the search dialog with search option. ```jsx <RootProvider ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~43-~43: Do not mix variants of the same word (‘customise’ and ‘customize’) within a single text.
Context: ...://github.com/pacocoursey/next-themes). Customise or disable it with theme option. ```...

(EN_WORD_COHERENCY)


[uncategorized] ~44-~44: You might be missing the article “the” here.
Context: ...t-themes). Customise or disable it with theme option. ```jsx <RootProvider t...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/(integrations)/openapi/proxy.mdx

[uncategorized] ~19-~19: You might be missing the article “the” here.
Context: ... ### Setup Create a route handler for proxy server. ```ts title="/api/proxy/route....

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/index.mdx

[grammar] ~62-~62: The plural noun “docs” cannot be used with the article “a”. Did you mean “a good doc” or “good docs”?
Context: ...hing as well as components for building a good docs. <Card title="Breadcrumb" ...

(A_NNS)

docs/!sample/mdx/collections.mdx

[typographical] ~73-~73: The word “hence” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...te that the validation is done at build time, hence the output must be serializable. You ca...

(THUS_SENTENCE)

docs/!sample/ui/(integrations)/openapi/media-adapters.mdx

[uncategorized] ~13-~13: You might be missing the article “the” here.
Context: ... media adapters in a separate file with use client directive. ```ts title="lib...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/comparisons.mdx

[grammar] ~66-~66: The plural noun “docs” cannot be used with the article “a”. Did you mean “a simple doc” or “simple docs”?
Context: ...ively more compared to Docusaurus. For a simple docs, Docusaurus might be a better choice if...

(A_NNS)

docs/!sample/headless/components/sidebar.mdx

[uncategorized] ~6-~6: You might be missing the article “the” here.
Context: ...ich handles device resizing and removes scroll bar automatically. ## Usage ```tsx im...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/markdown/twoslash.mdx

[uncategorized] ~51-~51: Possible missing preposition found.
Context: ...oslash(), ], }, }, }); ``` Add styles, Tailwind CSS v4 is required. `...

(AI_HYDRA_LEO_MISSING_TO)


[uncategorized] ~52-~52: Possible missing comma found.
Context: ... }, }); Add styles, Tailwind CSS v4 is required. css title="Tailwind CS...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~57-~57: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... 'fumadocs-twoslash/twoslash.css'; Add MDX components. tsx title="mdx-comp...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~129-~129: You might be missing the article “the” here.
Context: ...e You can enable filesystem cache with typesCache option: ```ts twoslash titl...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/layouts/docs.mdx

[uncategorized] ~5-~5: Possible missing preposition found.
Context: ...ption: The layout of documentation --- The layout of documentation pages, it inclu...

(AI_HYDRA_LEO_MISSING_IN)


[grammar] ~53-~53: The verb ‘recommend’ is used with the gerund form.
Context: ...s" /> ## Nav A mobile-only navbar, we recommend to customise it from baseOptions. <div className=...

(ADMIT_ENJOY_VB)


[uncategorized] ~120-~120: You might be missing the article “the” here.
Context: ...nts, and fit each layout component into appropriate position. You need to override `--fd-n...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~135-~135: The preposition “in” seems more likely in this position than the preposition “into”.
Context: ...nabled. When the link component appears into the browser viewport, the content (RSC ...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_INTO_IN)

docs/!sample/mdx/async.mdx

[uncategorized] ~80-~80: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...ave better capability to handle massive amount of content to index. ### Constraints ...

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)

docs/!sample/headless/search/orama.mdx

[uncategorized] ~203-~203: You might be missing the article “the” here.
Context: ....js static export, use staticGET from search server. ```ts title="app/api/search/ro...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~245-~245: Use the plural noun, or add a word such as ‘the’ or ‘some’ in front of ‘other’.
Context: ...less You can host the search server on other backend such as Express and Elysia. ```ts impo...

(OTHER_NN)

docs/!sample/ui/components/tabs.mdx

[uncategorized] ~98-~98: You might be missing the article “the” here.
Context: .../Tab> ``` ### Link to Tab Use HTML id attribute to link to a specific ta...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/search/trieve.mdx

[uncategorized] ~60-~60: Possible missing preposition found.
Context: ...turn NextResponse.json(results); } ``` Create a script, the sync function will sync...

(AI_HYDRA_LEO_MISSING_TO)

docs/!sample/ui/markdown/mermaid.mdx

[uncategorized] ~9-~9: Possible missing preposition found.
Context: ...nd using mermaid directly. ## Setup Install the required dependencies, `next-themes...

(AI_HYDRA_LEO_MISSING_TO)


[misspelling] ~24-~24: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...src/mermaid.tsx). Add the component as a MDX component: ```tsx title="mdx-compo...

(EN_A_VS_AN)


[uncategorized] ~75-~75: You might be missing the article “a” here.
Context: ...art=" graph TD; subgraph AA [Consumers] A[Mobile app]; B[Web app]; C[Node.js cli...

(AI_EN_LECTOR_MISSING_DETERMINER_A)

docs/!sample/ui/(integrations)/openapi/configurations.mdx

[uncategorized] ~43-~43: You might be missing the article “a” here.
Context: ...I schema refers to an API endpoint with specific method like /api/weather:GET. | mode...

(AI_EN_LECTOR_MISSING_DETERMINER_A)


[duplication] ~48-~48: Possible typo: you repeated a word.
Context: ... | | file | operations in schema schema | {file_name}.mdx ...

(ENGLISH_WORD_REPEAT_RULE)


[uncategorized] ~189-~189: You might be missing the article “the” here.
Context: ..., you can also specify code samples via OpenAPI schema. ```yaml paths: /plants: ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~225-~225: The preposition “on” seems more likely in this position than the preposition “in”.
Context: ... ### Renderer Customise components in the page. ts import { createOpenAPI...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_IN_ON)


[misspelling] ~260-~260: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...lidation of the OpenAPI schema if given an URL. | Prop | Description ...

(EN_A_VS_AN)

docs/!sample/headless/custom-source.mdx

[uncategorized] ~14-~14: This verb may not be in the correct form. Consider using a different form for this context.
Context: ... ### Examples You can see examples to use Fumadocs with a CMS, which allows a nic...

(AI_EN_LECTOR_REPLACEMENT_VERB_FORM)


[uncategorized] ~61-~61: You might be missing the article “the” here.
Context: ... route. #### Body In the main body of page, find the corresponding page according ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~63-~63: You might be missing the article “a” here.
Context: ...he DocsPage component. You also need table of contents, which can be generated wit...

(AI_EN_LECTOR_MISSING_DETERMINER_A)


[uncategorized] ~84-~84: The preposition ‘to’ seems more likely in this position.
Context: ...ure it with generateMetadata (similar as the code above). ### Document Search ...

(AI_HYDRA_LEO_REPLACE_AS_TO)


[uncategorized] ~98-~98: Possible missing preposition found.
Context: ...nt sources with Fumadocs. You can think it as a next-mdx-remote with built-in pl...

(AI_EN_LECTOR_MISSING_PREPOSITION)


[grammar] ~107-~107: Did you mean “there are some limitations”?
Context: ... nodes. Since it doesn't use a bundler, there's some limitations: - No imports and exports in MDX files...

(THERE_S_MANY)

docs/!sample/ui/search/algolia.mdx

[typographical] ~10-~10: Consider adding a comma after ‘generally’ for more clarity.
Context: ...(/docs/headless/search/algolia). While generally we recommend building your own search w...

(RB_LY_COMMA)


[uncategorized] ~30-~30: You might be missing the article “the” here.
Context: .../headless/search/algolia#tag-filter) on search server and add the following: <include...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/content-collections/index.mdx

[uncategorized] ~89-~89: Possible missing comma found.
Context: ...omponents To use components from other packages like Fumadocs UI, pass them to your `<M...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/!sample/headless/page-tree.mdx

[uncategorized] ~8-~8: This verb may not be in the correct form. Consider using a different form for this context.
Context: ...ers. It will be sent to the client and being referenced in navigation elements inclu...

(AI_EN_LECTOR_REPLACEMENT_VERB_FORM)


[uncategorized] ~13-~13: You might be missing the article “the” here.
Context: ...ee. By design, page tree only contains necessary informatio...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~13-~13: The correct preposition here is “on” or “about”.
Context: ...ree only contains necessary information of all pages and folders. Unserializable ...

(INFORMATION_OF)


[uncategorized] ~89-~89: You might be missing the article “the” here.
Context: ... name="PageTreeSeparator" /> ## Icons Icon is a ReactElement, supported by pages...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/headless/source-api.mdx

[grammar] ~10-~10: Please double-check that the subject and verb are in the correct order to formulate a question.
Context: ...system based content sources. ### What it does? - Generate page trees based on file s...

(HOW_YOU_ARE)


[uncategorized] ~12-~12: You might be missing the article “the” here.
Context: ...t does? - Generate page trees based on file system. - Assign URL and slugs to each ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~31-~31: Possible missing article found.
Context: ... URL, or specify a function to generate URL for each page. ```ts import { loader }...

(AI_HYDRA_LEO_MISSING_A)


[uncategorized] ~69-~69: You might be missing the article “the” here.
Context: ...`` ### I18n Pass the i18n config to loader. ```ts title="lib/source.ts" import { ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[formatting] ~80-~80: Consider inserting a comma here, unless the first half is essential to the meaning of the sentence.
Context: ... highlight] }); ``` With i18n enabled, loader will generate a page tree for every loc...

(WITH_THAT_COMMA)


[grammar] ~82-~82: Possible typo detected.
Context: ...every locale. When looking for a page, it fallbacks to default locale if the page...

(PRP_VB)


[uncategorized] ~82-~82: You might be missing the article “the” here.
Context: ...hen looking for a page, it fallbacks to default locale if the page doesn't exist for sp...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~103-~103: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...le'); ### Get Pages Get a list of page available for locale. ts import { s...

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


[uncategorized] ~166-~166: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...nconsistent behaviour between different OS. ### Transformer To perform virtual f...

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


[uncategorized] ~212-~212: Possible missing comma found.
Context: ...Source object. It includes a files property which is an array of virtual files. Eac...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~216-~216: You might be missing the article “the” here.
Context: ... type definitions for more info. Since Source API doesn't rely on file system, file p...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~216-~216: You might be missing the article “the” here.
Context: ...info. Since Source API doesn't rely on file system, file paths cannot be absolute o...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/index.mdx

[uncategorized] ~78-~78: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...the React.js framework to use (the docs is only written for Next.js). - the conten...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[uncategorized] ~166-~166: You might be missing the article “the” here.
Context: ...uter, remove the original MDX file from content directory (/content/docs). This ensur...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~201-~201: The preposition “to” seems more likely in this position than the preposition “for”.
Context: ...ew to here? Don't worry, we are welcome for your questions. If you find anything c...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_FOR_TO)

docs/!sample/ui/markdown/index.mdx

[uncategorized] ~59-~59: It appears that a hyphen is missing (if ‘auto’ is not used in the context of ‘cars’).
Context: ...ically optimized for next/image. ### Auto Links Internal links use the next/link com...

(AUTO_HYPHEN)


[uncategorized] ~122-~122: You might be missing the article “the” here.
Context: ...w the other pages in the same folder as cards. <DocsCategory url="/docs/ui/navigatio...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[typographical] ~145-~145: This greeting should probably end with a comma.
Context: ... Hello World ``` Hello World <Callout title="Title" type=...

(EN_GREETING_WITHOUT_COMMA)


[uncategorized] ~194-~194: You might be missing the article “the” here.
Context: ...specific heading, add the heading id to hash fragment: /page#my-heading-id. ### C...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~375-~375: You might be missing the article “the” here.
Context: ...ument). Specify the target file path in <include> tag (relative to the MDX file...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

docs/!sample/ui/internationalization.mdx

[uncategorized] ~11-~11: Possible missing comma found.
Context: .... You can also use other libraries with Fumadocs like [next-intl](https://github.com/ama...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~39-~39: You might be missing the article “the” here.
Context: ...te a middleware that redirects users to appropriate locale. <include cwd meta='title="midd...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~190-~190: You might be missing the article “the” here.
Context: ...d to update generateStaticParams() in docs page: ```tsx export function generateS...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~206-~206: Consider an alternative to strengthen your wording.
Context: ...ges#officially-supported-languages), no further changes are needed. Otherwise, additional co...

(CHANGES_ADJUSTMENTS)

docs/!sample/headless/page-conventions.mdx

[uncategorized] ~14-~14: A punctuation mark might be missing here.
Context: ...tree) from your content directory using loader(). ...

(AI_EN_LECTOR_MISSING_PUNCTUATION)


[uncategorized] ~63-~63: Possible missing preposition found.
Context: ... | ['dir'] | ## Folder Organize multiple pages, you can create a [Meta ...

(AI_HYDRA_LEO_MISSING_TO)


[uncategorized] ~68-~68: You might be missing the article “a” here.
Context: ... Group By default, putting a file into folder will change its slugs. You can wrap the...

(AI_EN_LECTOR_MISSING_DETERMINER_A)


[uncategorized] ~145-~145: Possible missing article found.
Context: ...rt links, or [Icon][Text](url) to add icon. ```json title="meta.json" { "pages"...

(AI_HYDRA_LEO_MISSING_AN)

docs/!sample/ui/components/auto-type-table.mdx

[uncategorized] ~26-~26: Loose punctuation mark.
Context: ... options: Partial<{ a: unknown }>; }`} /> It generates ...

(UNLIKELY_OPENING_PUNCTUATION)


[misspelling] ~41-~41: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...e the TypeScript compiler and add it as a MDX component. ```tsx title="mdx-compo...

(EN_A_VS_AN)


[formatting] ~76-~76: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...lative to your project directory (cwd), because AutoTypeTable is a React Server Compo...

(COMMA_BEFORE_BECAUSE)


[typographical] ~133-~133: The word “hence” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ... ### File System It relies on the file system, hence, the page referencing this component mus...

(THUS_SENTENCE)


[uncategorized] ~133-~133: You might be missing the article “a” here.
Context: ...uild time**. Rendering the component on serverless runtime may cause problems. ### Deep D...

(AI_EN_LECTOR_MISSING_DETERMINER_A)

docs/!sample/mdx/index.mdx

[grammar] ~43-~43: In this context, ‘type’ should agree in number with the noun after ‘of’.
Context: ...rs to a collection containing a certain type of files. You can define collections by creating...

(TYPE_OF_PLURAL)


[uncategorized] ~119-~119: You might be missing the article “the” here.
Context: ...s-mdxcommand also generates types for.source` folder. Add it as a post instal...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~133-~133: You might be missing the article “the” here.
Context: ...u can access the collection output from .source folder with its original name: ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~173-~173: A punctuation mark might be missing here.
Context: ...ll interact with the collection through [loader()](/docs/headless/source-api#out...

(AI_EN_LECTOR_MISSING_PUNCTUATION)

docs/!sample/ui/layouts/page.mdx

[uncategorized] ~5-~5: Possible missing article found.
Context: ...tion: A page in your documentation --- Page is the base element of a documentation,...

(AI_HYDRA_LEO_MISSING_A)


[uncategorized] ~31-~31: You might be missing the article “an” here.
Context: ... page.tsx, you can put the title into MDX file. This will render the title in the...

(AI_EN_LECTOR_MISSING_DETERMINER_AN)


[uncategorized] ~111-~111: You might be missing the article “the” here.
Context: ...e>; ### Last Updated Time Display last updated time of the page. tsx impor...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~142-~142: A punctuation mark might be missing here.
Context: ...ithub hosted documents, you can use the [getGithubLastEdit](/docs/headless/utils...

(AI_EN_LECTOR_MISSING_PUNCTUATION)


[uncategorized] ~162-~162: A determiner appears to be missing. Consider inserting it.
Context: ...; ``` ### Footer Footer is a navigation element that has two bu...

(AI_EN_LECTOR_MISSING_DETERMINER)


[uncategorized] ~179-~179: You might be missing the article “the” here.
Context: ... A navigation element, shown only when user is navigating in folders. <AutoTypeTab...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Analyze (typescript)
🔇 Additional comments (63)
docs/!sample/mdx/props.ts (1)

1-5: Centralised type re-exports look good

Compact, clear, and avoids consumers reaching into fumadocs-mdx directly.
No issues spotted.

docs/!sample/mdx/global.mdx (1)

18-18: Verify type-table path

"./content/docs/mdx/props.ts" does not match the sample file you introduced (docs/!sample/mdx/props.ts).
Please double-check the path; broken paths silently fail at build time.

docs/!sample/ui/page-conventions.mdx (1)

6-6: Check that the <include> directive is supported & the relative path is correct

<include> is a non-standard MDX tag; it only works if you have a remark/rehype plug-in configured to replace it at build time.
Make sure:

  1. The docs build pipeline contains the matching plug-in (often remark-include or a custom include transform).
  2. The relative path ../headless/page-conventions.mdx really resolves to docs/!sample/headless/page-conventions.mdx; otherwise the build will fail with “file not found”.

If either of these is not guaranteed, consider inlining the content or linking to it instead.

docs/!sample/ui/components/inline-toc.mdx (1)

31-31: Verify AutoTypeTable path – looks outside the docs directory

"./content/docs/ui/props.ts" is relative to the repository root, not to the MDX file.
If props.ts lives under packages/ui or a different folder, AutoTypeTable will silently render nothing.

Double-check and adjust to an absolute path from the project root if required:

<AutoTypeTable path="packages/fumadocs-ui/src/props.ts" name="InlineTOCProps" />
docs/!sample/cli/meta.json (1)

5-5: Confirm that "Terminal" matches an available icon

If the icon set is Heroicons, the correct name would be "terminal" (lower-case) or "ComputerDesktopIcon", depending on mapping.
Using an unknown glyph will likely render a broken icon.

Please verify or swap to a guaranteed icon key.

docs/!sample/ui/search/orama-cloud.mdx (1)

1-15: LGTM! Well-structured documentation.

The documentation is concise and appropriately structured, using external references and includes effectively to avoid duplication.

docs/!sample/ui/(integrations)/llms.txt.ts (1)

1-12: LGTM! Well-implemented API route.

The code follows good practices:

  • Uses concurrent processing with Promise.all for better performance
  • Properly sets caching behavior with revalidate: false
  • Clean and readable structure with appropriate imports
  • Returns proper Response object for the API route
docs/!sample/headless/utils/get-toc.mdx (1)

1-23: LGTM! Comprehensive and well-structured documentation.

The documentation effectively covers:

  • Clear function description and purpose
  • Practical usage example with proper imports
  • Helpful guidance about CMS alternatives
  • Appropriate cross-references to related documentation
  • Clear output description
docs/!sample/ui/components/type-table.mdx (1)

30-34: Check AutoTypeTable path correctness

./content/docs/ui/props.ts is resolved relative to the MDX file’s directory. Make sure the file really exists at that location after build — broken paths silently render empty tables.

docs/!sample/ui/components/files.mdx (1)

31-35: Verify props file path for generated tables

As with the TypeTable doc, make sure ./content/docs/ui/props.ts exists so that AutoTypeTable doesn’t render empty output.

docs/!sample/ui/components/image-zoom.mdx (1)

1-34: Comprehensive and well-structured documentation.

The documentation clearly explains the ImageZoom component usage with practical examples and proper TypeScript integration. The MDX component replacement pattern is correctly demonstrated, and the additional note about image optimization adds valuable context.

docs/!sample/ui/(integrations)/get-llm-text.ts (1)

1-26: Well-implemented LLM integration function.

The function correctly configures the remark processor with necessary plugins and provides a clean interface for converting MDX content to LLM-consumable format. The type safety and error handling approach are appropriate.

docs/!sample/mdx/include.mdx (1)

1-38: Excellent documentation for the include feature.

The documentation thoroughly covers all use cases of the <include> tag with clear, practical examples. The progression from basic Markdown inclusion to advanced features like cwd resolution is well-structured and easy to follow.

docs/!sample/ui/layouts/home-layout.mdx (1)

1-34: Well-structured layout documentation.

The documentation effectively demonstrates HomeLayout usage with proper TypeScript integration and Next.js Route Groups. The file structure visualization using the Files component is particularly helpful.

docs/!sample/cli/index.mdx (1)

1-88: Comprehensive and well-organized CLI documentation.

The documentation thoroughly covers all CLI features with practical examples and clear instructions. The progression from basic installation to advanced features like tree generation is well-structured and user-friendly.

docs/!sample/mdx/meta.json (1)

1-22: Well-structured metadata configuration.

The JSON structure is valid and follows a clear organizational pattern with section separators and logical page ordering. The configuration appears complete and ready for use.

docs/!sample/ui/search/index.mdx (2)

12-31: Code example looks correct.

The React component example properly demonstrates disabling search UI through the RootProvider configuration. The TypeScript types and JSX structure are appropriate.


39-54: Hot keys configuration example is well-structured.

The example shows proper TypeScript typing and configuration for custom hot keys. The key configuration object structure is clear and documented.

docs/!sample/ui/(integrations)/openapi/media-adapters.mdx (2)

15-41: Well-implemented media adapter example.

The TypeScript implementation demonstrates proper typing with the MediaAdapter interface and shows good practices for multi-language code generation. The conditional logic for different programming languages is clear and the Go example properly uses the context to add imports.


43-54: Proper integration example.

The source configuration correctly shows how to override the default adapter for a specific media type. The import structure and configuration object are appropriate.

docs/!sample/ui/search/orama-cloud.tsx (2)

24-30: Well-implemented hook usage.

The component properly uses the useDocsSearch hook with correct configuration for Orama Cloud, including internationalization support. The hook destructuring and setup are appropriate.


32-59: Excellent component composition and UI structure.

The search dialog component is well-structured with proper composition of dialog parts (overlay, content, header, input, list, footer). The conditional rendering for search results and loading states is handled correctly. The accessibility attributes and semantic structure are appropriate.

docs/!sample/ui/search/algolia.tsx (2)

19-21: LGTM: Placeholder credentials appropriately marked for replacement.

The placeholder credentials are clearly marked with "replace me" values, which is appropriate for documentation examples. Users will need to replace these with their actual Algolia app ID and API key.


23-59: Well-structured search dialog implementation.

The component properly integrates with the fumadocs search ecosystem:

  • Correctly uses the useDocsSearch hook with Algolia configuration
  • Properly handles internationalization with the useI18n hook
  • Implements a complete search dialog UI with all necessary subcomponents
  • Handles loading states and search results appropriately

The component structure follows good React patterns and provides a solid example for users implementing Algolia search.

docs/!sample/ui/components/github-info.mdx (1)

1-45: Excellent documentation with clear usage examples.

The documentation provides comprehensive guidance for the GithubInfo component:

  • Clear import instructions
  • Basic usage example with required props
  • Advanced integration example showing how to add it to DocsLayout
  • Proper TypeScript examples with type imports

The code examples are practical and demonstrate real-world usage patterns.

docs/!sample/ui/components/steps.mdx (1)

1-57: Comprehensive Steps component documentation.

The documentation effectively covers multiple usage patterns:

  • Component-based approach with Steps and Step imports
  • Utility class approach using Tailwind CSS classes directly
  • Advanced selector usage with arbitrary variants for targeting specific elements

The examples are clear and demonstrate both simple and advanced use cases. The recommendation to use Tailwind utilities directly is a good performance tip.

docs/!sample/headless/components/link.mdx (1)

1-33: Clear and informative Link component documentation.

The documentation effectively explains:

  • The component's purpose as a Next.js Link wrapper with external link detection
  • Automatic rel attribute generation for external links
  • Usage patterns identical to standard anchor tags
  • Solution for dynamic hrefs using the separate DynamicLink component

The examples are practical and the explanations are concise but complete.

docs/!sample/ui/components/dynamic-codeblock.mdx (1)

1-50: Comprehensive DynamicCodeBlock documentation.

The documentation provides excellent coverage:

  • Clear distinction between client and server component usage
  • Detailed configuration options with Shiki themes and components
  • Practical code examples for both basic and advanced usage
  • Reference to related server component implementation

The content effectively explains the component's features and use cases.

docs/!sample/headless/components/sidebar.mdx (1)

11-20: LGTM! Clear usage example.

The import structure and component composition pattern is well-documented and follows React best practices.

docs/!sample/headless/mdx/remark-admonition.mdx (2)

6-9: LGTM! Clear migration guidance.

The introduction clearly explains the purpose and target audience (Docusaurus migrants) for this plugin.


50-61: LGTM! Excellent best practice recommendation.

The recommendation to use JSX syntax instead of admonition syntax is valuable, highlighting the benefits of better editor support and flexibility.

docs/!sample/ui/mdx/index.mdx (2)

18-33: LGTM! Comprehensive relative link example.

The example clearly demonstrates how to integrate the createRelativeLink helper with MDX components, showing proper destructuring and component override patterns.


41-41: LGTM! Important usage constraint clearly highlighted.

The server component limitation is properly documented as a callout, ensuring users understand the implementation constraints.

docs/!sample/ui/components/server-codeblock.tsx (3)

5-12: LGTM! Proper async component signature and TypeScript typing.

The component uses intersection types appropriately and the async function signature is correct for server-side rendering scenarios.


13-19: LGTM! Proper integration with Shiki highlighting.

The highlight function is correctly awaited and the component configuration with custom pre renderer follows the expected pattern.


21-21: LGTM! Clean component composition.

The component properly wraps the highlighted content in the base CodeBlock component while forwarding additional props.

docs/!sample/ui/(integrations)/open-graph.mdx (2)

23-48: LGTM! Excellent Next.js App Router integration example.

The generateMetadata function correctly uses the new Next.js App Router conventions with async params handling and proper Open Graph/Twitter card metadata structure.


55-69: Good font customization example.

The font configuration example properly demonstrates how to customize Satori options with the generateOGImage function, including all necessary font properties.

docs/!sample/ui/(integrations)/typescript.mdx (2)

20-31: Solid Fumadocs MDX configuration example.

The remark plugin integration is properly configured with the generator instance passed to the remarkAutoTypeTable plugin.


68-88: Clear annotation examples.

The TSDoc annotations (@internal and @remarks) are well-documented with practical examples that developers can easily follow.

docs/!sample/headless/internationalization.mdx (2)

20-34: Comprehensive hideLocale configuration options.

The table clearly explains the different modes and their behaviors, which is crucial for developers choosing the right i18n strategy.


36-42: Important warning about 'always' mode.

The callout properly warns about potential SEO and caching issues when using the 'always' mode, which is critical information for production deployments.

docs/!sample/ui/components/tabs.client.tsx (1)

23-45: Well-structured dynamic tabs example.

The component demonstrates good React patterns for managing dynamic tab state and integrates properly with the Fumadocs UI components.

docs/!sample/ui/customisation.mdx (3)

10-16: Clear architecture overview table.

The table effectively summarizes the main UI components and their roles, providing a good foundation for understanding the system.


23-36: Well-organized layout navigation cards.

The cards provide clear navigation to different layout documentation with descriptive titles and helpful descriptions.


52-66: Practical CLI usage examples.

The CLI commands are correct and demonstrate the key functionality for installing components and customizing layouts.

docs/!sample/headless/meta.json (1)

1-24: LGTM! Well-structured documentation metadata.

The JSON structure is valid and provides a logical organization of the Fumadocs Core documentation into clear sections (Guide, Writing, API References, Sources).

docs/!sample/headless/components/toc-example.tsx (1)

1-28: LGTM! Well-implemented TOC component example.

The component demonstrates proper usage of fumadocs-core TOC features with:

  • Correct TypeScript typing using TOCItemType
  • Proper React hooks usage (useRef)
  • Appropriate component composition with AnchorProvider, ScrollProvider, and TOCItem
  • Clean separation of concerns
docs/!sample/ui/search/algolia.mdx (1)

1-32: Well-structured documentation with clear integration guidance.

The documentation provides comprehensive setup instructions for Algolia integration, with appropriate references to external components and clear organization. The use of includes for shared content and tag filter examples promotes maintainability.

docs/!sample/ui/search/fetch.tsx (1)

17-22: Good implementation of search dialog with proper internationalization.

The component correctly integrates the useDocsSearch hook with i18n support and uses appropriate TypeScript typing with SharedProps.

docs/!sample/ui/(integrations)/llms.mdx.ts (2)

8-17: Well-implemented API route with proper error handling.

The handler correctly:

  • Uses proper Next.js async parameter handling
  • Implements appropriate error handling with notFound()
  • Returns the response using NextResponse
  • Follows Next.js 15+ patterns for parameter access

6-6: Appropriate caching configuration for dynamic content.

Setting revalidate = false is correct for LLM-generated content that should be dynamically generated on each request.

docs/!sample/ui/navigation/links.mdx (1)

1-228: Excellent comprehensive documentation for navigation links.

This documentation provides thorough coverage of all navigation link types with clear examples, proper TypeScript typing, and practical use cases. The organization with tabs for different layouts and detailed explanations of each link type makes it highly useful for developers.

docs/!sample/ui/components/tabs.mdx (1)

1-178: Outstanding comprehensive documentation for the Tabs component.

This documentation excellently covers all aspects of the Tabs component including:

  • Basic usage with clear setup instructions
  • Advanced features like persistent state and shared values
  • URL hash integration for deep linking
  • Both high-level and low-level (Radix UI) usage patterns
  • Interactive examples that demonstrate functionality

The progressive complexity from basic to advanced usage makes it very developer-friendly.

docs/!sample/ui/(integrations)/python.mdx (1)

21-22: Re-evaluate pip install ./node_modules/fumadocs-python

Installing a Python package from node_modules will only work if the project has previously fetched the wheel/tarball into that directory and the local path matches the Python build.
In most cases users will expect:

pip install fumadocs-python

Consider switching to the canonical command (or add a note explaining why the local path is necessary) to avoid confusion across platforms and CI images.

docs/!sample/headless/mdx/structure.mdx (1)

26-29: Verify AutoTypeTable path.

./content/docs/headless/props.ts doesn’t exist in this PR (actual file appears to be docs/!sample/headless/props.ts). The table will 404 at build-time unless the docs tooling rewrites the path. Please double-check and adjust if necessary.

docs/!sample/headless/components/toc.mdx (1)

27-29: Potential broken documentation path.

Both AnchorProviderProps and ScrollProviderProps reference
./content/docs/headless/props.ts, which is not added in this PR. Confirm the correct relative path matches the newly added props.ts.

Also applies to: 36-38

docs/!sample/headless/mdx/remark-image.mdx (1)

38-41: Confirm AutoTypeTable source path.

The referenced source file path looks inconsistent with the repo layout (docs/!sample/headless/props.ts). Ensure the path resolves at build time.

docs/!sample/mdx/page.mdx (1)

27-35: Confirm path alias validity

providerImportSource: '@/mdx-components' assumes your bundler/TS config resolves @/ to the project root. If that alias isn’t defined in tsconfig.json / next.config.js, MDX compilation will fail at runtime.
Please verify the alias or swap to a relative path.

docs/!sample/headless/search/orama-cloud.mdx (1)

49-62: Avoid hard-coding sensitive credentials in examples

The snippet shows inline endpoint and api_key strings. Consider demonstrating best practice with env variables to discourage accidental secret leakage:

-const client = new OramaClient({
-  endpoint: '<endpoint_url>',
-  api_key: '<api_key>',
-});
+const client = new OramaClient({
+  endpoint: process.env.ORAMA_ENDPOINT!,
+  api_key: process.env.ORAMA_API_KEY!,
+});

[security]

⛔ Skipped due to learnings
Learnt from: KATT
PR: trpc/trpc#6680
File: examples/lambda-url/src/client.ts:14-15
Timestamp: 2025-04-08T09:25:08.446Z
Learning: In example projects, API endpoints and service URLs should use environment variables rather than hardcoded values to follow best practices for configuration management and security.
docs/!sample/ui/manual-installation.mdx (1)

190-196: Confirm Docker COPY step picks up source.config.ts

Copying source.config.ts only at install time means later edits won't be reflected unless the dependency layer is re-built. If users iterate on this file, remind them to re-run docker build or move the COPY after the code-copy stage to avoid stale configs.

docs/!sample/ui/components/auto-type-table.mdx (1)

6-32: Verify that Wrapper is globally available

<Wrapper> is rendered directly. If it isn’t included in the global MDX component map the page will fail to compile.
Please double-check the MDX provider setup.

docs/!sample/ui/layouts/page.mdx (1)

122-159: Ensure Tabs/Tab components are registered in MDX context

<Tabs> and <Tab> are rendered live but never imported in this file. Confirm they are provided through the shared MDXComponents; otherwise the example page will explode at build time.

Comment on lines +19 to +50
export function GET() {
const feed = new Feed({
title: 'Fumadocs Blog',
id: `${baseUrl}/blog`,
link: `${baseUrl}/blog`,
language: 'en',

image: `${baseUrl}/banner.png`,
favicon: `${baseUrl}/icon.png`,
copyright: 'All rights reserved 2025, Fuma Nama',
});

for (const page of source.getPages().sort((a, b) => {
return new Date(b.data.date).getTime() - new Date(a.data.date).getTime();
})) {
feed.addItem({
id: page.url,
title: page.data.title,
description: page.data.description,
link: `${baseUrl}${page.url}`,
date: new Date(page.data.date),

author: [
{
name: 'Fuma',
},
],
});
}

return new NextResponse(feed.rss2());
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Return proper RSS headers & avoid hard-coded base URL

  1. NextResponse will default to text/plain; most feed readers expect application/rss+xml.
  2. Hard-coding https://fumadocs.dev limits reuse.
-const baseUrl = 'https://fumadocs.dev';
+const baseUrl = process.env.NEXT_PUBLIC_SITE_URL ?? 'http://localhost:3000';

 ...
-  return new NextResponse(feed.rss2());
+  return new NextResponse(feed.rss2(), {
+    headers: {
+      'Content-Type': 'application/rss+xml; charset=utf-8',
+    },
+  });

This keeps the snippet production-ready while remaining copy-paste-friendly.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export function GET() {
const feed = new Feed({
title: 'Fumadocs Blog',
id: `${baseUrl}/blog`,
link: `${baseUrl}/blog`,
language: 'en',
image: `${baseUrl}/banner.png`,
favicon: `${baseUrl}/icon.png`,
copyright: 'All rights reserved 2025, Fuma Nama',
});
for (const page of source.getPages().sort((a, b) => {
return new Date(b.data.date).getTime() - new Date(a.data.date).getTime();
})) {
feed.addItem({
id: page.url,
title: page.data.title,
description: page.data.description,
link: `${baseUrl}${page.url}`,
date: new Date(page.data.date),
author: [
{
name: 'Fuma',
},
],
});
}
return new NextResponse(feed.rss2());
}
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL ?? 'http://localhost:3000';
export function GET() {
const feed = new Feed({
title: 'Fumadocs Blog',
id: `${baseUrl}/blog`,
link: `${baseUrl}/blog`,
language: 'en',
image: `${baseUrl}/banner.png`,
favicon: `${baseUrl}/icon.png`,
copyright: 'All rights reserved 2025, Fuma Nama',
});
for (const page of source.getPages().sort((a, b) => {
return new Date(b.data.date).getTime() - new Date(a.data.date).getTime();
})) {
feed.addItem({
id: page.url,
title: page.data.title,
description: page.data.description,
link: `${baseUrl}${page.url}`,
date: new Date(page.data.date),
author: [
{
name: 'Fuma',
},
],
});
}
return new NextResponse(feed.rss2(), {
headers: {
'Content-Type': 'application/rss+xml; charset=utf-8',
},
});
}
🤖 Prompt for AI Agents
In docs/!sample/ui/(integrations)/rss.mdx around lines 19 to 50, the GET
function returns a NextResponse without setting the Content-Type header to
'application/rss+xml', which is required for proper RSS feed recognition. Also,
the baseUrl is hard-coded, limiting reuse. Fix this by setting the Content-Type
header explicitly in the NextResponse to 'application/rss+xml' and replace the
hard-coded baseUrl with a dynamic value or configuration variable to make the
code more reusable and production-ready.

/** @type {import('fumadocs-core/search/algolia').DocumentRecord[]} **/
const records = JSON.parse(content.toString());

const client = algoliasearch('id', 'key');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Replace placeholder credentials with environment variables.

Using hardcoded placeholder credentials poses a security risk and won't work in production. Use environment variables instead.

-const client = algoliasearch('id', 'key');
+const client = algoliasearch(
+  process.env.ALGOLIA_APP_ID || '',
+  process.env.ALGOLIA_API_KEY || ''
+);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const client = algoliasearch('id', 'key');
const client = algoliasearch(
process.env.ALGOLIA_APP_ID || '',
process.env.ALGOLIA_API_KEY || ''
);
🤖 Prompt for AI Agents
In docs/!sample/headless/search/sync-algolia.mjs at line 12, replace the
hardcoded Algolia credentials 'id' and 'key' with environment variables. Modify
the code to read the Algolia application ID and API key from process.env
variables to avoid exposing sensitive information and to enable proper
configuration in different environments.

import { algoliasearch } from 'algoliasearch';
import { sync } from 'fumadocs-core/search/algolia';

const content = fs.readFileSync('.next/server/app/static.json.body');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider error handling for file operations.

The synchronous file read could fail if the file doesn't exist. Consider adding error handling or using the asynchronous version.

-const content = fs.readFileSync('.next/server/app/static.json.body');
+try {
+  const content = fs.readFileSync('.next/server/app/static.json.body');
+} catch (error) {
+  console.error('Failed to read search index file:', error);
+  process.exit(1);
+}

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In docs/!sample/headless/search/sync-algolia.mjs at line 6, the synchronous file
read using fs.readFileSync can throw an error if the file does not exist or is
inaccessible. To fix this, wrap the readFileSync call in a try-catch block to
handle potential errors gracefully, or replace it with the asynchronous
fs.readFile method and handle errors via a callback or promise.

Comment on lines +14 to +17
void sync(client, {
indexName: 'document',
documents: records, // [!code highlight]
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add error handling for sync operation.

The sync operation could fail and should be handled appropriately.

-void sync(client, {
-  indexName: 'document',
-  documents: records,
-});
+try {
+  await sync(client, {
+    indexName: 'document',
+    documents: records,
+  });
+  console.log('Successfully synced documents to Algolia');
+} catch (error) {
+  console.error('Failed to sync documents:', error);
+  process.exit(1);
+}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
void sync(client, {
indexName: 'document',
documents: records, // [!code highlight]
});
try {
await sync(client, {
indexName: 'document',
documents: records,
});
console.log('Successfully synced documents to Algolia');
} catch (error) {
console.error('Failed to sync documents:', error);
process.exit(1);
}
🤖 Prompt for AI Agents
In docs/!sample/headless/search/sync-algolia.mjs around lines 14 to 17, the sync
operation is called without any error handling, which could cause unhandled
failures. Wrap the sync call in a try-catch block or use promise error handling
to catch and handle any errors that occur during the sync operation, ensuring
failures are logged or managed appropriately.

Comment on lines +19 to +22
const client = new OramaClient({
endpoint: 'Endpoint URL',
api_key: 'API Key',
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Replace hardcoded credentials with environment variables.

Hardcoded API credentials pose a security risk and should be replaced with environment variables or configuration.

-const client = new OramaClient({
-  endpoint: 'Endpoint URL',
-  api_key: 'API Key',
-});
+const client = new OramaClient({
+  endpoint: process.env.NEXT_PUBLIC_ORAMA_ENDPOINT || '',
+  api_key: process.env.NEXT_PUBLIC_ORAMA_API_KEY || '',
+});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const client = new OramaClient({
endpoint: 'Endpoint URL',
api_key: 'API Key',
});
const client = new OramaClient({
endpoint: process.env.NEXT_PUBLIC_ORAMA_ENDPOINT || '',
api_key: process.env.NEXT_PUBLIC_ORAMA_API_KEY || '',
});
🤖 Prompt for AI Agents
In docs/!sample/ui/search/orama-cloud.tsx around lines 19 to 22, the OramaClient
is initialized with hardcoded endpoint and api_key values, which is a security
risk. Replace these hardcoded strings with environment variables by accessing
them via process.env or the appropriate environment configuration method,
ensuring credentials are not exposed in the codebase.

Comment on lines +92 to +103
<Cards>
<Card
href="https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating"
title="Fetching, Caching, and Revalidating"
>
Learn more about caching in Next.js
</Card>
<Card title="href is optional">Learn more about `fetch` in Next.js.</Card>
<Card icon={<HomeIcon />} href="/" title="Home">
You can include icons too.
</Card>
</Cards>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

HomeIcon is referenced but never imported – this file will not compile

<HomeIcon /> is used inside live MDX (not inside a fenced code-block), therefore the component must be in scope.
Add an explicit import at the top of the document (or ensure it is injected globally via MDXComponents), otherwise the page crashes at runtime.

+import { HomeIcon } from 'lucide-react';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Cards>
<Card
href="https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating"
title="Fetching, Caching, and Revalidating"
>
Learn more about caching in Next.js
</Card>
<Card title="href is optional">Learn more about `fetch` in Next.js.</Card>
<Card icon={<HomeIcon />} href="/" title="Home">
You can include icons too.
</Card>
</Cards>
import { HomeIcon } from 'lucide-react';
<Cards>
<Card
href="https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating"
title="Fetching, Caching, and Revalidating"
>
Learn more about caching in Next.js
</Card>
<Card title="href is optional">Learn more about `fetch` in Next.js.</Card>
<Card icon={<HomeIcon />} href="/" title="Home">
You can include icons too.
</Card>
</Cards>
🤖 Prompt for AI Agents
In docs/!sample/ui/markdown/index.mdx around lines 92 to 103, the HomeIcon
component is used but not imported, causing a runtime crash. To fix this, add an
explicit import statement for HomeIcon at the top of the MDX file or ensure it
is globally available via MDXComponents so that the component is in scope when
used.

Comment on lines +127 to +130
### References

<auto-type-table path="../props.ts" name="AutoTypeTableProps" />

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Custom component rendered with a lowercase tag – will be treated as raw HTML

<auto-type-table … /> starts with a lowercase letter, so MDX/React will treat it as an intrinsic HTML element instead of your React component. Rename to AutoTypeTable (or register a lowercase alias).

-<auto-type-table path="../props.ts" name="AutoTypeTableProps" />
+<AutoTypeTable path="../props.ts" name="AutoTypeTableProps" />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### References
<auto-type-table path="../props.ts" name="AutoTypeTableProps" />
### References
<AutoTypeTable path="../props.ts" name="AutoTypeTableProps" />
🤖 Prompt for AI Agents
In docs/!sample/ui/components/auto-type-table.mdx around lines 127 to 130, the
custom component tag <auto-type-table /> is lowercase, causing MDX/React to
treat it as raw HTML instead of a React component. Rename the tag to
<AutoTypeTable /> with an uppercase first letter to ensure it is recognized as a
React component.

Comment on lines +17 to +19
Define the i18n configurations in a file, we will import it with `@/ilb/i18n` in this guide.

<include cwd meta='title="lib/i18n.ts"'>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix import-path typo: @/ilb/i18n@/lib/i18n

The example path is misspelled, which will break copy-paste adoption.

-Define the i18n configurations in a file, we will import it with `@/ilb/i18n` in this guide.
+Define the i18n configuration in a file; we will import it with `@/lib/i18n` in this guide.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Define the i18n configurations in a file, we will import it with `@/ilb/i18n` in this guide.
<include cwd meta='title="lib/i18n.ts"'>
Define the i18n configuration in a file; we will import it with `@/lib/i18n` in this guide.
<include cwd meta='title="lib/i18n.ts"'>
🤖 Prompt for AI Agents
In docs/!sample/ui/internationalization.mdx around lines 17 to 19, fix the
import path typo by changing `@/ilb/i18n` to the correct `@/lib/i18n` to ensure
the example path is accurate and copy-paste friendly.

Comment on lines +83 to +92
export default async function RootLayout({
params,
children,
}: {
params: Promise<{ lang: string }>;
children: React.ReactNode;
}) {
const lang = (await params).lang;

return (
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

params should not be a Promise in App Router layouts

params is received as a plain object. Declaring it as Promise<...> forces unnecessary await and will type-error during build.

-export default async function RootLayout({
-  params,
+export default function RootLayout({
+  params,
   children,
 }: {
-  params: Promise<{ lang: string }>;
+  params: { lang: string };
   children: React.ReactNode;
 }) {
-  const lang = (await params).lang;
+  const { lang } = params;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export default async function RootLayout({
params,
children,
}: {
params: Promise<{ lang: string }>;
children: React.ReactNode;
}) {
const lang = (await params).lang;
return (
export default function RootLayout({
params,
children,
}: {
params: { lang: string };
children: React.ReactNode;
}) {
const { lang } = params;
return (
🤖 Prompt for AI Agents
In docs/!sample/ui/internationalization.mdx around lines 83 to 92, the params
argument is incorrectly typed as a Promise, but it is actually a plain object in
App Router layouts. Remove the Promise wrapper from the params type declaration
and access lang directly without awaiting params to fix the type error and
unnecessary await.

Comment on lines +170 to +185
import { source } from '@/lib/source';

export default async function Page({
params,
}: {
params: Promise<{ lang: string; slug?: string[] }>;
}) {
const { slug, lang } = await params;
// get page
source.getPage(slug); // [!code --]
source.getPage(slug, lang); // [!code ++]

// get pages
source.getPages(); // [!code --]
source.getPages(lang); // [!code ++]
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

page.tsx – remove Promise wrapper for params

-export default async function Page({
-  params,
+export default function Page({
+  params,
 }: {
-  params: Promise<{ lang: string; slug?: string[] }>;
+  params: { lang: string; slug?: string[] };
 }) {
-  const { slug, lang } = await params;
+  const { slug, lang } = params;
 ...
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { source } from '@/lib/source';
export default async function Page({
params,
}: {
params: Promise<{ lang: string; slug?: string[] }>;
}) {
const { slug, lang } = await params;
// get page
source.getPage(slug); // [!code --]
source.getPage(slug, lang); // [!code ++]
// get pages
source.getPages(); // [!code --]
source.getPages(lang); // [!code ++]
}
import { source } from '@/lib/source';
export default function Page({
params,
}: {
params: { lang: string; slug?: string[] };
}) {
const { slug, lang } = params;
// get page
source.getPage(slug); // [!code --]
source.getPage(slug, lang); // [!code ++]
// get pages
source.getPages(); // [!code --]
source.getPages(lang); // [!code ++]
}
🤖 Prompt for AI Agents
In docs/!sample/ui/internationalization.mdx around lines 170 to 185, the params
argument in the Page function is incorrectly typed as a Promise. Remove the
Promise wrapper from the params type so that params is typed directly as { lang:
string; slug?: string[] }. Adjust the function signature accordingly to accept
params as a plain object, not a Promise, and update the code to use params
directly without awaiting it.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
docs/content/docs/framework/videos-and-community-resources.mdx (2)

49-74: Minor copy-editing: compound adjectives need hyphens

Examples:

  • “Full Stack TypeScript” → “Full-stack TypeScript”
  • “Beginner Friendly” → “Beginner-friendly”

Applying the hyphen improves grammatical correctness and aligns with the LanguageTool lint hints.
Consider a quick pass over all section titles and bullet points to add these hyphens where appropriate.

Also applies to: 75-99, 100-124


418-431: Accessibility: icons alone aren’t descriptive

Cards such as “tRPC Analytics” rely solely on icons to convey meaning. Assistive technologies may ignore SVGs rendered via components.
Add brief descriptive text via aria-label/title on the icon component or supplement with additional visible text.

Example:

-<Card href="#" title="tRPC Analytics" icon={<IconChartLine />} >
+<Card
+  href="#"
+  title="tRPC Analytics"
+  icon={<IconChartLine aria-label="Analytics icon" />}
+>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ba9f105 and cc0b832.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • docs/content/docs/framework/videos-and-community-resources.mdx (1 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/content/docs/framework/videos-and-community-resources.mdx

[uncategorized] ~52-~52: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ... title="Getting Started Tutorials"> "Full Stack TypeScript with tRPC and Next.js" by ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~165-~165: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...d> ## Community Projects ### Open Source Showcases <Tabs items={['Production Ap...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~452-~452: The word ‘help’ is a conjunction. In formal texts, use “to”.
Context: ...repositories - Join Discord for help and feedback ### For Intermediate Develope...

(HELP_AND_VB)


[uncategorized] ~485-~485: A period might be missing here.
Context: ...ries and extensions - Share with the community 3. Thought Leadership - Write t...

(AI_EN_LECTOR_MISSING_PUNCTUATION_PERIOD)

⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: build
  • GitHub Check: test
  • GitHub Check: Analyze (typescript)
  • GitHub Check: Lint and auto-fix
🔇 Additional comments (1)
docs/content/docs/framework/videos-and-community-resources.mdx (1)

13-43: Missing MDX Component Imports

The MDX file uses <Cards>, <Card> and the icon components (IconPlay, IconNews, IconBrandGithub, IconBrandDiscord) without importing them—this will cause build failures in most MDX toolchains unless these are injected globally.

Please add an import block immediately after the front-matter (or confirm that your docs framework provides these automatically):

---
title: Videos & Community Resources
description: Learn from the community with videos, tutorials, tools, and open-source projects
icon: IconUsers
---
+import { Cards, Card } from 'fumadocs-ui';
+import {
+  IconPlay,
+  IconNews,
+  IconBrandGithub,
+  IconBrandDiscord
+} from '@tabler/icons-react';

If your framework already supplies these components globally, you can ignore this.

Comment on lines +324 to +348
<Card
href="#"
title="The Future of APIs with Alex Johansson"
icon={<IconMicrophone />}
>
tRPC creator discusses type safety, developer experience, and the future of
API development
</Card>

<Card
href="#"
title="Building Type-Safe Full-Stack Apps"
icon={<IconHeadphones />}
>
Panel discussion with tRPC team members and community maintainers
</Card>

<Card
href="#"
title="Developer Stories: Success with tRPC"
icon={<IconUser />}
>
Real developers share their experiences migrating to and scaling with tRPC
</Card>
</Cards>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Replace "#" placeholders with real URLs or TODO markers

Using href="#" for the podcast cards will produce broken links in the rendered site and negatively impact UX & SEO.

-<Card href="#" title="The Future of APIs with Alex Johansson" icon={<IconMicrophone />}>
+<Card href="https://example.com/podcast-future-of-apis" title="The Future of APIs with Alex Johansson" icon={<IconMicrophone />}>
   …
 </Card>

If the real links are not yet known, mark them clearly as TODO so they are caught before release.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Card
href="#"
title="The Future of APIs with Alex Johansson"
icon={<IconMicrophone />}
>
tRPC creator discusses type safety, developer experience, and the future of
API development
</Card>
<Card
href="#"
title="Building Type-Safe Full-Stack Apps"
icon={<IconHeadphones />}
>
Panel discussion with tRPC team members and community maintainers
</Card>
<Card
href="#"
title="Developer Stories: Success with tRPC"
icon={<IconUser />}
>
Real developers share their experiences migrating to and scaling with tRPC
</Card>
</Cards>
<Card
href="https://example.com/podcast-future-of-apis"
title="The Future of APIs with Alex Johansson"
icon={<IconMicrophone />}
>
tRPC creator discusses type safety, developer experience, and the future of
API development
</Card>
<Card
href="#"
title="Building Type-Safe Full-Stack Apps"
icon={<IconHeadphones />}
>
Panel discussion with tRPC team members and community maintainers
</Card>
<Card
href="#"
title="Developer Stories: Success with tRPC"
icon={<IconUser />}
>
Real developers share their experiences migrating to and scaling with tRPC
</Card>
</Cards>
🤖 Prompt for AI Agents
In docs/content/docs/framework/videos-and-community-resources.mdx around lines
324 to 348, the Card components use href="#" placeholders which cause broken
links. Replace these "#" href values with the actual URLs for each podcast card.
If the URLs are not yet available, replace "#" with a clear TODO marker like
href="TODO" to ensure these links are updated before release and avoid broken
links affecting UX and SEO.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Jun 30, 2025

Open in StackBlitz

@trpc/client

npm i https://pkg.pr.new/trpc/trpc/@trpc/client@6848

@trpc/next

npm i https://pkg.pr.new/trpc/trpc/@trpc/next@6848

@trpc/react-query

npm i https://pkg.pr.new/trpc/trpc/@trpc/react-query@6848

@trpc/server

npm i https://pkg.pr.new/trpc/trpc/@trpc/server@6848

@trpc/tanstack-react-query

npm i https://pkg.pr.new/trpc/trpc/@trpc/tanstack-react-query@6848

@trpc/upgrade

npm i https://pkg.pr.new/trpc/trpc/@trpc/upgrade@6848

commit: cc0b832

@cameronmema
Copy link
Author

Working on pnpm-lock.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants