diff --git a/app/components/icons/StepIcons.tsx b/app/components/icons/StepIcons.tsx index e3766b2..be70d42 100644 --- a/app/components/icons/StepIcons.tsx +++ b/app/components/icons/StepIcons.tsx @@ -130,6 +130,44 @@ function IconCup() { ); } +function IconPen() { + // Pen/nib — same glyph as der-eine's own hand-coded Focus.tsx IconMetal + // (32x32 coords carried over unchanged), now available through the + // shared set for other PDPs — der-eine's PDP is the block-builder's + // reference template, its own icons belong in the shared library too. + return ( + + + + + ); +} + +function IconSparkle() { + // Engraving/laser mark — same glyph as der-eine's own IconSparkle. + return ( + + + + ); +} + +function IconCompact() { + // Four corner brackets pointing inward — same glyph as der-eine's own + // IconCompact ("fits anywhere"). + return ( + + + + ); +} + function IconPause() { // Two rounded bars — "sit still for a moment" steps. return ( @@ -155,6 +193,9 @@ export const STEP_ICONS: Record React.ReactNode> = { shield: IconShield, cup: IconCup, pause: IconPause, + pen: IconPen, + sparkle: IconSparkle, + compact: IconCompact, }; // Same symbolic clock icon /lebensuhr uses above its "24 Stunden" heading diff --git a/app/der-eine/page.tsx b/app/der-eine/page.tsx index 3b0d65b..08bb455 100644 --- a/app/der-eine/page.tsx +++ b/app/der-eine/page.tsx @@ -1,21 +1,22 @@ import type { Metadata } from "next"; -import { Hero } from "./components/Hero"; -import { Focus } from "./components/Focus"; -import { PasstDazu } from "./components/PasstDazu"; -import { Testimonials } from "./components/Testimonials"; -import { Pricing } from "./components/Pricing"; +import { notFound } from "next/navigation"; +import { ProductBlocks } from "../components/ProductBlocks"; import { Footer } from "../components/Footer"; import { getProductBySlug, getCompanySettings } from "../lib/payload"; import { buildProductSchema } from "../lib/structuredData"; const title = "Der Eine. – Für die eine Sache, die gerade zählt."; -// Description reads from the live product instead of a separately -// hardcoded string, unlike this page's own `title` — matches -// /tasse-die-pause's own pattern (see that page's comment). Two -// hand-maintained copies of the same text used to drift apart: this one -// used to say something different from Products.description (which feeds -// the cart/checkout/JSON-LD elsewhere) — same field, one source now. +// der-eine was the reference template the whole PDP block-builder system +// was designed to match (gallery sizing, black stepRow-facts icons, +// CTA-label pattern — see ProductBlocks.tsx's own comments) — now migrated +// onto it itself, same as /tasse-die-pause before it. Testimonials.tsx +// dropped entirely rather than migrated: the PDP builder no longer offers +// testimonialsRef (removed 2026-08-29, unused everywhere; the planned +// replacement is a real reviews feature). Hero.tsx/Focus.tsx/ +// Testimonials.tsx/Pricing.tsx/PasstDazu.tsx in ./components are now dead +// code, left for a follow-up cleanup pass rather than deleted here — same +// as /tasse-die-pause's own old components. export async function generateMetadata(): Promise { const product = await getProductBySlug("stift-kugelschreiber"); const description = product?.descriptionText || undefined; @@ -33,21 +34,14 @@ export default async function DerEinePage() { getProductBySlug("stift-kugelschreiber"), getCompanySettings(), ]); - const productSchema = product - ? buildProductSchema(product, "https://einfach-produktiv.mk360.de/der-eine", seller) - : null; + if (!product) notFound(); + const productSchema = buildProductSchema(product, "https://einfach-produktiv.mk360.de/der-eine", seller); return ( <> - {productSchema && ( -