feat: convert home page to be cms supported.

This commit is contained in:
syntaxbullet
2026-06-17 19:19:02 +02:00
parent 51494e25a8
commit a3ce20bb65
8 changed files with 1107 additions and 246 deletions

View File

@@ -206,6 +206,215 @@ export interface Page {
media?: (number | null) | Media;
};
layout: (CallToActionBlock | ContentBlock | MediaBlock | ArchiveBlock | FormBlock)[];
/**
* Edit the homepage in the same order it appears on the frontend. The generic Hero and Content tabs are hidden for the home page to avoid duplicate controls.
*/
home?: {
/**
* Top full-screen gala image, badge, headline, intro text, primary buttons, video trigger, and partner ticker.
*/
hero?: {
/**
* Current frontend image: /images/gala-saal-overview.jpg
*/
backgroundImage?: (number | null) | Media;
imageAlt?: string | null;
badge?: string | null;
headingLine1?: string | null;
headingAccent?: string | null;
description?: string | null;
primaryCta?: {
label?: string | null;
url?: string | null;
};
secondaryCta?: {
label?: string | null;
url?: string | null;
};
videoLabel?: string | null;
partnersLabel?: string | null;
partners?:
| {
name?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Cream text panel plus right-side stage image and five eligibility rows.
*/
quickCheck?: {
eyebrow?: string | null;
heading?: string | null;
/**
* Current frontend image: /images/buehne-gewinner.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
body?: string | null;
criteria?:
| {
label?: string | null;
desc?: string | null;
id?: string | null;
}[]
| null;
note?: string | null;
cta?: {
label?: string | null;
url?: string | null;
};
};
/**
* Jubilation image, stats, editorial quote, body copy, and CTA.
*/
intro?: {
eyebrow?: string | null;
heading?: string | null;
/**
* Current frontend image: /images/preistraeger-jubel.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
stats?:
| {
value?: string | null;
label?: string | null;
id?: string | null;
}[]
| null;
quote?: string | null;
body?: string | null;
cta?: {
label?: string | null;
url?: string | null;
};
};
/**
* Three-slide status module shown after the award intro.
*/
status?: {
/**
* Only this selected phase is rendered on the frontend; visitors do not see a slider.
*/
activePhase?: ('0' | '1' | '2') | null;
phases?:
| {
num?: string | null;
tag?: string | null;
pulse?: boolean | null;
phase?: string | null;
headline?: string | null;
body?: string | null;
cta?: {
label?: string | null;
url?: string | null;
};
accent?: string | null;
bg?: string | null;
glow?: string | null;
meta?: string | null;
successApplications?: string | null;
successWinners?: string | null;
membershipCta?: {
label?: string | null;
url?: string | null;
};
id?: string | null;
}[]
| null;
noActionLabel?: string | null;
};
/**
* Blue card grid with featured winner relationships.
*/
winners?: {
eyebrow?: string | null;
heading?: string | null;
cta?: {
label?: string | null;
url?: string | null;
};
/**
* Choose the winner cards shown on the home page. If empty, the latest 2025 winners are used.
*/
featured?: (number | Preistraeger)[] | null;
};
/**
* Portrait carousel and quote copy.
*/
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;
};
/**
* Cream left panel and networking image.
*/
benefits?: {
eyebrow?: string | null;
heading?: string | null;
/**
* Current frontend image: /images/networking-innenhof.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
imageLabel?: string | null;
items?:
| {
num?: string | null;
title?: string | null;
desc?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Final application pitch, award image, embedded form heading, and footnote.
*/
application?: {
eyebrow?: string | null;
heading?: string | null;
body?: string | null;
benefits?:
| {
num?: string | null;
label?: string | null;
desc?: string | null;
id?: string | null;
}[]
| null;
/**
* Current frontend image: /images/preisuebergabe.jpg
*/
awardImage?: (number | null) | Media;
awardImageAlt?: string | null;
awardCaption?: string | null;
formEyebrow?: string | null;
formTitle?: string | null;
footnote?: string | null;
footnoteStrong?: string | null;
};
/**
* Copy shown when the hero video button is clicked.
*/
videoModal?: {
title?: string | null;
description?: string | null;
closeLabel?: string | null;
};
};
meta?: {
title?: string | null;
/**
@@ -818,6 +1027,48 @@ export interface Form {
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "preistraeger".
*/
export interface Preistraeger {
id: number;
title: string;
image?: (number | null) | Media;
category?: string | null;
year?: number | null;
awardType?: string | null;
shortDesc?: string | null;
longDesc?: string | null;
/**
* Fallback description. Prefer Kurzbeschreibung / Langbeschreibung for migrated Preisträger content.
*/
description?: string | null;
quote?: string | null;
quotePerson?: string | null;
quoteRole?: string | null;
location?: string | null;
industry?: string | null;
website?: string | null;
hasMedia?: boolean | null;
/**
* Route in the legacy SPA used for previewing the current migrated Preisträger state.
*/
spaPath?: string | null;
publishedAt?: string | null;
meta?: {
title?: string | null;
description?: string | null;
};
/**
* When enabled, the slug will auto-generate from the title field on save and autosave.
*/
generateSlug?: boolean | null;
slug: string;
updatedAt: string;
createdAt: string;
_status?: ('draft' | 'published') | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "events".
@@ -869,48 +1120,6 @@ export interface Event {
createdAt: string;
_status?: ('draft' | 'published') | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "preistraeger".
*/
export interface Preistraeger {
id: number;
title: string;
image?: (number | null) | Media;
category?: string | null;
year?: number | null;
awardType?: string | null;
shortDesc?: string | null;
longDesc?: string | null;
/**
* Fallback description. Prefer Kurzbeschreibung / Langbeschreibung for migrated Preisträger content.
*/
description?: string | null;
quote?: string | null;
quotePerson?: string | null;
quoteRole?: string | null;
location?: string | null;
industry?: string | null;
website?: string | null;
hasMedia?: boolean | null;
/**
* Route in the legacy SPA used for previewing the current migrated Preisträger state.
*/
spaPath?: string | null;
publishedAt?: string | null;
meta?: {
title?: string | null;
description?: string | null;
};
/**
* When enabled, the slug will auto-generate from the title field on save and autosave.
*/
generateSlug?: boolean | null;
slug: string;
updatedAt: string;
createdAt: string;
_status?: ('draft' | 'published') | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "redirects".
@@ -1228,6 +1437,198 @@ export interface PagesSelect<T extends boolean = true> {
archive?: T | ArchiveBlockSelect<T>;
formBlock?: T | FormBlockSelect<T>;
};
home?:
| T
| {
hero?:
| T
| {
backgroundImage?: T;
imageAlt?: T;
badge?: T;
headingLine1?: T;
headingAccent?: T;
description?: T;
primaryCta?:
| T
| {
label?: T;
url?: T;
};
secondaryCta?:
| T
| {
label?: T;
url?: T;
};
videoLabel?: T;
partnersLabel?: T;
partners?:
| T
| {
name?: T;
id?: T;
};
};
quickCheck?:
| T
| {
eyebrow?: T;
heading?: T;
image?: T;
imageAlt?: T;
body?: T;
criteria?:
| T
| {
label?: T;
desc?: T;
id?: T;
};
note?: T;
cta?:
| T
| {
label?: T;
url?: T;
};
};
intro?:
| T
| {
eyebrow?: T;
heading?: T;
image?: T;
imageAlt?: T;
stats?:
| T
| {
value?: T;
label?: T;
id?: T;
};
quote?: T;
body?: T;
cta?:
| T
| {
label?: T;
url?: T;
};
};
status?:
| T
| {
activePhase?: T;
phases?:
| T
| {
num?: T;
tag?: T;
pulse?: T;
phase?: T;
headline?: T;
body?: T;
cta?:
| T
| {
label?: T;
url?: T;
};
accent?: T;
bg?: T;
glow?: T;
meta?: T;
successApplications?: T;
successWinners?: T;
membershipCta?:
| T
| {
label?: T;
url?: T;
};
id?: T;
};
noActionLabel?: T;
};
winners?:
| T
| {
eyebrow?: T;
heading?: T;
cta?:
| T
| {
label?: T;
url?: T;
};
featured?: 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;
};
};
benefits?:
| T
| {
eyebrow?: T;
heading?: T;
image?: T;
imageAlt?: T;
imageLabel?: T;
items?:
| T
| {
num?: T;
title?: T;
desc?: T;
id?: T;
};
};
application?:
| T
| {
eyebrow?: T;
heading?: T;
body?: T;
benefits?:
| T
| {
num?: T;
label?: T;
desc?: T;
id?: T;
};
awardImage?: T;
awardImageAlt?: T;
awardCaption?: T;
formEyebrow?: T;
formTitle?: T;
footnote?: T;
footnoteStrong?: T;
};
videoModal?:
| T
| {
title?: T;
description?: T;
closeLabel?: T;
};
};
meta?:
| T
| {