{copy.challenge}
{copy.challengeText}
import { ArrowLeft, CalendarDays, FolderKanban, Tag } from "lucide-react"; import Link from "next/link"; import { notFound } from "next/navigation"; import { MotionFade } from "@/components/motion-fade"; import { routing } from "@/i18n/routing"; import { getPortfolioItem, pickText, portfolioItems, resolveLocale } from "@/lib/site-data"; type PortfolioItemPageProps = { params: { locale: string; slug: string; }; }; export function generateStaticParams() { return routing.locales.flatMap((locale) => portfolioItems.map((item) => ({ locale, slug: item.slug, })), ); } export default function PortfolioItemPage({ params: { locale, slug }, }: PortfolioItemPageProps) { const localeKey = resolveLocale(locale); const item = getPortfolioItem(slug); if (!item) { notFound(); } const copy = localeKey === "de" ? { back: "Zurueck zum Portfolio", challenge: "Herausforderung", solution: "Loesung", outcome: "Ergebnis", challengeText: "Das Projekt brauchte eine klare Informationsarchitektur und schnellere Ladezeiten.", solutionText: "Wir haben Design, Komponenten und Content in einem modularen System aufgebaut.", outcomeText: "Das Team kann Inhalte schneller ausrollen und Nutzer finden schneller zum Ziel.", } : { back: "Back to portfolio", challenge: "Challenge", solution: "Solution", outcome: "Outcome", challengeText: "The project needed clearer information architecture and faster performance.", solutionText: "We built design, components and content in a modular system.", outcomeText: "The team ships content faster and users reach goals more quickly.", }; return (
{pickText(item.summary, localeKey)}
{copy.challengeText}
{copy.solutionText}
{copy.outcomeText}