import { projects } from "@/lib/data"; import { Project } from "@/lib/types"; import Chip from "@/components/chip"; import { Metadata } from "next"; import Image from "next/image"; import { Github, Eye, CloudDownload } from "lucide-react"; import { notFound } from "next/navigation"; import { remark } from "remark"; import html from "remark-html"; function getProjectByName(name: string): Project | undefined { const decodedName = decodeURIComponent(name.replace(/\+/g, " ")); return projects.find( (p) => p.name.toLowerCase() === decodedName.toLowerCase() ); } export async function generateStaticParams() { return projects.map((project) => ({ projectName: encodeURIComponent(project.name.replace(/\s/g, "+")), })); } export async function generateMetadata({ params, }: { params: { projectName: string }; }): Promise { const { projectName } = await params; const project = getProjectByName(projectName); if (!project) { return { title: "Project Not Found" }; } return { title: `${project.name} | Gabriel Kaszewski`, description: project.short_description, openGraph: { title: project.name, description: project.short_description, images: project.thumbnails && project.thumbnails.length > 0 ? [ { url: project.thumbnails[0], width: 800, height: 600, alt: project.name, }, ] : undefined, }, }; } async function getProjectData(project: Project) { const processedContent = await remark() .use(html) .process(project.description); return processedContent.toString(); } export default async function ProjectDetailPage({ params, }: { params: { projectName: string }; }) { const { projectName } = await params; const project = getProjectByName(projectName); const descriptionHtml = project ? await getProjectData(project) : ""; if (!project) { notFound(); } const hasLinks = project.github_url || project.visit_url || project.download_url; return (

{project.name}

Technologies

{project.technologies.map((tech) => ( ))}
{project.thumbnails && project.thumbnails.length > 0 && (

Gallery

{project.thumbnails.map((thumb, index) => ( {`${project.name} ))}
)} {hasLinks && (

Links

{project.github_url && ( CODE )} {project.visit_url && ( LIVE )} {project.download_url && ( DOWNLOAD )}
)}
); }