import type { Metadata } from "next" import { Link } from "@/i18n/navigation" import { getTranslations, getMessages, setRequestLocale } from "next-intl/server" import { Play, MessageCircle, Users, Book, Database, Code, BookOpen, Library, Star, Sparkles, ExternalLink, } from "lucide-react" import Footer from "@/components/footer" export async function generateMetadata({ params, }: { params: Promise<{ locale: string }> }): Promise { const { locale } = await params const t = await getTranslations({ locale, namespace: "guides.meta" }) return { title: t("title"), description: t("description"), keywords: [ "proxmox guides", "proxmox tutorials", "proxmox kodi lxc", "proxmox nvidia driver", "proxmox samba lxc", "proxmox cloud backup", "proxmox vzdump rclone", "proxmox coral tpu", "proxmox gpu lxc", "proxmox ve 9 guides", ], alternates: { canonical: "https://proxmenux.com/guides" }, openGraph: { title: t("ogTitle"), description: t("ogDescription"), type: "website", url: "https://proxmenux.com/guides", siteName: "ProxMenux", images: [ { url: "https://raw.githubusercontent.com/MacRimi/ProxMenux/main/web/public/main.png", width: 1363, height: 735, alt: t("ogImageAlt"), }, ], }, twitter: { card: "summary_large_image", title: t("twitterTitle"), description: t("twitterDescription"), images: [ "https://raw.githubusercontent.com/MacRimi/ProxMenux/main/web/public/main.png", ], }, } } interface Guide { title: string description: string slug: string } interface ExternalCardProps { href: string title: string description: string Icon: React.ComponentType<{ className?: string }> color: string // tailwind bg + hover classes external?: boolean } function CardLink({ href, title, description, Icon, color, external = true }: ExternalCardProps) { const Inner = (

{title}

{description}

) if (external) { return ( {Inner} ) } return ( {Inner} ) } export default async function GuidesPage({ params, }: { params: Promise<{ locale: string }> }) { const { locale } = await params setRequestLocale(locale) const t = await getTranslations({ locale, namespace: "guides" }) const messages = (await getMessages({ locale })) as unknown as { guides: { inDepth: { items: Guide[] } } } const guides = messages.guides.inDepth.items const link = (chunks: React.ReactNode) => ( {chunks} ) return (

{t("header.title")}

{t("header.tagline")}

{/* ─────────────────────────── In-depth guides ─────────────────────────── */}

{t("inDepth.heading")}

{t("inDepth.intro")}

{guides.map((guide) => (

{guide.title}

{guide.description}

))}
{/* ─────────────────────────── ProxMenux references ─────────────────────────── */}

{t("references.heading")}

{t("references.intro")}

{/* ─────────────────────────── Official Proxmox resources ─────────────────────────── */}

{t("official.heading")}

{t("official.intro")}

{/* ─────────────────────────── Community projects & resources ─────────────────────────── */}

{t("community.heading")}

{t("community.intro")}

{t.rich("community.suggestRich", { link })}

{/* ─────────────────────────── Discussion ─────────────────────────── */}

{t("discussion.heading")}

{t("discussion.intro")}

) }