mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 15:04:14 +00:00
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:
parent
5cd3f8a1b7
commit
723eefa5b8
2 changed files with 1737 additions and 0 deletions
417
docs/c2s/C2S_MIGRATION_ANALYSIS.md
Normal file
417
docs/c2s/C2S_MIGRATION_ANALYSIS.md
Normal 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
1320
scripts/seed-c2s.ts
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue