Builder-Log – Zyklus 2 (Prüfung der Seite / Skripte)
_Datum: 2026-08-30 · Branch: claude/searchnsale-de-page-lm8zfd · Nur READ/Analyse, keine Repo-Dateien verändert._
Kurz-Zusammenfassung
Geprüft wurden alle relevanten Dateien: das Publish-Skript, alle Content-HTMLs, alle Produkt-JSONs, Theme + Design-Plugin (PHP/JSON/CSS/Templates/Parts), Menü-Quellen, claude_desktop_config.json und die READMEs. Automatische Checks (node --check, JSON-Parse, php -l, Gutenberg-Block-Balance, Asset-/Klassen-/Link-Querschnitt) laufen sauber.
Es gibt keine kritischen Fehler. Das Skript ist syntaktisch und logisch korrekt, die beiden neuen Seiten sind sauber eingebunden, das Menü ist über die vier Kernquellen konsistent, das Encoding ist sauberes UTF-8. Gefunden wurden 1x mittel-relevante Doku-Inkonsistenz, 1x mittel-relevantes Kategorie-Slug/Filter-Thema und mehrere geringe Punkte (tote In-Page-Anker, Platzhaltertexte, kosmetischer Streichpreis, ungenutztes Asset).
Findings nach Schweregrad: kritisch: 0 · mittel: 2 · gering: 5
Durchgeführte automatische Checks (alle grün)
| Check | Ergebnis |
|---|---|
node --check scripts/publish-to-wordpress.mjs |
OK |
JSON-Parse: claude_desktop_config.json, 5× content/produkte/*.json, menu.json, theme.json |
alle OK |
php -l für alle 6 PHP-Dateien im Plugin |
keine Syntaxfehler |
Gutenberg-Block-Balance (wp: vs /wp:, inkl. self-closing) in allen HTML/Pattern/Template/Part-Dateien |
ausgeglichen |
sns-* Klassen (17 benutzt) ⊆ in tokens.css definiert (19) |
vollständig abgedeckt |
Referenzierte assets/img/*.svg existieren |
alle vorhanden |
| Encoding / Mojibake | kein Mojibake, sauberes UTF-8 |
Findings
[mittel] menue/README.md ist nicht mit den neuen Nav-Einträgen synchron
- Datei:Zeile:
manuell_upload/menue/README.md:22-29(Abschnitt B, klassisches Theme) und:33-42(Abschnitt C, WP-CLI) - Problem: Beide Anleitungen listen nur
Startseite,Shop(+Pro-Audio/HiFi/Licht & Bühne) undRatgeber. Die in Zyklus 2 neu hinzugekommenen Einträge Vermietung (/vermietung) und Funkfrequenz-Check (/funkfrequenz-check-2026) fehlen. Die vier tatsächlichen Nav-Quellen (menu.json,menue/hauptmenue.html,theme/.../parts/header.html,plugin/.../patterns/header-nav.php) enthalten diese Einträge dagegen konsistent. Wer die klassische bzw. WP-CLI-Anleitung befolgt, baut ein unvollständiges Menü. - Fix: In Abschnitt B (Tabelle) und C (WP-CLI) je zwei Zeilen ergänzen:
Vermietung /vermietungundFunkfrequenz-Check /funkfrequenz-check-2026(z. B.wp menu item add-custom hauptmenu "Vermietung" /vermietung).
[mittel] Kategorie-Filter-Links: Slug „licht-buehne“ passt nicht zum Auto-Slug; ?cat= ist nicht Woo-Standard
- Datei:Zeile: u. a.
content/startseite.html:91,content/shop-uebersicht.html:53,79,content/funkfrequenz-check-2026.html:92,menu.json:12,menue/hauptmenue.html:12(Link/shop?cat=licht-buehne); Kategorie-Anlage inscripts/publish-to-wordpress.mjs:117-127. - Problem: (a) Der Resolver legt Kategorien nur über
{ name }an und überlässt WooCommerce den Slug. „Pro-Audio“→pro-audiound „HiFi“→hifipassen zu den Links, aber „Licht & Bühne“ wird von WordPress zulicht-buhne/licht-bühneslugifiziert – nicht zu dem in den Links/Menüs verwendetenlicht-buehne. (b)?cat=ist die Core-Post-Kategorie-Query-Var, nicht WooCommerces Produktkategorie-Filter (?product_cat=<slug>bzw. Archiv/product-category/<slug>/). Ohne Zusatzkonfiguration filtern diese CTAs die Produkte nicht. - Fix: In den Produkt-JSONs bzw. im Skript einen expliziten
slugje Kategorie setzen ("categories":[{ "name":"Licht & Bühne","slug":"licht-buehne" }]und im Resolver mitsenden) und die Links auf?product_cat=…bzw. die echten Kategorie-Archiv-URLs umstellen – oder umgekehrt die Link-Slugs an die tatsächlichen Woo-Slugs anpassen. Wichtig: Slug an einer Stelle definieren und überall gleich verwenden.
[gering] Tote In-Page-Anker: #mietanfrage und #opt-in
- Datei:Zeile:
content/vermietung.html:19und:106(Button →#mietanfrage);content/funkfrequenz-check-2026.html:29(Button →#opt-in). - Problem: Kein Element mit
id="mietanfrage"bzw.id="opt-in"auf der Seite – die Formulare stehen nur als Platzhalter-Kommentar (vermietung.html:102,funkfrequenz-check-2026.html:24). Bis das Formular-Plugin/-Shortcode mit passender ID eingesetzt ist, scrollen die CTA-Buttons ins Leere. - Fix: Beim Einsetzen des Formulars dem Container die passende
idgeben (id="mietanfrage"/id="opt-in") bzw. einen Anker ergänzen.
[gering] Platzhaltertexte würden bei Veröffentlichung wörtlich live gehen
- Datei:Zeile: alle 5
content/produkte/*.json(Description: „[Platzhalter: Rückgaberecht/Käuferschutz]“);content/shop-uebersicht.html:100undcontent/informationsseite.html:89(„[Platzhalter: Rückgaberecht / Käuferschutz]“);content/vermietung.html:81(„[Platzhalter: Konditionen]“). - Problem: Das Skript legt zwar als Entwurf an (Absicherung greift), aber unverändert veröffentlicht erscheinen die Klammer-Platzhalter im Frontend.
- Fix: Vor der Veröffentlichung durch die realen Konditionen ersetzen (bewusst als Platzhalter belassen ist OK, dann vor „publish“ prüfen).
[gering] Startseiten-Streichpreis nicht durch Produktdaten gedeckt
- Datei:Zeile:
content/startseite.html:115zeigt Shure SM58 „69,00 € 115,00 €„, abercontent/produkte/01-shure-sm58.jsonhat nurregular_price "69.00"(keinsale_price/115). - Problem: Die Homepage-Kachel ist statisch (nicht datengetrieben); der „Vorher“-Preis 115 ist erfunden und deckt sich nicht mit dem Produkt. Rein kosmetisch, aber inkonsistent.
- Fix: Entweder im JSON
regular_price "115.00"+sale_price "69.00"setzen (dann stimmt der Streichpreis), oder den durchgestrichenen Preis auf der Startseite entfernen.
[gering] Ungenutztes Asset p-headphones.svg
- Datei:
manuell_upload/plugin/searchnsale-design/assets/img/p-headphones.svg - Problem: Existiert, wird aber von keiner Seite/keinem Pattern referenziert (Content nutzt
p-mic,p-speaker,p-amp). Kein Fehler, nur Info. - Fix: Optional in einer Produktkachel verwenden (z. B. Sennheiser HD 25) oder belassen.
[Beobachtung, gering] Kategorie-Zuordnung Kopfhörer / PA quer zur Startseiten-Taxonomie
content/produkte/05-sennheiser-hd25.jsonliegt unterPro-Audio+Kopfhörer, während die Startseiten-/Pattern-Kachel „Kopfhörer“ der HiFi-Kategorie zuordnet.03-qsc-k12-2.json(PA-Box) liegt unterLicht & Bühne(Shop nennt „PA-Systeme“ dort). Beides vertretbar (DJ-Kopfhörer = Pro-Audio, PA unter Bühne), aber nicht 1:1 deckungsgleich mit den drei Marketing-Kategorien. Kein Handlungsbedarf, nur zur Kenntnis für ein stimmiges Taxonomie-Konzept.
Was geprüft und sauber ist
scripts/publish-to-wordpress.mjs–node --checkOK. Kategorie-Resolver (resolveCategoryId/mapCategories, Zeilen 116-141) löst{name}→ID auf, findet per exaktemc.name === name, legt sonst an, cached pro Lauf. SKU-Idempotenz korrekt: Lookup?sku=, vorhanden → PUT/products/{id}, sonst POST (Zeilen 152-162). Seiten idempotent per Slug (status=any), Update per POST auf/pages/{id}(Zeilen 83-95). ENV-Handling sauber (requireEnv, Zeilen 41-47; Produkte laufen im „all“-Modus nur bei gesetzten WC-Keys, Zeile 168). Beide neuen Seiten stehen inPAGES(Zeilen 72-73), beide Dateien existieren.--dry-run/--frontkonsistent.- Content-HTML (alle 5) – Gutenberg-Block-Markup vollständig ausgeglichen; interne CTAs verweisen ausschließlich auf real erzeugte Slugs (
/,/shop,/vermietung,/gebraucht-kaufen-verkaufen,/funkfrequenz-check-2026); sauberes UTF-8, keine kaputten Umlaute. - *
content/produkte/.json** – valides JSON, einheitliche Struktur, 5 eindeutige SKUs (SNS-SM58-001, SNS-MG10XU-001, SNS-K122-001, SNS-PMA600NE-001, SNS-HD25-001), eindeutige Preise, Kategorien im vom Resolver erwarteten[{ "name": … }]-Format. - Theme
searchnsale–theme.jsonvalide (v2, Palette/Typo/Spacing,templatePartsheader+footer).style.cssmit gültigem Theme-Header (Name/Version/Requires) – vollständiges Block-Theme (kein „nur theme.json“-Fehlerfall). Templates (index/page/single) referenzieren die vorhandenen Partsheader/footer; Block-Balance inkl. self-closing korrekt. - Plugin
searchnsale-design– alle 6 PHP-Dateien ohne Syntaxfehler. Pattern-Registrierung (searchnsale-design.php:47-85) registriert Kategoriesearchnsale+ 5 Patterns; alle referenziertenpatterns/.phpexistieren. Assets/Fonts viaenqueue_block_assets(Frontend+Editor). Allesns--Klassen aus Content/Patterns/Parts sind inassets/tokens.cssdefiniert. - Menü-Konsistenz (Kernquellen) –
menu.json,hauptmenue.html,parts/header.html,patterns/header-nav.phpenthalten identisch: Startseite, Shop, Vermietung, Ratgeber, Funkfrequenz-Check (plus Shop-Unterpunkte inmenu.json). Ausnahme siehe Finding zumenue/README.md. claude_desktop_config.json– valides JSON; enthält nur den PlatzhalterDEIN_WSP_MCP_TOKEN, kein echtes Secret. Die README dokumentiert korrekt, dass der historisch committete Token in WordPress rotiert werden muss.- Querschnitt README/Content/Produkte/Theme/Menü – Kategorien (Pro-Audio, HiFi, Licht & Bühne), Marken und Seiten-Slugs sind stimmig; keine toten Verweise außer den oben genannten (Slug-
licht-buehne,?cat=,#mietanfrage/#opt-in).
BUILDER COMPLETE