feat: add seed script and migration analysis for complexcaresolutions.de (tenant 10)

Migrates all WordPress content to Payload CMS blocks: 10 pages, 3 testimonials,
navigation, contact form, social links, site settings, and 1 blog post.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2026-02-28 18:46:40 +00:00
parent 5cd3f8a1b7
commit 723eefa5b8
2 changed files with 1737 additions and 0 deletions

View file

@ -0,0 +1,417 @@
# complexcaresolutions.de → Payload CMS Migration Analysis
**Source:** WordPress (Divi Builder) on Hetzner 1
**Target:** Payload CMS Tenant ID 10
**Date:** 2026-02-28
---
## 1. Site Overview
| Property | Value |
|----------|-------|
| Domain | complexcaresolutions.de |
| WordPress URL | https://www.complexcaresolutions.de |
| Theme | Divi + Divi-c2s-child |
| Brand Colors | Navy `#004166`, Gold `#B3AF09` |
| Phone | 0800 80 44 100 |
| Fax | 0800 80 44 190 |
| Email | kontakt@complexcaresolutions.de |
| Company | complex care solutions GmbH |
| Address | Hans-Böckler-Str. 19, 46236 Bottrop |
| Geschäftsführer | Martin Porwoll |
| HRB | 15753 (AG Gelsenkirchen) |
| USt-IdNr | DE334815479 |
| Social Media | LinkedIn, Facebook, Instagram, Twitter, YouTube |
| Datenschutz | alfright.eu (key: `f60250224d4a459a90dbeeb289cd47f9`, tenant: `alfright_schutzteam`) |
| Media Files | 55 images/uploads |
| Status | WordPress returning HTTP 500 (broken) |
---
## 2. Navigation Structure
### Hauptmenü (7 items)
| Order | Label | Slug | Parent |
|-------|-------|------|--------|
| 1 | Patienten | patienten | — |
| 2 | Zweitmeinung | zweitmeinung | Patienten (submenu) |
| 3 | Ärzte | aerzte | — |
| 4 | Versicherungen | versicherungen | — |
| 5 | Über uns | ueber-uns | — |
| 6 | Motivation | motivation | — |
| 7 | Kontakt | kontakt | — |
### Footer Menu (2 items)
| Order | Label | Slug |
|-------|-------|------|
| 1 | Datenschutz | datenschutzerklaerung |
| 2 | Impressum | impressum |
---
## 3. Page Inventory & Content Mapping
### Pages TO MIGRATE (10 substantial pages)
#### 3.1 Startseite (ID: 11, slug: `startseite`)
**Content Structure:**
1. **Hero** — "Willkommen bei complex care solutions" + subline about healthcare company
2. **Image-Text pairs** — Schilddrüsen-Zweitmeinung + Gallenblasen-Zweitmeinung CTAs
3. **Card Grid** — "Die besten Lösungen" (3 cards: Expertenmeinungen, Spezialisierte Unterstützung, Smarte Technologie)
4. **Text Section** — "Wir schaffen Mehrwert" (3 paragraphs about quality, cost control, quality assurance)
5. **Quote/Text** — "Unser Versprechen" (company values statement)
6. **Contact Footer** — Phone, email, social media, contact form
**Payload Blocks:**
- `hero-block` (headline, subline, CTA)
- `image-text-block` × 2 (Schilddrüsen + Gallenblasen sections)
- `card-grid-block` (3 cards: "Die besten Lösungen")
- `text-block` ("Wir schaffen Mehrwert")
- `quote-block` ("Unser Versprechen")
- `contact-form-block`
---
#### 3.2 Patienten (ID: 987511082, slug: `patienten`)
**Content Structure:**
1. **Hero** — "Die beste Versorgung für unsere Patienten"
2. **Text** — "Umfassende medizinische Lösungen" (overview)
3. **Card Grid** — 3 service cards (Zweitmeinung, Intensivpflegeberatung, Medikationsanalyse) with descriptions
4. **Contact Footer**
**Payload Blocks:**
- `hero-block`
- `text-block` (intro)
- `card-grid-block` (3 service cards linking to subpages)
- `contact-form-block`
---
#### 3.3 Zweitmeinung (ID: 32, slug: `zweitmeinung`, LARGEST PAGE 48KB)
**Content Structure:**
1. **Hero** — "Zweitmeinung rettet Leben" + CTA
2. **Section: Kardiologie** — Headline + description + image + 2 blurbs (Qualifizierte Kardiologen, Schnelle Zweitmeinungen)
3. **Section: Onkologie** — Headline + description + image + 2 blurbs
4. **Section: Chirurgie** — Headline + description + image
5. **Section: Intensivmedizin** — Headline + description + image + 2 blurbs
6. **Section: Vorteile** — "Eine zweite Meinung für Ihre Gesundheit" + 3 benefit blurbs
7. **CTA** — "Holen Sie sich eine Zweitmeinung"
8. **Testimonials** — 3 patient testimonials (Basalzellkarzinom, Radiologie, Herzstolpern)
9. **Contact Footer** + integrated Divi contact form
**Payload Blocks:**
- `hero-block`
- `image-text-block` × 4 (Kardiologie, Onkologie, Chirurgie, Intensivmedizin) — each with sub-features
- `card-grid-block` (3 benefit cards)
- `cta-block`
- `testimonials-block` (3 testimonials)
- `contact-form-block`
**Testimonials to seed (Collection):**
1. "Nach einer Gewebeprobe wurde ein Basalzellkarzinom diagnostiziert..." — anonymous patient
2. "Die radiologische Zweitmeinung, die ich erhielt, war ein echter Lebensretter!..." — anonymous patient
3. "Seit einiger Zeit bemerkte ich ein Herzstolpern in meiner Brust..." — anonymous patient
---
#### 3.4 Ärzte (ID: 20, slug: `aerzte`)
**Content Structure:**
1. **Hero** — "Kompetente Unterstützung für Sie und Ihre Patienten" (subtitle: "Für Ärzte")
2. **Text** — "Die beste Unterstützung für Ihre Patienten" (intro question)
3. **Card Grid** — 6 feature cards (Qualitätsdiagnose, Lokale Kapazitäten, Leitlinien, Expertennetzwerk, Über-/Fehlversorgung minimieren, Schnelle Prozesse + Transparenz, Beitrag zum Patientenwohl)
4. **CTA** — "Werden Sie Teil unseres Expertennetzwerks!"
5. **Contact Footer**
**Payload Blocks:**
- `hero-block` (with "Für Ärzte" subtitle)
- `text-block` (intro)
- `card-grid-block` (features)
- `cta-block`
- `contact-form-block`
---
#### 3.5 Versicherungen (ID: 22, slug: `versicherungen`)
**Content Structure:**
1. **Hero** — "Für höchste Versorgungsqualität, intelligent und wirtschaftlich" (subtitle: "Für Krankenkassen")
2. **Text** — "Hochwertige Lösungen für Ihre Versicherten"
3. **Card Grid** — 3 service areas (Datenbasierte Forschung + §25b SGB V, Innovationen §68 SGB V, Strategie)
4. **Card Grid** — "Ihre Vorteile" (3 benefit cards: Kostenersparnis, Bessere Versorgung, Wettbewerbsvorteil)
5. **Image-Text: Data Science** — "Data Science und KI intelligent nutzen" + 3 blurbs
6. **Image-Text: Expertise** — "Spezialisierte Expertise" + description
7. **Image-Text: Strategie** — "Strategie- und Organisationsentwicklung" + 2 blurbs
8. **Contact Footer**
**Payload Blocks:**
- `hero-block`
- `text-block` (intro)
- `card-grid-block` (service areas)
- `card-grid-block` (Vorteile)
- `image-text-block` (Data Science)
- `image-text-block` (Expertise)
- `image-text-block` (Strategie)
- `contact-form-block`
---
#### 3.6 Über uns (ID: 28, slug: `ueber-uns`)
**Content Structure:**
1. **Hero** — "Gesundheit in den besten Händen" + company description
2. **Text** — "Die Geschichte hinter der Gründung" (Martin Porwoll / Whistleblower story)
3. **Card Grid** — "Woran wir glauben" + 3 paragraphs about values
4. **Text** — "Was wir mitbringen" + 3 competency items (Expertise, Netzwerk, Ethische Grundhaltung)
5. **Timeline** — Company history timeline (Divi custom CSS timeline)
6. **Contact Footer**
**Payload Blocks:**
- `hero-block`
- `text-block` (Gründung)
- `text-block` (Woran wir glauben)
- `card-grid-block` (Was wir mitbringen - 3 competency cards)
- `timeline-block` (company history) — NOTE: Timeline had extensive custom CSS in WordPress; may simplify to text or card layout
- `contact-form-block`
---
#### 3.7 Motivation (ID: 30, slug: `motivation`)
**Content Structure:**
1. **Hero** — "Patientenwohl im Mittelpunkt" (subtitle: "Unsere Motivation")
2. **Text** — "Unser Fokus" + 3 paragraphs (patientenzentriert, Transparenz, Expertennetzwerk)
3. **Text** — "Motivation und Geschichte" (Martin Porwoll / Zytoskandal founding story)
4. **Quote** — Martin Porwoll quote about Zytoskandal and his mission
5. **Text** — "Der Zytoskandal Bottrop" (detailed scandal description)
6. **Text** — "Martin Porwolls Weg zum Streiter für das Patientenwohl"
7. **Contact Footer**
**Payload Blocks:**
- `hero-block`
- `card-grid-block` (3 focus areas)
- `text-block` (Motivation und Geschichte)
- `quote-block` (Martin Porwoll quote)
- `text-block` (Zytoskandal)
- `text-block` (Porwolls Weg)
- `contact-form-block`
---
#### 3.8 Kontakt (ID: 26, slug: `kontakt`)
**Content Structure:**
1. **Contact Section** — Phone, email, social media + Divi contact form (Name, Email, Betreff, Nachricht)
**Payload Blocks:**
- `contact-form-block` (linked to form)
**Note:** The WordPress Kontakt page is essentially just the contact footer section that appears on every page. The form has 4 fields: Name, Email, Betreff (Subject), Nachricht (Message).
---
#### 3.9 Impressum (ID: 14, slug: `impressum`)
**Content Structure:**
1. **Hero** — "Impressum"
2. **Text** — Full legal text (company info, Handelsregister, Kontakt, USt-ID, EU-Streitschlichtung, Verbraucherschlichtung)
3. **Contact Footer**
**Payload Blocks:**
- `hero-block`
- `text-block` (legal text, width: narrow)
- `contact-form-block`
---
#### 3.10 Datenschutzerklärung (ID: 16, slug: `datenschutzerklaerung`)
**Content Structure:**
1. **alfright.eu widget** — Privacy policy generated dynamically
2. **Contact Footer**
**Payload Blocks:**
- `hero-block` (headline: "Datenschutzerklärung")
- `html-embed-block` (alfright.eu `<div>` widget with key `f60250224d4a459a90dbeeb289cd47f9`)
- `contact-form-block`
**alfright embed code:**
```html
<div data-alfidcl-type="dps" data-alfidcl-tenant="alfright_schutzteam" data-alfidcl-lang="de-de" data-alfidcl-key="f60250224d4a459a90dbeeb289cd47f9"></div>
<script src="https://app.alfright.eu/js/alcl/alcl.js" async></script>
```
**Note:** c2s uses the alfright.eu `<div>` widget (not iframe like zweitmeinu.ng). This requires both the div AND the script tag to be embedded.
---
### Pages TO SKIP (4 placeholder/empty pages)
| Page | Reason |
|------|--------|
| Blog (ID: 24) | Empty — only 29 chars of content (empty Divi placeholder) |
| Medikationsanalyse (ID: 34) | Only contains contact footer section, no real content |
| Intensivpflegeberatung (ID: 38) | Only contains contact footer section, no real content |
| Klinik (ID: 987510888) | Lorem ipsum placeholder content |
---
### Blog Post TO MIGRATE (1)
#### "Geheimnis der guten Fürsorge" (ID: 987511216)
**Slug:** `geheimnis-der-guten-fuersorge-warum-uebertherapie-ein-gesellschaftliches-problem-ist`
**Content:** Long-form article (~7800 chars) about Übertherapie (over-treatment) in healthcare
**Structure:** Pure text (Gutenberg paragraphs), no Divi shortcodes
**Category:** Blog/News
**Payload Collection:** `posts` (with tenant_id = 10)
**Content:** Rich text (Lexical paragraphs)
---
## 4. Collections to Seed
### 4.1 Site Settings (1 record)
```
site_name: "complex care solutions GmbH"
site_url: "https://complexcaresolutions.de"
company_name: "complex care solutions GmbH"
address: "Hans-Böckler-Str. 19"
zip: "46236"
city: "Bottrop"
phone: "0800 80 44 100"
fax: "0800 80 44 190"
email: "kontakt@complexcaresolutions.de"
```
### 4.2 Social Links (2 confirmed + 3 placeholder)
| Platform | URL | Status |
|----------|-----|--------|
| LinkedIn | https://de.linkedin.com/company/complex-care-solutions-gmbh | Confirmed |
| Facebook | https://www.facebook.com/complex-care-solutions-GmbH | Confirmed |
| Instagram | — | Listed in nav but no URL set in WordPress |
| Twitter/X | — | Listed in nav but no URL set in WordPress |
| YouTube | — | Listed in nav but no URL set in WordPress |
**Seed only LinkedIn + Facebook** (the others have no URLs configured).
### 4.3 Navigation (1 record)
**mainMenu:**
1. Patienten → `/patienten`
- Zweitmeinung → `/zweitmeinung` (submenu)
2. Ärzte → `/aerzte`
3. Versicherungen → `/versicherungen`
4. Über uns → `/ueber-uns`
5. Motivation → `/motivation`
6. Kontakt → `/kontakt`
**footerMenu:**
1. Datenschutz → `/datenschutzerklaerung`
2. Impressum → `/impressum`
### 4.4 Contact Form (1 form, 4 fields)
| Field | Type | Required |
|-------|------|----------|
| Name | text | yes |
| Email | email | yes |
| Betreff | text | yes |
| Nachricht | textarea | yes |
Email notification → `kontakt@complexcaresolutions.de`
### 4.5 Testimonials (3 records)
1. Basalzellkarzinom patient — quote about finding right therapy
2. Radiology second opinion patient — "Lebensretter" quote
3. Heart patient — Herzstolpern/stress diagnosis
### 4.6 Pages (10 pages)
See Section 3 for full content mapping.
### 4.7 Posts (1 blog post)
"Geheimnis der guten Fürsorge warum Übertherapie ein gesellschaftliches Problem ist"
---
## 5. Media Files to Migrate
55 total WordPress media files. Key images:
| Image | Used On |
|-------|---------|
| c2s_master_logo_400x130.png | Site logo |
| Favicon-c2s.png | Favicon |
| c2s_startseite.jpg | Homepage hero |
| c2s_startseite_2.jpg | Homepage section |
| c2s_startseite_loesungen.jpg | Homepage solutions |
| c2s_startseite_versprechen.jpg | Homepage promise |
| zweitmeinung.jpg | Zweitmeinung hero |
| zweitmeinung_desktop.jpg | Zweitmeinung wide |
| zweitmeinung_herz.jpg | Kardiologie section |
| zweitmeinung_onkologie.jpg | Onkologie section |
| zweitmeinung_chirurgie.jpg | Chirurgie section |
| zweitmeinung_intensiv.jpg | Intensivmedizin section |
| patienten.jpg | Patienten hero |
| aerzte.jpg | Ärzte hero |
| krankenversicherung.jpg | Versicherungen hero |
| medikationsanalyse.jpg | Medikationsanalyse hero |
| tbvs-image-person-1024x1024-1.png | Martin Porwoll portrait |
| tbvs-image-2560x1440-1.png | Hero background |
| post-4.jpg | Blog post image |
| Various AdobeStock_*.jpg | Section backgrounds |
**Strategy:** Upload to Payload media collection with `tenant_id: 10`. Download from WordPress `wp-content/uploads/` on Hetzner 1.
---
## 6. Key Differences from zweitmeinu.ng
| Aspect | zweitmeinu.ng (Tenant 12) | complexcaresolutions.de (Tenant 10) |
|--------|--------------------------|-------------------------------------|
| Pages | 9 seeded | 10 needed |
| Services | 6 (dedicated collection) | Embedded in page content (no service collection needed) |
| FAQs | 24 items | None |
| Blog Posts | 0 | 1 |
| Testimonials | 0 | 3 |
| Contact Form | 4 fields | 4 fields (same: Name, Email, Betreff, Nachricht) |
| Datenschutz | iframe (alfright.eu) | div widget (alfright.eu, different key) |
| Target Audience Pages | None | 3 (Patienten, Ärzte, Versicherungen) |
| Content Volume | Medium | Large (Zweitmeinung page alone is 48KB) |
---
## 7. Implementation Plan
### Phase 1: Seed Script (`scripts/seed-c2s.ts`)
1. Create site settings for tenant 10
2. Create 5 social links
3. Create navigation (mainMenu with Patienten submenu + footerMenu)
4. Create contact form (4 fields)
5. Create 3 testimonials
6. Create 10 pages with block-based layout
7. Create 1 blog post
### Phase 2: Media Migration
1. Download all 55 media files from WordPress on Hetzner 1
2. Upload to Payload via Local API
3. Link media IDs to pages/blocks (hero images, image-text sections)
### Phase 3: Frontend (complexcaresolutions.de)
- Either create dedicated Next.js frontend OR
- Reuse existing frontend framework (like zweitmeinu.ng's BlockRenderer pattern)
- Same design system: Navy #004166, Gold #B3AF09
### Phase 4: DNS/Hosting Cutover
- Replace WordPress on Hetzner 1 with Next.js frontend
- Point domain to new frontend
- Verify all pages, SEO, redirects
---
## 8. Existing Payload Data (Tenant 10)
| Collection | Count |
|------------|-------|
| Pages | 0 |
| Site Settings | 0 |
| Navigations | 0 |
| Services | 0 |
| Forms | 0 |
| Posts | 0 |
| FAQs | 0 |
| Social Links | 0 |
| Testimonials | 0 |
**Tenant 10 is completely empty — clean slate for seeding.**

1320
scripts/seed-c2s.ts Normal file

File diff suppressed because it is too large Load diff