feat: full site build — Project/Melody schema (Option A), admin CRUD, public sections, uploads, email+SMTP, internal analytics, legal pages, docs
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import type { Metadata } from "next";
|
||||
import { notFound } from "next/navigation";
|
||||
import ProjectDetail from "@/components/public/project-detail";
|
||||
import { getActiveLocale, isLocale, type Locale } from "@/lib/i18n";
|
||||
import { getProjectDirectoryCopy } from "@/lib/project-content";
|
||||
import { getPublishedProject } from "@/lib/project-queries";
|
||||
|
||||
type WorkDetailPageProps = {
|
||||
params: { locale: string; slug: string };
|
||||
};
|
||||
|
||||
export function generateMetadata({ params }: WorkDetailPageProps): Metadata {
|
||||
if (!isLocale(params.locale)) return {};
|
||||
const locale = getActiveLocale(params.locale as Locale);
|
||||
const copy = getProjectDirectoryCopy(locale, "PORTFOLIO");
|
||||
return { title: copy.eyebrow, description: copy.description };
|
||||
}
|
||||
|
||||
export default async function WorkDetailPage({ params }: WorkDetailPageProps) {
|
||||
if (!isLocale(params.locale)) notFound();
|
||||
const locale = getActiveLocale(params.locale as Locale);
|
||||
const project = await getPublishedProject("PORTFOLIO", params.slug);
|
||||
if (!project) notFound();
|
||||
return <ProjectDetail locale={locale} type="PORTFOLIO" project={project} />;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import type { Metadata } from "next";
|
||||
import { notFound } from "next/navigation";
|
||||
import ProjectDirectory from "@/components/public/project-directory";
|
||||
import { getActiveLocale, isLocale, type Locale } from "@/lib/i18n";
|
||||
import { getProjectDirectoryCopy } from "@/lib/project-content";
|
||||
|
||||
type WorkPageProps = {
|
||||
params: { locale: string };
|
||||
searchParams: { category?: string };
|
||||
};
|
||||
|
||||
export function generateMetadata({ params }: { params: { locale: string } }): Metadata {
|
||||
if (!isLocale(params.locale)) return {};
|
||||
const locale = getActiveLocale(params.locale as Locale);
|
||||
const copy = getProjectDirectoryCopy(locale, "PORTFOLIO");
|
||||
return { title: copy.title, description: copy.description };
|
||||
}
|
||||
|
||||
export default function WorkPage({ params, searchParams }: WorkPageProps) {
|
||||
if (!isLocale(params.locale)) notFound();
|
||||
const locale = getActiveLocale(params.locale as Locale);
|
||||
return <ProjectDirectory locale={locale} type="PORTFOLIO" categorySlug={searchParams.category} />;
|
||||
}
|
||||
Reference in New Issue
Block a user