Migrate WordPress site to Hugo

Replaces the WordPress 7.0.2 / HitMag site with a static Hugo build,
deployed by Gitea Actions over rsync/SSH.

Content: 26 files (9 pages + 17 posts) as Markdown page bundles, plus
127 of 165 media attachments. The remaining 38 are media-library
leftovers that appear nowhere on the live site; they are listed in
MIGRATION.md.

The WXR export contains neither media binaries nor widgets, so both were
recovered from the live host before it is retired:
  - tools/fetch_media.py downloads all uploads, capping them at 2000px
  - tools/build_data.py scrapes the "Unsere Mitglieder" and
    "In Erinnerung" widgets into data/*.yaml

TablePress' six Termine tables became data/termine.yaml, rendered with
the newest year expanded and earlier years collapsed. Old permalinks are
not preserved (clean slugs, no redirects, as agreed).

Custom layouts, no third-party theme. Plain CSS, since the pinned Hugo
0.164.0 is the non-extended build and cannot compile Sass.

Verified: clean build with zero warnings, 718 internal links checked and
none broken, no surviving wp-content URLs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 19:20:11 +02:00
parent eccf30584a
commit bef5182545
188 changed files with 2770 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
{{ define "main" }}
<section class="home-intro">
{{ .Content }}
</section>
{{ with where site.RegularPages "Section" "aktuelles" }}
<section class="home-news">
<h2>Aktuelles</h2>
<div class="post-grid">
{{ range first 3 . }}
{{ partial "post-card.html" . }}
{{ end }}
</div>
<p class="more-link"><a href="{{ "/aktuelles/" | relURL }}">Alle Beiträge →</a></p>
</section>
{{ end }}
{{ with hugo.Data.members }}
<section class="home-members">
<h2>Unsere Mitglieder</h2>
<ul class="member-grid">
{{ range . }}
<li class="member">
{{ with resources.Get .image }}
{{ $p := .Fill "240x240 Center webp q80" }}
<img src="{{ $p.RelPermalink }}" width="{{ $p.Width }}" height="{{ $p.Height }}"
alt="{{ $.Title }}" loading="lazy" decoding="async">
{{ end }}
<span class="member-name">{{ .name }}</span>
</li>
{{ end }}
</ul>
</section>
{{ end }}
{{ with hugo.Data.memoriam }}
<section class="home-memoriam">
<h2>In Erinnerung</h2>
<ul class="memoriam-list">
{{ range . }}
<li class="memoriam">
{{ with resources.Get .image }}
{{ $p := .Fill "200x200 Center webp q80" }}
<img src="{{ $p.RelPermalink }}" width="{{ $p.Width }}" height="{{ $p.Height }}"
alt="" loading="lazy" decoding="async">
{{ end }}
<span class="memoriam-name">{{ .name }}</span>
<span class="memoriam-date">✝ {{ .died }}</span>
</li>
{{ end }}
</ul>
</section>
{{ end }}
{{ end }}