Ausgangspunkt
Über ein Jahrzehnt lief meine Homepage cord.de auf Drupal 7. Da Drupal 7 schon seit Längerem End-of-Life ist, es keinen sauberen Upgrade-Pfad gibt und dieses Content Management System sowieso overkill ist, habe ich nach einer Alternative gesucht.
Schlank, sicher, schnell waren wichtige Kriterien. Weitere waren: stabile URLs (mit Redirects auf die neue Struktur), die Kommentare erhalten, Zweisprachigkeit, Mobiltauglichkeit und SEO-Freundlichkeit.
Toolauswahl
Ich bin also auf Hugo gestoßen. Warum Hugo? Nun, viele Kollegen und Freunde setzen Hugo ein und schienen damit zufrieden. Dadurch ersparte ich mir die Notwendigkeit PHP und eine Datenbank zu betreiben, und reduziere die Angriffsfläche meines Systems. Damit das ganze dann auch chic aussieht, habe ich noch PaperMod installiert, das eine saubere, minimalistische Oberfläche mit guter Anpassbarkeit bietet.
Migration
Nach dieser Entscheidung habe ich dann die Migration versucht. 2015, 2019, 2021, 2023, 2024 und im Januar 2026. Immer ohne Erfolg, es war zu langwierig und zu komplex, die im Netz gefundenen Konversionstools waren dysfunktional.
Was war nun anders? Die KI-Revolution ist passiert. Ich habe also mit wget einen vollständigen Spiegel der Seite erstellt. Dann habe ich mit opencode-cli und den dort angebotenen kostenlosen Modellen das Ziel ausgegeben:
Migriere die Drupal-7-Site in tmp/cord.de zu einer statischen Hugo-Site mit
PaperMod. Ziel: Linux mit Apache, Git-basiertes Deployment, das Layout soll
beibehalten werden. Schlage Best-Practices vor und stelle Fragen bei Unklarheiten.
Erstelle einen Plan und fasse ihn in actionable Tickets in docs/tickets/
Der Agent hat wie gewünscht einen Plan erarbeitet, den Webmirror analysiert, ein Git-Repository gebaut, und ist die Migration inklusive Konvertierung zu Markdown angegangen.
Das Ticketverzeichnis sieht nun so aus:
[...] 1417 Oct 11 16:22 docs/tickets/00-source-backup.md
[...] 2728 Oct 11 16:22 docs/tickets/01-discovery.md
[...] 1800 Oct 11 16:22 docs/tickets/02-export-format.md
[...] 1520 Oct 11 16:22 docs/tickets/03-hugo-bootstrap.md
[...] 2608 Oct 14 10:43 docs/tickets/04-content-conversion.md
[...] 1337 Oct 14 11:51 docs/tickets/05-taxonomies.md
[...] 1667 Oct 11 16:22 docs/tickets/06-comments.md
[...] 1462 Oct 11 16:22 docs/tickets/07-assets.md
[...] 2273 Oct 14 10:43 docs/tickets/08-redirects.md
[...] 4378 Oct 12 13:16 docs/tickets/09-seo-rss.md
[...] 4213 Oct 16 12:39 docs/tickets/10-friendica.md
[...] 7763 Oct 20 10:08 docs/tickets/11-deployment.md
[...] 2529 Oct 11 16:22 docs/tickets/12-verification.md
[...] 5587 Oct 27 20:05 docs/tickets/13-fediverse-comments.md
[...] 3095 Oct 20 10:08 docs/tickets/README.md
Es kamen noch eine Menge Rückfragen, falsche Annahmen der KI mußten korrigiert werden, nach dem ersten Wurf einen Rollback, da sich die KI entschlossen hatte Artikel im Filesystem wild zu verschieben, aber nach ein paar Stunden bin ich mit dem Ergebnis ziemlich zufrieden.
Das Ergebnis
109 migrierte Inhaltsdateien, 223 Redirects, 40 archivierte Kommentare
Ich habe nun auf dem Server ein Git-Repository, aus dem bei einem Update automatisch die Webseite neu generiert wird. Bearbeitet wird die Webseite in einem git clone auf meinem Laptop, wenn ich von dort eine neue Version pushe, wird die Webseite in wenigen Sekunden neu generiert. Als Bonus wird auch noch ein Toot ins Fediverse über meine Friendica Instanz geposted.
Ich habe in wenigen Tagen eine Migration durchgeführt, die ich seit 2015 nicht geschafft habe.