Der Eine.: add Testimonials + closing Pricing CTA, reorder PasstDazu last

Testimonials now pulled from Payload (page: "der-eine", same collection
as todo-cards/newsletter/challenge) instead of a hardcoded array. Pricing
adds a second, final buy CTA (same image+price+button card as the other
product pages' Pricing.tsx) for visitors who scroll past Hero's button.
PasstDazu moves to right before the Footer.
This commit is contained in:
Marco
2026-08-25 19:28:47 +00:00
parent d2332c37e9
commit 194117c07d
4 changed files with 119 additions and 5 deletions
+5 -5
View File
@@ -817,7 +817,7 @@ export async function getWerkzeugeCards(): Promise<WerkzeugeCard[]> {
}));
}
export type TestimonialsPage = "todo-cards" | "newsletter" | "challenge";
export type TestimonialsPage = "todo-cards" | "newsletter" | "challenge" | "der-eine";
export type Testimonial = { id: number; quote: string; name: string; role: string; avatar: string };
@@ -842,10 +842,10 @@ export function mapPayloadTestimonial(doc: PayloadTestimonial): Testimonial {
}
// Powers the identically-styled customer testimonial grids on /todo-cards,
// /newsletter, and /challenge (see TestimonialsGrid.tsx) — previously 3
// hardcoded arrays kept manually in sync. The single-quote "photo band"
// testimonials on /not-found and /bestellbestaetigung are a different
// shape (no avatar/role) and are not part of this collection.
// /newsletter, /challenge, and /der-eine (see TestimonialsGrid.tsx) —
// previously hardcoded arrays kept manually in sync. The single-quote
// "photo band" testimonials on /not-found and /bestellbestaetigung are a
// different shape (no avatar/role) and are not part of this collection.
export async function getTestimonials(page: TestimonialsPage, options?: { draft?: boolean }): Promise<Testimonial[]> {
const params = new URLSearchParams({
"where[tenant.slug][equals]": TENANT_SLUG,