WPTransformer β Build Prompt
Crumbforest Β· Bits With Attitude Β· MIT Β· CKL v1.0
Du bist ein Coding-Agent im Crumbforest-Γkosystem. Lies dieses Dokument vollstΓ€ndig bevor du eine Zeile schreibst. Dann schreibe Code der atmet.
Kontext & Haltung
WPTransformer ist ein CLI-Prozess, kein Framework, kein SaaS. Er konvertiert Legacy-CMS-Inhalte (WordPress, Joomla) in statische Vektoren.
Kernprinzipien β nicht verhandelbar:
- Offline by Default β kein externes Netz wΓ€hrend der Transformation
- No Central Command β kein Cloud-Dienst, keine API-Keys, keine Telemetrie
- Data doesn't exist β kein Logging von Kundendaten nach auΓen
- ls -la β alles prΓΌfbar, alles lesbar, fΓΌr immer
- Human Loop β Maschine hΓ€lt inne, Mensch entscheidet
Repo-Struktur
wptransformer/
β
βββ PROMPT.md β diese Datei
βββ README.md β kurz, direkt, kein Marketing
βββ LICENSE β MIT + CKL v1.0
β
βββ bin/
β βββ wpt β CLI-Einstiegspunkt (PHP-Script, Shebang)
β
βββ src/
β βββ Parser/
β β βββ WPSQLParser.php β SQL-Dump β strukturierte Daten
β β βββ WPCrawler.php β Live-Crawl (geplant, stub)
β β βββ JoomlaParser.php β Joomla-Export (in Entwicklung, stub)
β β
β βββ Intermediate/
β β βββ IntermediateDB.php β SQLite-Layer (editierbar, lokal)
β β βββ PostModel.php β Datenmodell: Post/Page/Draft
β β βββ MediaModel.php β Bilder, AnhΓ€nge
β β
β βββ Builder/
β β βββ StaticBuilder.php β HTML/CSS/JS Generator
β β βββ HugoBuilder.php β Hugo-kompatibles Markdown + config.toml
β β βββ AssetHandler.php β Bilder kopieren, Pfade korrigieren
β β
β βββ Output/
β β βββ ZipExporter.php β ZIP-Download
β β βββ FTPDeploy.php β Klassisches Shared Hosting
β β βββ VPNSync.php β Nullfeld-Sync (194.164.194.191)
β β βββ USBExport.php β Lokale Kopie, kein Netz nΓΆtig
β β
β βββ HumanLoop/
β βββ ReviewInterface.php β CLI-Ausgabe: Was geht live, was ins Archiv
β βββ ConfirmStep.php β HOLD-Schritt vor Deploy
β
βββ templates/
β βββ base.html β Minimales HTML-GerΓΌst
β βββ post.html β Einzelseite
β βββ index.html β Γbersicht
β βββ hugo/
β βββ config.toml β Hugo-Basiskonfiguration
β βββ archetypes/
β βββ default.md β Hugo Post-Template
β
βββ data/
β βββ .gitkeep β Intermediate SQLite lebt hier (nicht im Repo)
β
βββ public/
β βββ .gitkeep β Static Output lebt hier (nicht im Repo)
β
βββ tests/
β βββ fixtures/
β β βββ sample_wp.sql β Minimal-WP-Dump zum Testen
β β βββ sample_joomla.xml β Minimal-Joomla-Export
β βββ ParserTest.php
β
βββ .gitignore
Der Prozess β Schritt fΓΌr Schritt
INPUT
βββ SQL-Dump / Joomla-Export / Leerer Brief (Neukunde)
β
βΌ
STEP 1: Parser
WPSQLParser::parse($file)
β gibt Array zurΓΌck: [ posts[], pages[], drafts[], media[] ]
β keine Datenbankverbindung nΓΆtig β pure PHP, regex + DOM
β
βΌ
STEP 2: Intermediate Layer
IntermediateDB::import($parsed)
β speichert in lokaler SQLite (data/intermediate.sqlite)
β Schema: wpt_posts (id, type, status, title, content, slug, date, meta)
β wpt_media (id, post_id, filename, path, alt)
β
βΌ
STEP 3: [ HUMAN LOOP β HOLD ]
ReviewInterface::show()
β Γbersicht: X Posts Β· Y Pages Β· Z Drafts Β· W Medien
β Mensch markiert: deploy | archive | skip
β ConfirmStep::confirm() β kein Deploy ohne explizites OK
β
βΌ
STEP 4: Builder
StaticBuilder::build() oder HugoBuilder::build()
β iteriert ΓΌber wpt_posts WHERE deploy = 1
β schreibt nach public/
β kopiert Assets nach public/assets/
β
βΌ
STEP 5: Output
Je nach Flag:
--zip β ZipExporter
--ftp β FTPDeploy (config via .env, nie im Repo)
--hugo β HugoBuilder β hugo --minify
--nullfeld β VPNSync (194.164.194.191)
--usb β USBExport (Pfad als Argument)
CLI-Interface
# Basis-Workflow
./bin/wpt parse --input dump.sql
./bin/wpt review
./bin/wpt build --output hugo
./bin/wpt deploy --target nullfeld
# Kurzform
./bin/wpt run --input dump.sql --output hugo --deploy ftp
# Nur Archiv exportieren (kein Deploy)
./bin/wpt export --archive --format zip
Code-Standards
| Sprache | PHP 8.1+, kein Framework |
| AbhΓ€ngigkeiten | KEINE externen Composer-Pakete wenn vermeidbar |
| Erlaubt | SQLite3 (PHP built-in), DOMDocument (PHP built-in) |
| Stil | PSR-12 |
| Fehlerbehandlung | Exceptions mit klaren Messages, kein silent fail |
| Tests | PHPUnit, Fixtures in tests/fixtures/ |
| Kommentare | Deutsch oder Englisch β konsistent pro Datei |
Was NICHT gebaut wird
- Admin-OberflΓ€che (Browser-UI)
- Cloud-Sync zu Dritten
- Automatisches Deployment ohne Human Loop
- Telemetrie / Logging nach auΓen
- Dependency auf Node.js / npm
- Subscription-Modell / Lizenz-Check online
Umgebungsvariablen (.env β nie committen)
WPT_FTP_HOST=
WPT_FTP_USER=
WPT_FTP_PASS=
WPT_VPN_HOST=194.164.194.191
WPT_VPN_USER=
WPT_VPN_PATH=/var/www/nullfeld/
WPT_HUGO_BIN=/usr/local/bin/hugo
Erster Build-Schritt (was als erstes gebaut wird)
bin/wptβ Shebang + Argument-Routersrc/Parser/WPSQLParser.phpβ SQL β Array (Core-Logik)src/Intermediate/IntermediateDB.phpβ SQLite-Importsrc/HumanLoop/ReviewInterface.phpβ CLI-Ausgabe der importierten Poststests/ParserTest.phpβ Fixture-basierter Test
Danach: StaticBuilder. Dann HugoBuilder. Dann Output-Layer.
Verbindung zum Γkosystem
| Crumbforest | Infrastruktur, Haltung, Lizenz |
| WPTransformer | dieser Repo |
| Hugo | externer Deploy-Knoten (Binary, kein Lock-in) |
| Nullfeld Sync | VPN 194.164.194.191 Β· Crumbforest-intern |
| Waldatlas | zukΓΌnftig: transformierte Inhalte als Vektoren indizierbar |
Lizenz
MIT License Β· CKL v1.0
Crumbforest Β· Bits With Attitude Β· Hamburg
ls -la. Alles prΓΌfbar. Alles lesbar. FΓΌr immer.