Add migration scripts and preload participation awards script

- Created migration index file to manage database migrations.
- Added script to preload participation awards and related blog posts into the CMS.
- Introduced new types and default data for application phases.
- Added award articles data structure for the upcoming awards.
This commit is contained in:
syntaxbullet
2026-06-30 19:10:53 +02:00
parent 9545f2513d
commit 7ff405d1a2
47 changed files with 68728 additions and 986 deletions

View File

@@ -103,7 +103,7 @@ export const homeFields: Field[] = [
name: 'quickCheck',
label: '02 · Schnell-Check eligibility section',
type: 'group',
admin: sectionAdmin('Cream text panel plus right-side stage image and five eligibility rows.'),
admin: sectionAdmin('White text panel plus right-side stage image and five eligibility rows.'),
fields: [
text('eyebrow', 'Eyebrow', homeContent.quickCheck.eyebrow),
textarea('heading', 'Heading', homeContent.quickCheck.heading),
@@ -155,55 +155,9 @@ export const homeFields: Field[] = [
{ name: 'cta', label: 'CTA', type: 'group', fields: linkGroup(homeContent.intro.cta.label, homeContent.intro.cta.url) },
],
},
{
name: 'status',
label: '04 · Application phase slider',
type: 'group',
admin: sectionAdmin('Three-slide status module shown after the award intro.'),
fields: [
{
name: 'activePhase',
label: 'Current phase shown on the homepage',
type: 'select',
defaultValue: homeContent.status.activePhase,
options: [
{ label: '01 · Bewerbungsphase offen', value: '0' },
{ label: '02 · Auswertung / Jury bewertet', value: '1' },
{ label: '03 · Preisverleihung abgeschlossen', value: '2' },
],
admin: { description: 'Only this selected phase is rendered on the frontend; visitors do not see a slider.' },
},
{
name: 'phases',
label: 'Slides',
type: 'array',
maxRows: 3,
defaultValue: homeContent.status.phases,
fields: [
text('num', 'Slide number'),
text('tag', 'Badge'),
{ name: 'pulse', label: 'Show pulse dot', type: 'checkbox', defaultValue: true },
text('phase', 'Phase label'),
text('headline', 'Headline'),
textarea('body', 'Body copy'),
{ name: 'cta', label: 'Slide CTA', type: 'group', fields: linkGroup('', '') },
text('accent', 'Accent color'),
text('bg', 'Background color'),
text('glow', 'Glow color'),
text('meta', 'Meta label'),
text('successApplications', 'Success applications number'),
text('successWinners', 'Success winners number'),
{ name: 'membershipCta', label: 'Membership CTA', type: 'group', fields: linkGroup('Mitglied werden', '/mitglied-werden') },
],
},
text('noActionLabel', 'No CTA fallback label', homeContent.status.noActionLabel),
text('successApplicationsLabel', 'Success applications label', homeContent.status.successApplicationsLabel),
text('successWinnersLabel', 'Success winners label', homeContent.status.successWinnersLabel),
],
},
{
name: 'winners',
label: '05 · Preisträger card grid',
label: '04 · Preisträger card grid',
type: 'group',
admin: sectionAdmin('Blue card grid with featured winner relationships.'),
fields: [
@@ -225,7 +179,7 @@ export const homeFields: Field[] = [
},
{
name: 'testimonials',
label: '06 · Testimonials carousel',
label: '05 · Testimonials carousel',
type: 'group',
admin: sectionAdmin('Portrait carousel and quote copy.'),
fields: [
@@ -247,9 +201,9 @@ export const homeFields: Field[] = [
},
{
name: 'benefits',
label: '07 · Participation benefits',
label: '06 · Participation benefits',
type: 'group',
admin: sectionAdmin('Cream left panel and networking image.'),
admin: sectionAdmin('White left panel and networking image.'),
fields: [
text('eyebrow', 'Eyebrow', homeContent.benefits.eyebrow),
textarea('heading', 'Heading', homeContent.benefits.heading),
@@ -263,7 +217,7 @@ export const homeFields: Field[] = [
},
{
name: 'application',
label: '08 · Application form section',
label: '07 · Application form section',
type: 'group',
admin: sectionAdmin('Final application pitch, award image, embedded form heading, and footnote.'),
fields: [
@@ -282,7 +236,7 @@ export const homeFields: Field[] = [
},
{
name: 'form',
label: '09 · Embedded application form copy and logic labels',
label: '08 · Embedded application form copy and logic labels',
type: 'group',
admin: sectionAdmin('Text, options, and eligibility thresholds used inside the home page multi-step application form.'),
fields: [
@@ -398,10 +352,28 @@ export const homeFields: Field[] = [
},
{
name: 'videoModal',
label: '10 · Video modal placeholder',
label: '10 · Video modal',
type: 'group',
admin: sectionAdmin('Copy shown when the hero video button is clicked.'),
fields: [text('title', 'Title', homeContent.videoModal.title), text('description', 'Description', homeContent.videoModal.description), text('closeLabel', 'Close button label', homeContent.videoModal.closeLabel)],
admin: sectionAdmin('Video and fallback copy shown when the hero video button is clicked.'),
fields: [
{
name: 'video',
type: 'upload',
relationTo: 'media',
label: 'Video',
filterOptions: {
mimeType: {
contains: 'video',
},
},
admin: {
description: 'Choose a video from the media collection. If empty, the frontend shows the fallback copy below.',
},
},
text('title', 'Title', homeContent.videoModal.title),
text('description', 'Description', homeContent.videoModal.description),
text('closeLabel', 'Close button label', homeContent.videoModal.closeLabel),
],
},
],
},