-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
feat: New trpc docs #6848
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat: New trpc docs #6848
Conversation
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.
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
|
@cameronmema is attempting to deploy a commit to the trpc Team on Vercel. A member of the Team first needs to authorize it. |
WalkthroughThis 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
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
Poem
✨ Finishing Touches🧪 Generate Unit Tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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: SamePromiseissue in Docs/Home layoutsApply 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 articleMinor 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-exportsSince 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 forSidebarContentProps/SidebarTriggerPropsBoth generics accept an
ElementTypeparameter that defaults toElementTypealready in the upstream lib.
Passing the explicitElementTypehere 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 toolsA final newline is missing; some linters and diff tools flag this.
docs/!sample/headless/search/index.mdx (1)
1-6: Front-matter consistencyElsewhere 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 FumadocsPure content nit.
docs/!sample/ui/navigation/index.mdx (1)
2-4: Minor punctuationThe 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 appdocs/!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 documentationVery minor wording improvement.
docs/!sample/headless/utils/index.mdx (1)
6-6: Add a brief introduction so the page isn’t rendered completely emptyRight 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 summarySimilar 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 linksAn 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, atitlefield 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 docsLeaving 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-pasteThe 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 omitstocgeneration—add a hint to avoid “undefined” errorsMost readers will copy this block verbatim; without a
tocvariable 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 atitleto show up in navigationWithout 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 generatorsSome 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 determinerAdd “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 tweakInsert 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” casingMaintain 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 coloursSeveral 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 lazilydocs/!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: AwaitgenerateFilesto surface failures.Swallowing the returned Promise hides I/O and schema-validation errors.
Top-levelawaitis fully supported in ESM.mjsscripts.-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.- +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
Experiemntalis 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 treeIf the root layout already provides other context providers, make sure the new
Provideris 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 caveatThe comment about
dangerouslySetInnerHTMLmight 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-upThe breadcrumb separator
<ChevronRight>is decorative; addaria-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 sectionThe 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 sectionInsert 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 usageBoth 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 dashboarddocs/!sample/ui/comparisons.mdx (2)
12-13: Capitalisation after commaThe 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 choicedocs/!sample/ui/layouts/docs.mdx (4)
6-6: Run-on sentenceConsider 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 viewportreads 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 pluralYou could drop the second “+”:
- handle nearly 500+ files + handle nearly 500 filesdocs/!sample/headless/page-tree.mdx (4)
6-10: Grammar & clarity tweaks improve readabilitySeveral 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 clearerConsider 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 determinersBoth 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
- “similar as” → “similar to”
- “think it as” → “think of it as”
- “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 phraseA 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 flowAdd “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 localedocs/!sample/mdx/index.mdx (4)
9-10: Polish the intro sentences for concision & grammarMinor 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 listMixed 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 determinersRun-on sentence and missing “the” before
.sourcefolder.-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 copyMinor 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 → readabilityAdd 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
⛔ Files ignored due to path filters (12)
docs/public/docs/ai-search.pngis excluded by!**/*.pngdocs/public/docs/docs-nav.pngis excluded by!**/*.pngdocs/public/docs/nav-layout-docs.pngis excluded by!**/*.pngdocs/public/docs/nav-layout-home.pngis excluded by!**/*.pngdocs/public/docs/nav-layout-menu.pngis excluded by!**/*.pngdocs/public/docs/notebook-nav-mode.pngis excluded by!**/*.pngdocs/public/docs/notebook-tab-mode.pngis excluded by!**/*.pngdocs/public/docs/notebook.pngis excluded by!**/*.pngdocs/public/docs/sidebar-tabs.pngis excluded by!**/*.pngdocs/public/docs/sidebar.pngis excluded by!**/*.pngdocs/public/docs/webhook.pngis excluded by!**/*.pngpnpm-lock.yamlis 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 goodCompact, clear, and avoids consumers reaching into
fumadocs-mdxdirectly.
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:
- The docs build pipeline contains the matching plug-in (often
remark-includeor a custom include transform).- The relative path
../headless/page-conventions.mdxreally resolves todocs/!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 AutoTypeTablepath– looks outside the docs directory
"./content/docs/ui/props.ts"is relative to the repository root, not to the MDX file.
Ifprops.tslives underpackages/uior 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 iconIf 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.allfor 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: CheckAutoTypeTablepath correctness
./content/docs/ui/props.tsis 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 tablesAs with the TypeTable doc, make sure
./content/docs/ui/props.tsexists so thatAutoTypeTabledoesn’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 likecwdresolution 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
MediaAdapterinterface 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
useDocsSearchhook 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
useDocsSearchhook with Algolia configuration- Properly handles internationalization with the
useI18nhook- 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
StepsandStepimports- 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
relattribute generation for external links- Usage patterns identical to standard anchor tags
- Solution for dynamic hrefs using the separate
DynamicLinkcomponentThe 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
createRelativeLinkhelper 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
highlightfunction is correctly awaited and the component configuration with customprerenderer follows the expected pattern.
21-21: LGTM! Clean component composition.The component properly wraps the highlighted content in the base
CodeBlockcomponent while forwarding additional props.docs/!sample/ui/(integrations)/open-graph.mdx (2)
23-48: LGTM! Excellent Next.js App Router integration example.The
generateMetadatafunction 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
generateOGImagefunction, 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 (
@internaland@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, andTOCItem- 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
useDocsSearchhook with i18n support and uses appropriate TypeScript typing withSharedProps.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 = falseis 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-evaluatepip install ./node_modules/fumadocs-pythonInstalling a Python package from
node_moduleswill 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-pythonConsider 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.tsdoesn’t exist in this PR (actual file appears to bedocs/!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
AnchorProviderPropsandScrollProviderPropsreference
./content/docs/headless/props.ts, which is not added in this PR. Confirm the correct relative path matches the newly addedprops.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 intsconfig.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 examplesThe snippet shows inline
endpointandapi_keystrings. 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 upsource.config.tsCopying
source.config.tsonly 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-rundocker buildor move the COPY after the code-copy stage to avoid stale configs.docs/!sample/ui/components/auto-type-table.mdx (1)
6-32: Verify thatWrapperis 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: EnsureTabs/Tabcomponents are registered in MDX context
<Tabs>and<Tab>are rendered live but never imported in this file. Confirm they are provided through the sharedMDXComponents; otherwise the example page will explode at build time.
| 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()); | ||
| } |
There was a problem hiding this comment.
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
NextResponsewill default totext/plain; most feed readers expectapplication/rss+xml.- Hard-coding
https://fumadocs.devlimits 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.
| 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'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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'); |
There was a problem hiding this comment.
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.
| void sync(client, { | ||
| indexName: 'document', | ||
| documents: records, // [!code highlight] | ||
| }); |
There was a problem hiding this comment.
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.
| 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.
| const client = new OramaClient({ | ||
| endpoint: 'Endpoint URL', | ||
| api_key: 'API Key', | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| <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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| <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.
| ### References | ||
|
|
||
| <auto-type-table path="../props.ts" name="AutoTypeTableProps" /> | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| ### 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.
| Define the i18n configurations in a file, we will import it with `@/ilb/i18n` in this guide. | ||
|
|
||
| <include cwd meta='title="lib/i18n.ts"'> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| export default async function RootLayout({ | ||
| params, | ||
| children, | ||
| }: { | ||
| params: Promise<{ lang: string }>; | ||
| children: React.ReactNode; | ||
| }) { | ||
| const lang = (await params).lang; | ||
|
|
||
| return ( |
There was a problem hiding this comment.
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.
| 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.
| 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 ++] | ||
| } |
There was a problem hiding this comment.
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.
| 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.
There was a problem hiding this 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 hyphensExamples:
- “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 descriptiveCards such as “tRPC Analytics” rely solely on icons to convey meaning. Assistive technologies may ignore SVGs rendered via components.
Add brief descriptive text viaaria-label/titleon 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
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis 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 ImportsThe 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.
| <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> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| <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.
@trpc/client
@trpc/next
@trpc/react-query
@trpc/server
@trpc/tanstack-react-query
@trpc/upgrade
commit: |
|
Working on pnpm-lock. |
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