import type { Metadata } from "next"; import Image from "next/image"; import Link from "next/link"; import { notFound } from "next/navigation"; import { IconArrowNarrowLeft, IconExternalLink } from "@tabler/icons-react"; import Hero from "@/components/content/Hero"; import SectionLabel from "@/components/layout/SectionLabel"; import { colors, projects } from "@/constants"; export function generateStaticParams() { return projects.map((project) => ({ slug: project.slug })); } export async function generateMetadata({ params, }: { params: Promise<{ slug: string }>; }): Promise { const { slug } = await params; const project = projects.find((p) => p.slug === slug); if (!project) return { title: "Project — Angel Mankel" }; return { title: `${project.title} — Angel Mankel`, description: project.description, }; } export default async function ProjectPage({ params, }: { params: Promise<{ slug: string }>; }) { const { slug } = await params; const project = projects.find((p) => p.slug === slug); if (!project) notFound(); return (
All projects

{project.year} — {project.stack.join(" · ")}

Open live app
{/* Screenshots */} {project.screenshots.length > 0 && (
{project.screenshots.map((shot) => (
{shot.alt}
))}
)} {/* Overview */}
{project.overview.map((paragraph) => (

{paragraph}

))}
{/* What I learned */}
    {project.learned.map((item) => (
  • {item}
  • ))}
{/* What I'd do differently */}
    {project.improvements.map((item) => (
  • {item}
  • ))}
); }