feat: manage membership page via payload

This commit is contained in:
syntaxbullet
2026-06-22 11:44:35 +02:00
parent c35e45499e
commit 5bd1977c63
8 changed files with 1506 additions and 464 deletions

View File

@@ -1629,6 +1629,201 @@ export interface Page {
footerText?: string | null;
};
};
/**
* Edit the Mitglied werden page sections, pricing model, application choices, FAQ, testimonials, and wizard copy.
*/
mitgliedWerden?: {
/**
* Small top bar brand and return link.
*/
header?: {
brandLabel?: string | null;
backLabel?: string | null;
backUrl?: string | null;
};
/**
* Hero image, headline, description, and desktop stats.
*/
hero?: {
/**
* Current frontend image: /images/mitglied-hero.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
eyebrow?: string | null;
heading?: string | null;
description?: string | null;
stats?:
| {
value?: string | null;
label?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Benefit section heading and cards. Icon choices map to Lucide icons in the SPA.
*/
benefits?: {
eyebrow?: string | null;
heading?: string | null;
cards?:
| {
icon?: ('users' | 'star' | 'eye' | 'heart') | null;
title?: string | null;
body?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Association explainer, descriptor, and fact rows.
*/
about?: {
eyebrow?: string | null;
heading?: string | null;
paragraphs?:
| {
text?: string | null;
id?: string | null;
}[]
| null;
descriptor?: string | null;
facts?:
| {
num?: string | null;
label?: string | null;
body?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Calculator labels, table copy, VAT rate, admission fee, and tier rows.
*/
pricing?: {
eyebrow?: string | null;
heading?: string | null;
employeeLabel?: string | null;
selectPlaceholder?: string | null;
optionSuffix?: string | null;
resultEyebrow?: string | null;
annualNetLabel?: string | null;
annualGrossLabel?: string | null;
annualGrossShortLabel?: string | null;
admissionGrossLabel?: string | null;
totalYearOneLabel?: string | null;
footnote?: string | null;
ctaLabel?: string | null;
ctaHref?: string | null;
tableToggleLabel?: string | null;
tableEmployeeHeader?: string | null;
tableNetHeader?: string | null;
tableGrossHeader?: string | null;
tableNotePrefix?: string | null;
tableNoteSuffix?: string | null;
vatRate?: number | null;
admissionFeeNet?: number | null;
tiers?:
| {
max?: number | null;
label?: string | null;
annual?: number | null;
id?: string | null;
}[]
| null;
};
/**
* Online and PDF application strip.
*/
applicationOptions?: {
items?:
| {
id?: string | null;
number?: string | null;
eyebrow?: string | null;
title?: string | null;
description?: string | null;
href?: string | null;
file?: (number | null) | Media;
download?: boolean | null;
}[]
| null;
};
/**
* Left-hand pitch copy and wizard image/caption.
*/
formIntro?: {
eyebrow?: string | null;
heading?: string | null;
description?: string | null;
promises?:
| {
num?: string | null;
label?: string | null;
desc?: string | null;
id?: string | null;
}[]
| null;
/**
* Current frontend image: /images/gewinner-gruppenfoto.jpg
*/
image?: (number | null) | Media;
imageAlt?: string | null;
imageLabel?: string | null;
};
/**
* Deep wizard labels, options, validation messages, legal text, consent copy, success copy, and duplicated pricing defaults. Keep the object shape aligned with src/spa/mitgliedWerdenContent.ts.
*/
wizard?:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
/**
* Member quotes and attribution cards.
*/
testimonials?: {
eyebrow?: string | null;
heading?: string | null;
items?:
| {
quote?: string | null;
initials?: string | null;
name?: string | null;
role?: string | null;
id?: string | null;
}[]
| null;
};
/**
* FAQ heading and question/answer rows.
*/
faq?: {
eyebrow?: string | null;
heading?: string | null;
items?:
| {
q?: string | null;
a?: string | null;
id?: string | null;
}[]
| null;
};
/**
* Final call-to-action band.
*/
bottomCta?: {
eyebrow?: string | null;
heading?: string | null;
ctaLabel?: string | null;
ctaHref?: string | null;
};
};
meta?: {
title?: string | null;
/**
@@ -3867,6 +4062,173 @@ export interface PagesSelect<T extends boolean = true> {
footerText?: T;
};
};
mitgliedWerden?:
| T
| {
header?:
| T
| {
brandLabel?: T;
backLabel?: T;
backUrl?: T;
};
hero?:
| T
| {
image?: T;
imageAlt?: T;
eyebrow?: T;
heading?: T;
description?: T;
stats?:
| T
| {
value?: T;
label?: T;
id?: T;
};
};
benefits?:
| T
| {
eyebrow?: T;
heading?: T;
cards?:
| T
| {
icon?: T;
title?: T;
body?: T;
id?: T;
};
};
about?:
| T
| {
eyebrow?: T;
heading?: T;
paragraphs?:
| T
| {
text?: T;
id?: T;
};
descriptor?: T;
facts?:
| T
| {
num?: T;
label?: T;
body?: T;
id?: T;
};
};
pricing?:
| T
| {
eyebrow?: T;
heading?: T;
employeeLabel?: T;
selectPlaceholder?: T;
optionSuffix?: T;
resultEyebrow?: T;
annualNetLabel?: T;
annualGrossLabel?: T;
annualGrossShortLabel?: T;
admissionGrossLabel?: T;
totalYearOneLabel?: T;
footnote?: T;
ctaLabel?: T;
ctaHref?: T;
tableToggleLabel?: T;
tableEmployeeHeader?: T;
tableNetHeader?: T;
tableGrossHeader?: T;
tableNotePrefix?: T;
tableNoteSuffix?: T;
vatRate?: T;
admissionFeeNet?: T;
tiers?:
| T
| {
max?: T;
label?: T;
annual?: T;
id?: T;
};
};
applicationOptions?:
| T
| {
items?:
| T
| {
id?: T;
number?: T;
eyebrow?: T;
title?: T;
description?: T;
href?: T;
file?: T;
download?: T;
};
};
formIntro?:
| T
| {
eyebrow?: T;
heading?: T;
description?: T;
promises?:
| T
| {
num?: T;
label?: T;
desc?: T;
id?: T;
};
image?: T;
imageAlt?: T;
imageLabel?: T;
};
wizard?: T;
testimonials?:
| T
| {
eyebrow?: T;
heading?: T;
items?:
| T
| {
quote?: T;
initials?: T;
name?: T;
role?: T;
id?: T;
};
};
faq?:
| T
| {
eyebrow?: T;
heading?: T;
items?:
| T
| {
q?: T;
a?: T;
id?: T;
};
};
bottomCta?:
| T
| {
eyebrow?: T;
heading?: T;
ctaLabel?: T;
ctaHref?: T;
};
};
meta?:
| T
| {