20b719893c
- Shared SubpageShell (HeaderClient paper strip + ink footer) and SubpageIntro, btn/ghost/card helpers in app/_ui/subpage.tsx - Projects list: poster cards with hard ink shadows, filter pills, ink search field; no fake 800ms skeleton and no framer-motion opacity:0 in SSR - Project detail: poster hero, .plakat-prose markdown, links/stack aside, back link works without JS - Books: server-side fetch (visible without JS), cover + rating pills - Legal notice / privacy: moved to app/_ui/*Client.tsx, root routes removed (middleware always redirects to /[locale]), consent reset via useConsent - ProjectThumbnail rebuilt on Plakat tokens - Old Header.tsx + test removed; brown/cream/sand palettes and unused glass-panel/admin-glass(-light)/liquid-bg-blob/float CSS dropped (liquid palette, glass-card, admin-glass-card stay for admin + 404) - .plakat-prose replaces the missing typography plugin Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
909 B
TypeScript
31 lines
909 B
TypeScript
import type { Metadata } from "next";
|
||
import { getLanguageAlternates, toAbsoluteUrl } from "@/lib/seo";
|
||
import SubpageShell from "@/app/_ui/SubpageShell";
|
||
import PrivacyPolicyClient from "@/app/_ui/PrivacyPolicyClient";
|
||
|
||
export async function generateMetadata({
|
||
params,
|
||
}: {
|
||
params: Promise<{ locale: string }>;
|
||
}): Promise<Metadata> {
|
||
const { locale } = await params;
|
||
const languages = getLanguageAlternates({ pathWithoutLocale: "privacy-policy" });
|
||
return {
|
||
title: locale === "de" ? "Datenschutz – Dennis Konkol" : "Privacy policy – Dennis Konkol",
|
||
alternates: {
|
||
canonical: toAbsoluteUrl(`/${locale}/privacy-policy`),
|
||
languages,
|
||
},
|
||
};
|
||
}
|
||
|
||
|
||
export default async function Page({ params }: { params: Promise<{ locale: string }> }) {
|
||
const { locale } = await params;
|
||
return (
|
||
<SubpageShell locale={locale}>
|
||
<PrivacyPolicyClient />
|
||
</SubpageShell>
|
||
);
|
||
}
|