'use client'; import Link from 'fumadocs-core/link'; import { usePathname } from 'next/navigation'; export type NotFoundLink = { title: string; url: string; }; const fallbackUrls = ['/', '/about/how-pangolin-works', '/self-host/quick-install']; function segments(path: string) { return path.split('/').filter(Boolean); } /** Pages that share the most of the requested path, same idea as Mintlify's suggestions. */ function suggest(pages: NotFoundLink[], pathname: string) { const wanted = segments(pathname); const ranked = pages .map((page, index) => { const parts = segments(page.url); let prefix = 0; while (prefix < parts.length && prefix < wanted.length && parts[prefix] === wanted[prefix]) { prefix += 1; } return { page, index, score: prefix === 0 ? 0 : prefix * 100 - Math.abs(parts.length - wanted.length), }; }) .filter((item) => item.score > 0) .sort((a, b) => b.score - a.score || a.index - b.index); const picks = ranked.slice(0, 3).map((item) => item.page); if (picks.length > 0) return picks; return fallbackUrls.flatMap((url) => { const page = pages.find((item) => item.url === url); return page ? [page] : []; }); } export function NotFoundPage({ pages }: { pages: NotFoundLink[] }) { const suggestions = suggest(pages, usePathname() || '/'); return (

404

Page Not Found

We couldn't find the page. Maybe you were looking for one of these pages below?

{suggestions.length > 0 && ( )}
); }