From 197d45f9e48ed747ea2a71d014753cd9bef37670 Mon Sep 17 00:00:00 2001 From: Martin Porwoll Date: Fri, 13 Feb 2026 21:07:02 +0000 Subject: [PATCH] chore: add blogwoman seed script, ignore playwright-mcp Co-Authored-By: Claude Opus 4.6 --- .gitignore | 1 + scripts/seed-blogwoman-coming-soon.ts | 306 ++++++++++++++++++++++++++ 2 files changed, 307 insertions(+) create mode 100644 scripts/seed-blogwoman-coming-soon.ts diff --git a/.gitignore b/.gitignore index 0d6a155..9bdc413 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ node_modules/ /blob-report/ /playwright/.cache/ *.sql +.playwright-mcp/ diff --git a/scripts/seed-blogwoman-coming-soon.ts b/scripts/seed-blogwoman-coming-soon.ts new file mode 100644 index 0000000..0b9a37b --- /dev/null +++ b/scripts/seed-blogwoman-coming-soon.ts @@ -0,0 +1,306 @@ +/** + * BlogWoman Coming Soon Page Seed Script + * + * Creates a Coming Soon page for the BlogWoman tenant + * + * Run with: npx tsx scripts/seed-blogwoman-coming-soon.ts + */ + +import { getPayload } from 'payload' +import config from '../src/payload.config' + +// Helper to create Lexical Rich Text content +function createRichText(content: string | string[]): object { + const paragraphs = Array.isArray(content) ? content : [content] + return { + root: { + type: 'root', + children: paragraphs.map((text) => ({ + type: 'paragraph', + children: [{ type: 'text', text }], + })), + direction: 'ltr', + format: '', + indent: 0, + version: 1, + }, + } +} + +async function seedComingSoonPage() { + console.log('🚀 Starting BlogWoman Coming Soon Page Seed...\n') + + const payload = await getPayload({ config }) + + // Find BlogWoman tenant + const tenantResult = await payload.find({ + collection: 'tenants', + where: { slug: { equals: 'blogwoman' } }, + }) + + if (tenantResult.docs.length === 0) { + console.error('❌ BlogWoman tenant not found! Run seed-blogwoman.ts first.') + process.exit(1) + } + + const tenantId = tenantResult.docs[0].id as number + console.log(`✓ Found BlogWoman tenant (ID: ${tenantId})`) + + // Coming Soon Page Definition + const comingSoonPage = { + title: 'Coming Soon', + slug: 'coming-soon', + status: 'published', + hero: { + headline: 'BlogWoman kommt bald', + subline: 'FĂŒr Frauen, die Karriere, Familie & Stil ernst nehmen.', + }, + layout: [ + // Hero Block - Main Coming Soon Message + { + blockType: 'hero-block', + headline: 'BlogWoman', + subline: 'Kommt bald.', + alignment: 'center', + overlay: true, + overlayOpacity: 0.5, + textColor: 'light', + }, + // Text Block - Teaser + { + blockType: 'text-block', + width: 'medium', + content: createRichText([ + 'Systeme statt Motivation.', + 'FĂŒr Frauen, die Karriere, Familie und Stil ernst nehmen.', + '', + 'BlogWoman ist das Projekt von Dr. Caroline Porwoll – Unternehmerin, Mutter und Systemdenkerin.', + '', + 'Hier entstehen praktische Systeme fĂŒr alle, die mehr wollen als Work-Life-Balance-SprĂŒche.', + ]), + }, + // Stats Block - Launch Date / Countdown Placeholder + { + blockType: 'stats-block', + headline: 'Was dich erwartet', + stats: [ + { + value: '9', + label: 'YouTube-Serien', + description: 'GRFI, Investment-Piece, Regeneration & mehr', + }, + { + value: '4', + label: 'Content-SĂ€ulen', + description: 'Stil, Systeme, Energie, Karriere×Familie', + }, + { + value: '∞', + label: 'Praktische Tipps', + description: 'Keine Theorie. Nur was funktioniert.', + }, + ], + columns: 3, + backgroundColor: 'light', + }, + // Text Block - What's Coming + { + blockType: 'text-block', + width: 'medium', + content: { + root: { + type: 'root', + children: [ + { + type: 'heading', + tag: 'h2', + children: [{ type: 'text', text: 'Die BlogWoman Serien' }], + }, + { + type: 'list', + listType: 'bullet', + children: [ + { + type: 'listitem', + children: [ + { type: 'text', text: 'GRFI – Get Ready For Impact', format: 1 }, + { type: 'text', text: ' – In 7-10 Minuten vom Alltag zur PrĂ€senz' }, + ], + }, + { + type: 'listitem', + children: [ + { type: 'text', text: 'Investment-Piece', format: 1 }, + { type: 'text', text: ' – 1 Teil, 3 Looks, 1 ehrliche Rechnung' }, + ], + }, + { + type: 'listitem', + children: [ + { type: 'text', text: 'Pleasure P&L', format: 1 }, + { type: 'text', text: ' – Gönnen mit ROI' }, + ], + }, + { + type: 'listitem', + children: [ + { type: 'text', text: 'Regeneration', format: 1 }, + { type: 'text', text: ' – 20-Minuten-Resets fĂŒr Körper und Kopf' }, + ], + }, + { + type: 'listitem', + children: [ + { type: 'text', text: 'Backstage', format: 1 }, + { type: 'text', text: ' – Ein Tag, real. Keine Filter.' }, + ], + }, + ], + }, + ], + direction: 'ltr', + format: '', + indent: 0, + version: 1, + }, + }, + }, + // Newsletter Block - Stay Updated + { + blockType: 'newsletter-block', + headline: 'Sei dabei, wenn es losgeht', + description: + 'Trag dich in den Newsletter ein und erfahre als Erste, wenn BlogWoman startet. Plus: Exklusive Launch-Inhalte nur fĂŒr Abonnentinnen.', + buttonText: 'BENACHRICHTIGEN', + privacyText: 'Kein Spam. Jederzeit abmelden. Datenschutz beachten.', + source: 'coming-soon', + }, + // Divider + { + blockType: 'divider-block', + style: 'line', + spacing: 'medium', + }, + // Text Block - About Caroline (Teaser) + { + blockType: 'text-block', + width: 'narrow', + content: { + root: { + type: 'root', + children: [ + { + type: 'heading', + tag: 'h3', + children: [{ type: 'text', text: 'Die Frau hinter BlogWoman' }], + }, + { + type: 'paragraph', + children: [ + { + type: 'text', + text: 'Dr. Caroline Porwoll ist promovierte Wirtschaftswissenschaftlerin, GeschĂ€ftsfĂŒhrerin der Complex Care Solutions GmbH und Mutter.', + }, + ], + }, + { + type: 'paragraph', + children: [ + { + type: 'text', + text: '„Ich glaube nicht an Work-Life-Balance – ich glaube an Systeme, die beides möglich machen."', + format: 2, // italic + }, + ], + }, + ], + direction: 'ltr', + format: '', + indent: 0, + version: 1, + }, + }, + }, + // CTA Block - Social Links + { + blockType: 'cta-block', + headline: 'Folge BlogWoman', + description: 'Auf YouTube und Instagram startet der Content noch vor dem Website-Launch.', + backgroundColor: 'dark', + buttons: [ + { + text: 'YouTube abonnieren', + link: 'https://youtube.com/@blogwoman', + style: 'primary', + }, + { + text: 'Instagram folgen', + link: 'https://instagram.com/blogwoman.de', + style: 'secondary', + }, + ], + }, + ], + seo: { + metaTitle: 'BlogWoman – Coming Soon | Karriere, Familie & Stil mit System', + metaDescription: + 'BlogWoman kommt bald. FĂŒr Frauen, die Karriere, Familie und Stil ernst nehmen. Systeme statt Motivation. Von Dr. Caroline Porwoll.', + }, + } + + // Check if page already exists + const existingPage = await payload.find({ + collection: 'pages', + where: { + and: [{ slug: { equals: 'coming-soon' } }, { tenant: { equals: tenantId } }], + }, + }) + + if (existingPage.docs.length > 0) { + // Update existing page + await payload.update({ + collection: 'pages', + id: existingPage.docs[0].id, + data: { + ...comingSoonPage, + tenant: tenantId, + } as any, + }) + console.log(`✓ Updated Coming Soon page (ID: ${existingPage.docs[0].id})`) + } else { + // Create new page + const createdPage = await payload.create({ + collection: 'pages', + data: { + ...comingSoonPage, + tenant: tenantId, + } as any, + }) + console.log(`✓ Created Coming Soon page (ID: ${createdPage.id})`) + } + + console.log('\n========================================') + console.log('✅ Coming Soon Page Seed completed!') + console.log('========================================') + console.log(` +Page URL: /coming-soon +Tenant: BlogWoman (ID: ${tenantId}) + +Blocks used: +- HeroBlock (main coming soon message) +- TextBlock (teaser content) +- StatsBlock (what's coming preview) +- TextBlock (series preview list) +- NewsletterBlock (email signup) +- DividerBlock +- TextBlock (about Caroline teaser) +- CTABlock (social media links) +`) + + process.exit(0) +} + +seedComingSoonPage().catch((error) => { + console.error('❌ Seed failed:', error) + process.exit(1) +})