feat(website): serve /llms.txt and raw markdown for docs

Adds an llms.txt at the site root with a static product preamble so
LLMs can answer "what is Paseo" without following any links, plus a
curated index of docs, alternatives, and the 38 agent pages. Doc pages
now expose Copy/View as markdown buttons and a raw .md version at
<path>.md following the llms.txt convention.

Also skips the canonical-host redirect for localhost so the dev server
stops punting every request to production.
This commit is contained in:
Mohamed Boudra
2026-05-24 21:38:33 +07:00
parent 4c97ff8fa0
commit ba724956df
5 changed files with 144 additions and 1 deletions
@@ -0,0 +1,43 @@
import { Check, Copy, FileText } from "lucide-react";
import { useCallback, useEffect, useState } from "react";
interface DocsMarkdownActionsProps {
content: string;
markdownHref: string;
}
export function DocsMarkdownActions({ content, markdownHref }: DocsMarkdownActionsProps) {
const [copied, setCopied] = useState(false);
useEffect(() => {
if (!copied) return;
const id = setTimeout(() => setCopied(false), 1500);
return () => clearTimeout(id);
}, [copied]);
const onCopy = useCallback(() => {
navigator.clipboard.writeText(content).then(() => setCopied(true));
}, [content]);
return (
<div className="not-prose flex flex-wrap items-center gap-2 mb-8">
<button
type="button"
onClick={onCopy}
className="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors"
>
{copied ? <Check size={14} /> : <Copy size={14} />}
{copied ? "Copied" : "Copy as markdown"}
</button>
<a
href={markdownHref}
target="_blank"
rel="noreferrer"
className="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors"
>
<FileText size={14} />
View as markdown
</a>
</div>
);
}