Arbeitsanleitung
Wie der Arbeitsbereich eingerichtet ist, wie die Tools ausgeführt werden und wie es weitergeht.
Datenfluss
Der Scraper speichert immer zuerst in dashboard/project/.
Niemals direkt in dashboard/content/ neu ausführen —
das würde manuell geprüfte Inhalte ohne Warnung überschreiben.
Dateien von project/ nach content/ nur verschieben, nachdem die Ausgabe überprüft wurde.
Aktueller Stand
| Phase | Was gemacht wurde | Status |
|---|---|---|
| 0 | Sitemap & IA — Zielstruktur, URL-Entscheidungen | ✓ Abgeschlossen |
| 1 | 76 Seiten + 214 Beiträge gescrapped → dashboard/content/ | ✓ Abgeschlossen |
| 2 | Inhaltsprüfung — strukturelle Artefakte bereinigt, Texte verbatim | ✓ Abgeschlossen |
| 3 | Komponentenübersicht — 15 Bricks-Komponenten in components.yaml | ✓ Abgeschlossen |
| 4 | Seitenweiter Wireframe — wireframe-prompt.md in einer neuen Claude-Sitzung verwenden | Ausstehend |
| 5 | Weiterleitungs- & Meta-Plan — 36 Seiten-Weiterleitungen + 214 Beitrags-Weiterleitungen in redirects.csv | ✓ Abgeschlossen |
Einrichtung
Python-Umgebung (Scraper & Skripte)
Einmalig vom Repo-Root ausführen. Die venv ist bereits eingerichtet, wenn der Scraper zuvor ausgeführt wurde.
cd /Users/manc/Projects/maconda-organizer
python3 -m venv .venv
.venv/bin/pip install playwright beautifulsoup4 markdownify pyyaml lxml requests
.venv/bin/playwright install chromium Dashboard (diese App)
Dev-Server auf localhost:4321. Aus dem dashboard/-Verzeichnis ausführen.
cd /Users/manc/Projects/maconda-organizer/dashboard
npm install # first time only
npm run dev # dev server → http://localhost:4321
npm run build # production build → dist/ Skript-Referenz
Alle Skripte werden vom Repo-Root mit .venv/bin/python <script> ausgeführt.
| Skript | Phase | Funktion | Schreibt nach |
|---|---|---|---|
| scrape.py | 1 | Crawlt die Live-Site via Sitemap, rendert jede URL mit Playwright, extrahiert Inhalte + Meta als Markdown, erstellt Fullpage-Screenshots, paart DE/EN via hreflang. | dashboard/project/ (Zwischenspeicher) |
| apply_components.py | 3 | Schreibt die components:-Liste aus components.yaml in jedes Seiten-Frontmatter. Nach Aktualisierung der Komponentenübersicht ausführen. | dashboard/content/pages/**/de.md + en.md überschreibt Dateien |
| check_coverage.py | 3 | Prüft, ob jede Seite eine nicht-leere Komponentenliste hat und alle referenzierten Komponentennamen in components.yaml existieren. Schreibgeschützt — jederzeit sicher ausführbar. | nur stdout |
| fill_phase5.py | 5 | Füllt proposed_url in allen Seiten-Frontmatters und regeneriert dashboard/inventory/redirects.csv mit old_url → new_url → note. Enthält die URL-Entscheidungsregeln. | dashboard/content/pages/**/de.md + en.md · inventory/redirects.csv überschreibt Dateien |
| meta_check.py | 5 | Durchsucht alle Seiten-Frontmatters nach fehlenden meta_description und erstellt eine meta-checklist.md-Zusammenfassung. | dashboard/inventory/meta-checklist.md |
Scraper erneut ausführen
Vollständiger Neucrawl
Der Scraper speichert die Ausgabe immer unter dashboard/project/.
Das bestehende dashboard/content/ wird niemals automatisch verändert.
.venv/bin/python scrape.py https://www.maconda.de
Nach dem Lauf: dashboard/project/content/ und dashboard/project/inventory/ prüfen,
dann manuell in dashboard/content/ und dashboard/inventory/ verschieben.
Einzelne URL (Stichprobe oder neue Seite)
.venv/bin/python scrape.py https://www.maconda.de https://www.maconda.de/karriere/analyst/ Zusätzliche URLs nach der Basis-Domain werden zusätzlich zur Sitemap gescrapped. Nützlich für Seiten, die nicht in der Sitemap sind, oder zum Aktualisieren eines einzelnen Eintrags.
Bei Selektor-Problemen
Der Scraper holt Inhalte aus zwei Containern (site-spezifisch):
- Banner (H1 + Intro):
.header-banner .header-text - Body:
#content .site-content
Falls dem extrahierten Markdown die Überschrift fehlt oder Nav/Footer-Inhalte eingezogen werden,
das gerenderte DOM nach dem richtigen Selektor inspizieren und
BANNER_SELECTOR / CONTENT_SELECTORS oben in scrape.py aktualisieren.
Immer an einer einzelnen URL testen, bevor alles neu gecrawlt wird.
Wie geht es weiter
Seitenweiter Wireframe
Eine neue Claude-Sitzung in diesem Repo öffnen und den Inhalt von
wireframe-prompt.md als erste Nachricht einfügen.
Dieser Prompt informiert Claude über den aktuellen Stand (Phasen 0–3 + 5 abgeschlossen) und weist an, einen
statischen, abhängigkeitsfreien HTML-Wireframe unter wireframe/ zu erstellen.
Ausgabe: wireframe/index.html + ein Partial pro Komponente:Variante
+ eine zusammengebaute Seite pro Gruppe. Low-Fi beschriftete Boxen — kein Design-Comp.
Bricks-Aufbau — was dieses Dashboard bietet
- Alle 301-Weiterleitungen vor dem DNS-Wechsel in WP Redirection (oder Cloudflare) aktiv
- Wildcard-Beitrags-Weiterleitungsregeln aktiv: ^/([^/]+)/$ → /aktuelles/$1/ und ^/en/([^/]+)/$ → /en/news/$1/
- hreflang-Alternativen für jedes DE/EN-Seitenpaar mit den neuen URLs konfiguriert
- 59 fehlende Seiten-Meta-Beschreibungen verfasst
- og:image seitenspezifisch für wichtige Serviceseiten und Startseite gesetzt
- Google Search Console nach dem Launch auf neuer Domain / neuem Pfad verifiziert
Grundregeln
Siehe auch