71cd75425d
Sections rebuilt to match der-eine.png (hero, tagline banner, brand-story + feature icons, lifestyle photo, final CTA bar with trust badges), but each piece is built from patterns that already exist elsewhere on the site rather than one-off layouts: - Focus.tsx (feature icons) mirrors todo-cards/HowItWorks.tsx's exact icon-top/title/desc card shape and typography - Why.tsx (brand story) mirrors todo-cards/Focus.tsx's photo+text layout - Pricing.tsx's trust-badge row reuses getCartTrustBadges() (real, already-vetted copy) with /cart's own markup, not invented text - Banner.tsx reuses --font-caveat and /icon-separator-right.svg (both already used in Divider.tsx) instead of introducing new assets Photos: product.image/gallery repointed (via direct DB write, see reference_payload_direct_db_access) to two new Payload media docs cropped directly from the mockup — the previous gallery was mismatched supplier stock photos of a different-colored pen. Lifestyle.tsx's desk photo is a static /public asset (page decoration showing the pen next to another product, not a photo of the pen alone, so it doesn't belong in Products.gallery).
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { Hero } from "./components/Hero";
|
||
import { Banner } from "./components/Banner";
|
||
import { Why } from "./components/Why";
|
||
import { Focus } from "./components/Focus";
|
||
import { Lifestyle } from "./components/Lifestyle";
|
||
import { Pricing } from "./components/Pricing";
|
||
import { Footer } from "../components/Footer";
|
||
import { getProductBySlug, getCompanySettings } from "../lib/payload";
|
||
import { buildProductSchema } from "../lib/structuredData";
|
||
|
||
const title = "Der Eine. – Der Kugelschreiber zu unseren ToDo-Karten.";
|
||
const description =
|
||
"Der Eine. ist ein Kugelschreiber aus Metall, mit schwarzer Mine und „Der Eine.“ auf der Seite — der Stift zu unseren ToDo-Karten.";
|
||
|
||
export const metadata: Metadata = {
|
||
title,
|
||
description,
|
||
alternates: {
|
||
canonical: "/der-eine",
|
||
},
|
||
openGraph: {
|
||
title,
|
||
description,
|
||
url: "/der-eine",
|
||
},
|
||
twitter: {
|
||
title,
|
||
description,
|
||
},
|
||
};
|
||
|
||
export default async function DerEinePage() {
|
||
const [product, seller] = await Promise.all([
|
||
getProductBySlug("stift-kugelschreiber"),
|
||
getCompanySettings(),
|
||
]);
|
||
const productSchema = product
|
||
? buildProductSchema(product, "https://einfach-produktiv.mk360.de/der-eine", seller)
|
||
: null;
|
||
|
||
return (
|
||
<>
|
||
{productSchema && (
|
||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(productSchema) }} />
|
||
)}
|
||
<main className="flex flex-col flex-1">
|
||
<Hero />
|
||
<Banner />
|
||
<Why />
|
||
<Focus />
|
||
<Lifestyle />
|
||
<Pricing />
|
||
</main>
|
||
<Footer />
|
||
</>
|
||
);
|
||
}
|