feat: manage about page via payload

This commit is contained in:
syntaxbullet
2026-06-22 10:54:18 +02:00
parent e1713f6d6e
commit 5944ebc62a
7 changed files with 1085 additions and 251 deletions

View File

@@ -913,6 +913,184 @@ export interface Page {
};
};
};
/**
* Edit the Der BMP page in the same order it appears on the frontend. The generic Hero and Content tabs are hidden for this SPA-managed route.
*/
about?: {
/**
* Top hero image, headline, CTAs, and stats strip.
*/
hero?: {
/**
* Current frontend image: /images/saal-leer-atmosphaere.jpg
*/
backgroundImage?: (number | null) | Media;
imageAlt?: string | null;
eyebrow?: string | null;
heading?: string | null;
highlight?: string | null;
description?: string | null;
primaryCta?: {
label?: string | null;
url?: string | null;
};
secondaryCta?: {
label?: string | null;
url?: string | null;
};
stats?:
| {
value?: string | null;
label?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Cream text/image section explaining the prize.
*/
prize?: {
/**
* Current frontend image: /images/preistraeger-gruppe.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
eyebrow?: string | null;
heading?: string | null;
body?:
| {
text?: string | null;
id?: string | null;
}[]
| null;
facts?:
| {
value?: string | null;
label?: string | null;
id?: string | null;
}[]
| null;
imageLabel?: string | null;
};
/**
* Navy text/image section about relevance and goals.
*/
mittelstand?: {
/**
* Current frontend image: /images/networking-innenhof.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
eyebrow?: string | null;
heading?: string | null;
body?:
| {
text?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Header copy and editor-selected winners for the photo grid.
*/
highlights?: {
eyebrow?: string | null;
heading?: string | null;
cta?: {
label?: string | null;
url?: string | null;
};
hoverLabel?: string | null;
year?: number | null;
/**
* Choose up to 8 Preisträger to show. If empty, the frontend falls back to winners from the selected year.
*/
selectedWinners?: (number | Preistraeger)[] | null;
};
/**
* Testimonial heading and slides. Upload images when available, or keep the migrated URL fallback.
*/
testimonials?: {
eyebrow?: string | null;
heading?: string | null;
items?:
| {
image?: (number | null) | Media;
imageUrl?: string | null;
name?: string | null;
role?: string | null;
company?: string | null;
year?: string | null;
quote?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Navy timeline section.
*/
history?: {
eyebrow?: string | null;
heading?: string | null;
highlight?: string | null;
watermark?: string | null;
items?:
| {
year?: string | null;
title?: string | null;
desc?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Cream values list next to the history timeline.
*/
goals?: {
eyebrow?: string | null;
heading?: string | null;
items?:
| {
num?: string | null;
title?: string | null;
desc?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Cream editorial rows before the final CTA.
*/
values?: {
eyebrow?: string | null;
heading?: string | null;
description?: string | null;
items?:
| {
num?: string | null;
title?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Bottom navy CTA section.
*/
cta?: {
eyebrow?: string | null;
heading?: string | null;
description?: string | null;
primaryCta?: {
label?: string | null;
url?: string | null;
};
secondaryPrefix?: string | null;
secondaryCta?: {
label?: string | null;
url?: string | null;
};
};
};
/**
* Edit the Impressum page content. Legal section body blocks are stored as JSON so nested paragraphs, lists, notices, addresses, and subsections can keep their frontend order.
*/
@@ -2558,6 +2736,172 @@ export interface PagesSelect<T extends boolean = true> {
};
};
};
about?:
| T
| {
hero?:
| T
| {
backgroundImage?: T;
imageAlt?: T;
eyebrow?: T;
heading?: T;
highlight?: T;
description?: T;
primaryCta?:
| T
| {
label?: T;
url?: T;
};
secondaryCta?:
| T
| {
label?: T;
url?: T;
};
stats?:
| T
| {
value?: T;
label?: T;
id?: T;
};
};
prize?:
| T
| {
image?: T;
imageAlt?: T;
eyebrow?: T;
heading?: T;
body?:
| T
| {
text?: T;
id?: T;
};
facts?:
| T
| {
value?: T;
label?: T;
id?: T;
};
imageLabel?: T;
};
mittelstand?:
| T
| {
image?: T;
imageAlt?: T;
eyebrow?: T;
heading?: T;
body?:
| T
| {
text?: T;
id?: T;
};
};
highlights?:
| T
| {
eyebrow?: T;
heading?: T;
cta?:
| T
| {
label?: T;
url?: T;
};
hoverLabel?: T;
year?: T;
selectedWinners?: T;
};
testimonials?:
| T
| {
eyebrow?: T;
heading?: T;
items?:
| T
| {
image?: T;
imageUrl?: T;
name?: T;
role?: T;
company?: T;
year?: T;
quote?: T;
id?: T;
};
};
history?:
| T
| {
eyebrow?: T;
heading?: T;
highlight?: T;
watermark?: T;
items?:
| T
| {
year?: T;
title?: T;
desc?: T;
id?: T;
};
};
goals?:
| T
| {
eyebrow?: T;
heading?: T;
items?:
| T
| {
num?: T;
title?: T;
desc?: T;
id?: T;
};
};
values?:
| T
| {
eyebrow?: T;
heading?: T;
description?: T;
items?:
| T
| {
num?: T;
title?: T;
id?: T;
};
};
cta?:
| T
| {
eyebrow?: T;
heading?: T;
description?: T;
primaryCta?:
| T
| {
label?: T;
url?: T;
};
secondaryPrefix?: T;
secondaryCta?:
| T
| {
label?: T;
url?: T;
};
};
};
impressum?:
| T
| {