// seed-block-kitchen-sink.mjs // Fiber Direkt — Block Kitchen Sink // One instance of every block that works without images/file uploads. // // Skipped (require mandatory file uploads or form relationships): // fdHeaderTextImage — image required // fdVideoHero — videoMp4 required // fdLocationsGrid — card images required // fdIconBar — icon items required // fdPartnersLogos — logo items required // fdContactForm — form relationship required // // Run: PAYLOAD_API_URL=http://localhost:3000 PAYLOAD_API_KEY=xxx node seed-block-kitchen-sink.mjs const PAYLOAD_API_URL = process.env.PAYLOAD_API_URL || 'http://localhost:3000' const PAYLOAD_API_KEY = process.env.PAYLOAD_API_KEY // Required for fdFaq answers, fdUspTable descriptions, fdText body function richText(text) { return { root: { type: 'root', children: [ { type: 'paragraph', children: [ { type: 'text', text, format: 0, detail: 0, mode: 'normal', style: '', version: 1 }, ], direction: 'ltr', format: '', indent: 0, version: 1, textFormat: 0, }, ], direction: 'ltr', format: '', indent: 0, version: 1, }, } } async function createPage(slug, title, blocks) { const res = await fetch(`${PAYLOAD_API_URL}/api/pages`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `users API-Key ${PAYLOAD_API_KEY}`, }, body: JSON.stringify({ title, slug, layout: blocks, _status: 'draft' }), }) const data = await res.json() console.log(`${res.ok ? '✓' : '✗'} ${title} (/${slug}): ${res.status}`) if (!res.ok) console.error(JSON.stringify(data.errors || data, null, 2)) return data } async function seed() { if (!PAYLOAD_API_KEY) { console.error('Error: PAYLOAD_API_KEY environment variable is required.') process.exit(1) } console.log(`Seeding to: ${PAYLOAD_API_URL}`) console.log('─'.repeat(60)) await createPage('block-kitchen-sink', 'Block Kitchen Sink', [ // ─── 1. fdHero ──────────────────────────────────────────────── { blockType: 'fdHero', heading: 'Sveriges bästa IT-infrastruktur för företag', subheading: 'Fiber, Backup, Colocation och Cloud', body: 'Dedikerat fiber, backup, colocation och virtuella servrar — allt från en leverantör med svenskt huvudmannaskap.', ctaText: 'Kom igång', ctaLink: '/kontakt', secondaryCtaText: 'Läs mer', secondaryCtaLink: '#tjanster', theme: 'dark', anchorId: 'block-fdhero', }, // ─── 2. fdAlternateHero ──────────────────────────────────────── { blockType: 'fdAlternateHero', heading: 'Er data under svensk lag. Punkt.', description: 'Vi erbjuder dedikerat fiber, backup, colocation och cloud — allt från svenska datacenter, under svensk lag, med svensk support.', primaryCtaText: 'Kontakta oss', primaryCtaLink: '/kontakt', secondaryCtaText: 'Se tjänster', secondaryCtaLink: '#tjanster', sectionBackground: 'white', anchorId: 'block-fdalternatehero', }, // ─── 3. fdStatistics ────────────────────────────────────────── { blockType: 'fdStatistics', heading: 'Fiber Direkt i siffror', sectionBackground: 'navy', numberColor: 'yellow', anchorId: 'block-fdstatistics', stats: [ { number: '99,99 %', label: 'garanterad drifttid' }, { number: '400 Gbit/s', label: 'maxkapacitet dedikerat fiber' }, { number: '24/7', label: 'svensk support' }, { number: '100 %', label: 'svensk infrastruktur' }, ], }, // ─── 4. fdUspChecklist ───────────────────────────────────────── { blockType: 'fdUspChecklist', heading: 'Varför välja Fiber Direkt?', sectionBackground: 'white', imagePosition: 'right', checkColor: 'navy', textColor: 'navy', anchorId: 'block-fduspchecklist', items: [ { text: 'Dedikerat fiber — symmetrisk kapacitet, inte delad' }, { text: 'Skyddsklass 3 — högsta civila säkerhetsklassning' }, { text: 'ISO 27001 — certifierad informationssäkerhet' }, { text: 'Ingen CLOUD Act-exponering — all data stannar i Sverige' }, { text: 'En leverantör, en faktura — fiber, backup, cloud och colocation' }, { text: 'Svensk support dygnet runt — inga chatbotar, inga callcenters' }, ], }, // ─── 5. fdUspTable ──────────────────────────────────────────── { blockType: 'fdUspTable', heading: 'Tekniska fördelar', sectionBackground: 'gray', checkColor: 'navy', textColor: 'navy', anchorId: 'block-fdusptable', rows: [ { title: 'Skyddsklass 3', description: richText('Högsta civila säkerhetsklassning i Sverige. Biometrisk åtkomstkontroll och kameraövervakning dygnet runt.'), }, { title: 'N+1 redundans', description: richText('Redundant kyla och kraft i varje rack. Driftsäkert även vid komponentfel.'), }, { title: 'Symmetrisk fiber', description: richText('Samma hastighet upp som ned — dedikerad kapacitet, inte delad med andra kunder.'), }, { title: 'ISO 27001 & ISO 14001', description: richText('Certifierade för informationssäkerhet och miljöledning. NIS2-redo.'), }, ], }, // ─── 6. fdCardGrid ──────────────────────────────────────────── { blockType: 'fdCardGrid', sectionBackground: 'white', layout: '1-1-1', cardStyle: 'outlined', anchorId: 'block-fdcardgrid', cards: [ { displayMode: 'content', heading: 'Fiber Direkt', contentLines: [ { text: 'Dedikerat fiber med symmetrisk kapacitet — 10 Gbit/s till 400 Gbit/s.', style: 'normal' }, { text: 'Direkt anslutning till svenskt nät utan Big Tech-mellanhänder.', style: 'normal' }, ], }, { displayMode: 'content', heading: 'Server Direkt', contentLines: [ { text: 'Virtuella servrar på svensk infrastruktur. Proxmox-baserad plattform.', style: 'normal' }, { text: 'Ny server på under 5 minuter. Betala för det ni använder.', style: 'normal' }, ], }, { displayMode: 'content', heading: 'Datacenter Direkt', contentLines: [ { text: 'Colocation i Skyddsklass 3 — Stockholm Nord, 1,6 MW kapacitet.', style: 'normal' }, { text: 'Upp till 88 kW per rack. AI/HPC-redo.', style: 'normal' }, ], }, ], }, // ─── 7. fdPricingCard ───────────────────────────────────────── { blockType: 'fdPricingCard', sectionTitle: 'Välj din tjänstenivå', sectionBackground: 'gray', cardStyle: 'navy', buttonColor: 'yellow', titleColor: 'navy', anchorId: 'block-fdpricingcard', cards: [ { title: 'Fiber Basic', subtitle: 'från 1 195 kr/mån', description: 'Dedikerat fiber för mindre kontor och startups.', ctaText: 'Få offert', ctaLink: '/kontakt', bulletPoints: [ { text: '10 Gbit/s symmetrisk' }, { text: 'SLA med ekonomisk garanti' }, { text: 'Svensk support 24/7' }, ], }, { title: 'Fiber Platina', subtitle: 'från 7 995 kr/mån', description: 'Hög kapacitet för krävande verksamheter och datacenter.', ctaText: 'Få offert', ctaLink: '/kontakt', bulletPoints: [ { text: '100 Gbit/s symmetrisk' }, { text: 'BGP-stöd och VLAN-taggning' }, { text: 'Redundanta uplinks' }, { text: 'Prioriterad support' }, ], }, ], }, // ─── 8. fdCtaBanner ─────────────────────────────────────────── { blockType: 'fdCtaBanner', heading: 'Redo att ta kontrollen över er IT?', subheading: 'Boka ett samtal med vårt team. Vi hjälper er hitta rätt upplägg — utan förpliktelser.', ctaText: 'Kontakta oss', ctaLink: '/kontakt', secondaryCtaText: 'Prata med en expert', secondaryCtaLink: '/kontakt', sectionBackground: 'yellow', alignment: 'center', size: 'large', anchorId: 'block-fdctabanner', }, // ─── 9. fdCtaSideImage ──────────────────────────────────────── { blockType: 'fdCtaSideImage', heading: 'Flytta in. Skala upp. Sov gott.', body: 'Vårt team hanterar hela flytten — från planering till driftsättning. Ni behöver inte lyfta ett finger. Och när allt är igång finns vi kvar som er enda IT-kontakt.', ctaText: 'Boka ett möte', ctaLink: '/kontakt', imagePosition: 'right', theme: 'dark', anchorId: 'block-fdctasideimage', }, // ─── 10. fdFaq ──────────────────────────────────────────────── { blockType: 'fdFaq', heading: 'Vanliga frågor', theme: 'light', anchorId: 'block-fdfaq', items: [ { question: 'Lyder min data under CLOUD Act om ni har servrar i EU?', answer: richText('Nej — inte med Fiber Direkt. Vi är ett svenskägt bolag och all infrastruktur finns i Sverige. Ingen data passerar utländsk juridisdiktion, och US Cloud Act gäller inte oss.'), }, { question: 'Vad ingår i er SLA?', answer: richText('Vår SLA garanterar 99,99 % drifttid med ekonomisk kompensation vid avvikelse. Exakt villkor beror på tjänst — kontakta oss för aktuellt avtal.'), }, { question: 'Kan vi skala upp kapaciteten utan att byta leverantör?', answer: richText('Ja. Fibern skalas upp utan att byta hårdvara. Virtuella servrar justeras på minuter. Colocation-kapacitet utökas i samma rack eller med nytt rack.'), }, ], }, // ─── 11. fdTestimonial ──────────────────────────────────────── { blockType: 'fdTestimonial', heading: 'Vad våra kunder säger', sectionBackground: 'gray', layout: 'featured', anchorId: 'block-fdtestimonial', testimonials: [ { quote: 'Vi hade all data i AWS Frankfurt utan egentlig kontroll. Flytten till Fiber Direkt tog tre veckor — och nu sover vi bättre.', authorName: '[REPRESENTANT — kräver verklig kundgodkännande]', authorRole: 'IT-chef', authorCompany: '[Företagsnamn]', }, ], }, // ─── 12. fdServicesGrid ─────────────────────────────────────── { blockType: 'fdServicesGrid', heading: 'Alla tjänster', columns: '4', anchorId: 'block-fdservicesgrid', services: [ { title: 'Fiber', description: 'Dedikerat fiber 10–400 Gbit/s. Symmetrisk kapacitet.', link: '/fiber' }, { title: 'Colocation', description: 'Rack i Skyddsklass 3. Upp till 88 kW per rack.', link: '/colocation' }, { title: 'Virtuellt datacenter', description: 'VPS på Proxmox-plattform. Ny server på 5 minuter.', link: '/virtuellt-datacenter' }, { title: 'Backup', description: 'Automatisk backup till svenska datacenter. 30 dagars retention.', link: '/backup' }, ], }, // ─── 13. fdWideCard ─────────────────────────────────────────── { blockType: 'fdWideCard', heading: 'Klimatsmart sedan dag ett', body: 'Överskottsvärmen från våra datacenter matas in i Stockholms fjärrvärmenät. HVO100 förnybart diesel i reservkraftverken. ISO 14001-certifierade — 20+ år före EU Green Deal.', ctaText: 'Läs om vårt hållbarhetsarbete', ctaLink: '/hallbarhet', cardBackground: 'navy', buttonColor: 'yellow', sectionBackground: 'white', anchorId: 'block-fdwidecard', }, // ─── 14. fdTechProperties ───────────────────────────────────── { blockType: 'fdTechProperties', sectionBackground: 'navy', categoryColor: 'white', valueColor: 'yellow', anchorId: 'block-fdtechproperties', properties: [ { category: 'Skyddsklass', value: '3' }, { category: 'Effekt per rack', value: '88 kW' }, { category: 'Total kapacitet', value: '1,6 MW' }, { category: 'Certifieringar', value: 'ISO 27001 · ISO 14001 · SSF 200' }, ], }, // ─── 15. fdFeatureAnnouncement ──────────────────────────────── { blockType: 'fdFeatureAnnouncement', heading: 'Nyhet: Office Komplett — allt kontoret behöver på en faktura', body: 'Dedikerat fiber, managed WiFi, nätverksswitch och 1 TB svensk molnlagring i ett paket för 2 995 kr/mån.', ctaText: 'Läs mer', ctaLink: '/office-komplett', theme: 'gray', anchorId: 'block-fdfeatureannouncement', }, // ─── 16. fdText ─────────────────────────────────────────────── { blockType: 'fdText', heading: 'Om Fiber Direkt', subheading: 'Svenskägt. Driftsäkert. Ansvarsfullt.', body: richText('Fiber Direkt är ett stockholmsbaserat IT-infrastrukturbolag med eget nät, egna datacenter och egen support. Vi äger vår infrastruktur — vi återsäljer ingenting. Sedan starten har vi levererat dedikerad fiber, colocation och cloud till svenska företag som kräver kontroll, prestanda och datasuveränitet.'), alignment: 'left', textColor: 'navy', sectionBackground: 'white', maxWidth: 'medium', anchorId: 'block-fdtext', }, // ─── 17. fdDataTable ────────────────────────────────────────── { blockType: 'fdDataTable', heading: 'Fibernivåer — översikt', description: 'Alla priser exkl. moms. Exakt pris beror på adress och avtalstid.', dataSource: 'manual', sectionBackground: 'gray', headerStyle: 'navy', stripeRows: true, bordered: false, firstColumnBold: true, anchorId: 'block-fddatatable', headers: [ { text: 'Nivå' }, { text: 'Hastighet' }, { text: 'Pris från' }, ], rows: [ { cells: 'Basic, 10 Gbit/s, 1 195 kr/mån' }, { cells: 'Standard, 40 Gbit/s, Offert' }, { cells: 'Premium, 100 Gbit/s, Offert' }, { cells: 'Platina, 400 Gbit/s, 7 995 kr/mån' }, ], }, // ─── 18. fdTeam ─────────────────────────────────────────────── { blockType: 'fdTeam', heading: 'Möt vårt team', subheading: 'Svenska experter. Svenska svar.', columns: '3', cardStyle: 'navy', sectionBackground: 'white', anchorId: 'block-fdteam', members: [ { name: 'Anna Lindqvist', role: 'Säljansvarig', bio: 'Anna hjälper er hitta rätt lösning för ert kontor eller datacenter.', email: 'anna@fiberdirekt.se', }, { name: 'Marcus Bergström', role: 'Nätverksingenjör', bio: 'Marcus ansvarar för fibernätet och teknisk driftsättning.', }, { name: 'Sara Holm', role: 'Kundsupport', bio: 'Sara är er kontakt för support och felanmälan — dygnet runt.', email: 'support@fiberdirekt.se', }, ], }, // ─── 19. fdNewsletter ──────────────────────────────────────── { blockType: 'fdNewsletter', heading: 'Håll er uppdaterade', description: 'Prenumerera på nyheter om fiber, cloud och IT-infrastruktur i Sverige.', submitEndpoint: '/api/newsletter', buttonText: 'Prenumerera', successMessage: 'Tack! Ni är nu prenumeranter.', consentText: 'Jag godkänner att mina uppgifter används enligt integritetspolicyn.', privacyPolicyLink: '/integritetspolicy', collectName: false, collectCompany: false, layout: 'inline', sectionBackground: 'navy', textColor: 'auto', }, // ─── 20. fdTags ────────────────────────────────────────────── { blockType: 'fdTags', heading: 'Tjänster och teknologier', tagStyle: 'navy', tagSize: 'large', alignment: 'left', sectionBackground: 'white', tags: [ { text: 'Fiber' }, { text: 'Colocation' }, { text: 'Virtuellt datacenter' }, { text: 'Backup' }, { text: 'Layer 2' }, { text: 'ISO 27001' }, { text: 'Skyddsklass 3' }, { text: 'NIS2' }, { text: 'GDPR' }, ], }, // ─── 21. fdServiceChooser ───────────────────────────────────── { blockType: 'fdServiceChooser', heading: 'Välj er bransch', description: 'Vi har erfarenhet av IT-infrastruktur för ett brett spektrum av branscher.', sectionBackground: 'gray', anchorId: 'block-fdservicechooser', categories: [ { label: 'Kontor & Företag', intro: 'Turnkey IT för kontor — fiber, WiFi, switch och molnlagring på en faktura.', services: [ { title: 'Office Komplett', description: 'Fiber + WiFi + switch + 1 TB cloud. 2 995 kr/mån.', ctaText: 'Läs mer', ctaLink: '/office-komplett' }, { title: 'Dedikerat fiber', description: 'Symmetrisk kapacitet direkt till ert kontor.', ctaText: 'Se priser', ctaLink: '/fiber' }, ], }, { label: 'Datacenter & Hosting', intro: 'Hög densitet, hög säkerhet — colocation i Stockholm Nord.', services: [ { title: 'Colocation', description: 'Från halvskåp till full cage. Upp till 88 kW per rack.', ctaText: 'Se alternativ', ctaLink: '/colocation' }, { title: 'Virtuellt datacenter', description: 'VPS på Proxmox. Ny server på 5 minuter.', ctaText: 'Beräkna kostnad', ctaLink: '/virtuellt-datacenter' }, ], }, ], }, // ─── 22. fdSpecCards ────────────────────────────────────────── { blockType: 'fdSpecCards', heading: 'Colocation — specifikationer', description: 'Stockholm Nord datacenter. Industrins starkaste civila säkerhetsklassning.', ctaText: 'Beräkna din kostnad', ctaLink: '/kontakt', layout: 'sideBySide', cardStyle: 'outlined', sectionBackground: 'navy', anchorId: 'block-fdspeccards', cards: [ { title: 'Halvskåp', description: '18U, 24/7-bevakat.', specLabel: 'Pris från', specValue: '3 495 kr/mån' }, { title: 'Helskåp', description: '40U, N+1 redundans, KVM ingår.', specLabel: 'Pris från', specValue: '5 995 kr/mån' }, { title: 'Bur', description: 'Dedikerat burutrymme för större installationer.', specLabel: 'Pris', specValue: 'Offert' }, ], }, // ─── 23. fdLinkCards ────────────────────────────────────────── { blockType: 'fdLinkCards', heading: 'Utforska våra tjänster', description: 'Allt ni behöver — från en leverantör.', columns: '3', cardStyle: 'outlined', sectionBackground: 'navy', anchorId: 'block-fdlinkcards', cards: [ { title: 'Dedikerat fiber\n10–400 Gbit/s', linkLabel: 'Se fibertjänster', linkUrl: '/fiber' }, { title: 'Virtuella servrar\nProxmox-plattform', linkLabel: 'Utforska VPS', linkUrl: '/virtuellt-datacenter' }, { title: 'Colocation\nSkyddsklass 3', linkLabel: 'Mer om datacenter', linkUrl: '/colocation' }, ], }, // ─── 24. fdQuiz ─────────────────────────────────────────────── { blockType: 'fdQuiz', heading: 'Vilken tjänst passar er?', description: 'Svara på tre frågor — vi rekommenderar rätt produkt.', triggerLabel: 'Starta quiz', sectionBackground: 'gray', anchorId: 'block-fdquiz', outcomes: [ { key: 'fiber', title: 'Dedikerat fiber', description: 'Er verksamhet kräver pålitlig, symmetrisk uppkoppling. Fiber Direkt levererar från 10 Gbit/s.', ctaText: 'Se fiberalternativ', ctaLink: '/fiber', }, { key: 'vdc', title: 'Virtuellt datacenter', description: 'Ni vill ersätta fysiska servrar med flexibla virtuella maskiner på svensk mark.', ctaText: 'Utforska VPS', ctaLink: '/virtuellt-datacenter', }, { key: 'colo', title: 'Colocation', description: 'Ni har egen hårdvara och behöver säkert utrymme med hög driftsäkerhet.', ctaText: 'Se colocation', ctaLink: '/colocation', }, ], questions: [ { question: 'Vad är er viktigaste utmaning just nu?', options: [ { label: 'Dålig eller instabil uppkoppling', outcomeKeys: 'fiber' }, { label: 'Kostsam och svårskalad serverhårdvara', outcomeKeys: 'vdc' }, { label: 'Serverrummet räcker inte till', outcomeKeys: 'colo' }, ], }, { question: 'Hur hanterar ni er infrastruktur idag?', options: [ { label: 'Delad bredbandsuppkoppling', outcomeKeys: 'fiber' }, { label: 'Egna fysiska servrar på kontoret', outcomeKeys: 'vdc,colo' }, { label: 'Blandat moln och egna servrar', outcomeKeys: 'vdc,colo' }, ], }, { question: 'Hur viktig är datasuveränitet för er?', options: [ { label: 'Kritisk — all data måste vara i Sverige', outcomeKeys: 'fiber,vdc,colo' }, { label: 'Viktig men inte absolut krav', outcomeKeys: 'vdc,fiber' }, { label: 'Vi fokuserar mer på pris och prestanda', outcomeKeys: 'vdc' }, ], }, ], }, // ─── 25. fdVideo (YouTube — no upload needed) ───────────────── { blockType: 'fdVideo', heading: 'Fiber Direkt — så fungerar det', description: 'En kort genomgång av hur vi levererar fiber, colocation och cloud.', videoSource: 'youtube', youtubeUrl: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', aspectRatio: '16/9', maxWidth: 'default', sectionBackground: 'white', textColor: 'auto', anchorId: 'block-fdvideo', }, // ─── 26. fdVpsCalculator ────────────────────────────────────── { blockType: 'fdVpsCalculator', heading: 'Beräkna kostnaden för din VPS', description: 'Välj resurser och se priset direkt.', orderCtaText: 'Beställ', orderCtaLink: '/kontakt?subject=vps-bestallning', contactCtaText: 'Frågor? Kontakta oss', contactCtaLink: '/kontakt', sectionBackground: 'gray', pricingCpuPerCore: 120, pricingRamPerGb: 100, pricingSsdPerGb: 4, pricingHddPerGb: 1, pricingWindowsLicense: 250, showAdminFee: false, anchorId: 'block-fdvpscalculator', }, // ─── 27. fdServiceCalc ──────────────────────────────────────── { blockType: 'fdServiceCalc', heading: 'Beräkna er colocation-kostnad', description: 'Välj rack-storlek och tilläggstjänster.', summaryHeading: 'Kostnadsöversikt', totalLabel: 'Totalt per månad', totalSuffix: 'exkl. moms', orderCtaText: 'Beställ', orderCtaLink: '/kontakt', contactCtaText: 'Frågor? Kontakta oss', contactCtaLink: '/kontakt', sectionBackground: 'white', anchorId: 'block-fdservicecalc', optionGroups: [ { groupLabel: 'Rackstorlek', options: [ { label: 'Halvskåp (18U)', price: 3495 }, { label: 'Helskåp (40U)', price: 5995 }, ], }, ], resources: [ { label: 'Extra bandbredd', unit: 'Gbit/s', pricePerUnit: 500, defaultValue: 0, min: 0, max: 10, step: 1, summaryTemplate: 'Extra bandbredd ({value} {unit})', }, ], addons: [ { label: 'Remote hands (10 tim/mån)', price: 1500, description: 'Fysisk assistans i datacenter på begäran.' }, { label: 'KVM-åtkomst', price: 0, description: 'Ingår kostnadsfritt i helskåp.' }, ], fixedFees: [], }, // ─── 28. fdCodeEmbed ────────────────────────────────────────── { blockType: 'fdCodeEmbed', heading: 'Inbäddat formulär', description: 'Exempel på fdCodeEmbed med iframe.', embedType: 'iframe', iframeSrc: 'https://example.com/embed-placeholder', iframeTitle: 'Inbäddat formulär', iframeHeight: '500px', maxWidth: 'narrow', sectionBackground: 'gray', textColor: 'navy', embedBackground: 'card', anchorId: 'block-fdcodeembed', }, // ─── 29. fdContact ──────────────────────────────────────────── { blockType: 'fdContact', heading: 'Kontakta oss', anchorId: 'block-fdcontact', contactMethods: [ { label: 'Telefon: 08-123 456 78', link: 'tel:+4681234567' }, { label: 'E-post: info@fiberdirekt.se', link: 'mailto:info@fiberdirekt.se' }, { label: 'Adress: Stockholm Nord, Sverige', link: 'https://maps.google.com' }, ], }, // ─── 30. fdSpacer ───────────────────────────────────────────── { blockType: 'fdSpacer', height: 'lg', sectionBackground: 'white', }, // ─── 31. fdCtaBanner (closing) ──────────────────────────────── { blockType: 'fdCtaBanner', heading: 'Redo att komma igång?', subheading: 'Kontakta oss idag och få en offert anpassad för er verksamhet.', ctaText: 'Kontakta oss', ctaLink: '/kontakt', sectionBackground: 'navy', alignment: 'center', size: 'large', anchorId: 'block-closing-cta', }, ]) console.log('─'.repeat(60)) console.log('Done. 30 blocks seeded (+ closing CTA = 31 block instances).') console.log() console.log('Skipped blocks (require mandatory file uploads):') console.log(' fdHeaderTextImage — image required') console.log(' fdVideoHero — videoMp4 required') console.log(' fdLocationsGrid — card images required') console.log(' fdIconBar — icon items required') console.log(' fdPartnersLogos — logo items required') console.log(' fdContactForm — form relationship required') } seed().catch((err) => { console.error('Seed failed:', err) process.exit(1) })