Kai Moritz [Sat, 4 Jul 2026 19:30:27 +0000 (19:30 +0000)]
Footer: Layout-Links und Rechtliches als eigene Abschnitte im Layout "None"
Im unstyled Layout "None" wurden Layout-Switcher und rechtliche Links bisher
gemischt in einer einzigen Liste dargestellt. Jetzt erhalten beide Bereiche
eine eigene Überschrift ("Layouts" bzw. "Rechtliches") und werden durch eine
<hr> voneinander getrennt.
Im Classic-Layout sind die neuen Elemente per display:none ausgeblendet —
Positionierung, Abstände und Darstellung bleiben unverändert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 4 Jul 2026 18:53:24 +0000 (18:53 +0000)]
fix: XML-Blöcke mit Template-Syntax werden korrekt als xml highlighted
hljs erkennt APT-Blöcke mit \${...}-Platzhaltern fälschlich als 'dust'
(Dust.js-Templates), das nicht in Shikis bundledLanguages ist, weshalb
der Block auf 'text' zurückfiel.
Neues Fallback-Kriterium: Code, der mit '<' beginnt, wird als 'xml'
behandelt, wenn hljs entweder keine in Shiki verfügbare Sprache findet
oder unter dem Relevanz-Schwellenwert liegt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 4 Jul 2026 18:45:41 +0000 (18:45 +0000)]
fix: Leere Schlusszeile und Overflow in Projekt-Code-Blöcken
- trimEnd() auf decodierten Code vor Shiki-Übergabe: Doxia hängt an
<pre>-Blöcken ein abschließendes \n, das Shiki als leere Zeile rendert
- overflow-x: auto in pre.astro-code, pre.shiki: codeToHtml() setzt kein
overflow im Inline-Style (anders als Astros Markdown-Integration),
wodurch überlange Zeilen die Seite breiter machten
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 4 Jul 2026 18:12:45 +0000 (18:12 +0000)]
feat: Syntax-Highlighting für Maven-Projektseiten via Shiki
ProjectPage.astro verarbeitet nun <pre>-Blöcke zur Build-Zeit durch Shiki
(one-dark-pro), statt sie als rohe HTML-Fragmente zu injizieren:
- Blöcke mit class="language-*" (Markdown-Doxia-Output): direkt an Shiki
- Blöcke ohne Sprachhinweis (APT-Output): highlight.js erkennt die Sprache
automatisch (highlightAuto, Schwellenwert 8); bei zu geringer Konfidenz
Fallback auf text
CSS-Selektoren in typo.scss und print.scss auf pre.astro-code, pre.shiki
erweitert, damit Padding, Border-Radius und Zeilennummern auch für direkte
codeToHtml()-Aufrufe greifen (die astro-code-Klasse setzt nur Astros Markdown-
Integration, nicht codeToHtml()).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 4 Jul 2026 08:47:33 +0000 (08:47 +0000)]
fix: Artikel-Überschrift mit 6,6px Abstand zur Marginal-Oberkante
Korrektur des vorherigen Commits: margin-top der h2.nav.submenu war
irrtümlich geändert worden, was die Marginalinhalte verschoben hat.
screen/menu.scss wieder auf den Originalwert (1.5em) zurückgesetzt.
Nur die Artikel-h1 wird im Desktop-Layout angepasst:
margin-top: 0.3em (~6,6px) statt 1.125em (24,75px) – kleiner Abstand
nach oben für optische Ausrichtung an der Marginal-Oberkante, ohne
ganz bündig zu sein.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 4 Jul 2026 08:43:52 +0000 (08:43 +0000)]
fix: Artikel-Überschrift bündig zur Marginal-Oberkante ausrichten
Im Desktop-Layout (≥940px, Classic) hing die Artikel-h1 durch ihr
margin-top: 1.125em (= 24,75px bei font-size 22px) ca. 25px unterhalb der
Oberkante des grünen Marginalbereichs.
- screen/content.scss: margin-top für article#content > header h1 auf 0
gesetzt, damit die Überschrift bündig mit der Marginal-Oberkante beginnt.
- screen/menu.scss: margin-top der h2.nav.submenu (z.B. „V Home") von
1.5em auf 0.1em reduziert, damit Nav-Überschrift und Artikel-Titel
wieder auf gleicher Höhe stehen (vorherige Abstimmung war auf ~y=207,
jetzt beide bei ~y=182 = Oberkante des grünen Bereichs).
- base/typo.scss: veralteten Kommentar aktualisiert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 4 Jul 2026 08:25:26 +0000 (08:25 +0000)]
fix: Footer überlagert Artikelende nicht mehr
Der absolut positionierte Footer (position: absolute; bottom: 0) war
125,5 px hoch, aber .content hatte nur padding-bottom: 7.1875em (115 px).
Die fehlenden ~10 px wurden vom weißen Footer-Hintergrund überlagert und
verbargen die letzte Zeile langer Artikel.
padding-bottom auf 8.5em (136 px) erhöht, um einen ausreichenden Puffer
gegenüber der tatsächlichen Footer-Höhe zu gewährleisten.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Mon, 22 Jun 2026 20:51:54 +0000 (20:51 +0000)]
style: Syntax-Highlighting und Inline-Code-Darstellung verbessert
- Shiki-Theme von github-dark auf one-dark-pro gewechselt: kräftigere,
kontrastreichere Farben auf dunklem Hintergrund
- Zeilennummern für Code-Blöcke via CSS-Counter (pre.astro-code .line::before)
- Inline-<code> erhält Hintergrundfarbe ($sehrhell) mit Padding und
Border-Radius, damit Code im Fließtext klar erkennbar ist
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 21 Jun 2026 20:51:08 +0000 (20:51 +0000)]
Syntax-Hervorhebung auf Astro-Best-Practice umgestellt
Astro nutzt Shiki standardmäßig für Markdown-Code-Blöcke. Das war bisher
implizit aktiv, aber nie explizit konfiguriert und ohne passende CSS-Regeln.
- astro.config.mjs: Shiki-Theme `github-dark` explizit konfiguriert
- typo.scss: `pre.astro-code` mit Padding und Border-Radius versehen;
`pre code` auf font-size 100% zurückgesetzt (Shiki nutzt `<code>` als
Wrapper, der 120%-Reset würde sonst fälschlich greifen)
- print.scss: Shiki-Inline-Styles für Druck überschrieben (dunkler
Hintergrund → transparent), da Inline-Styles `!important` brauchen
- print/prettify.scss entfernt: toter Code aus der Vor-Astro-Ära;
prettify.js wurde nie geladen, die Klassen nie erzeugt
- CLAUDE.md: Abschnitt zur Syntax-Hervorhebungsarchitektur ergänzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 21 Jun 2026 08:02:48 +0000 (08:02 +0000)]
alias-hint in überschriebenen Footer-Slots ergänzen
Impressum- und Datenschutz-Seite überschreiben den footerlinks-Slot
mit seitenspezifischem HTML (aktueller Eintrag als <strong>). Der
jeweils verlinkte Fremd-Eintrag fehlte dabei das alias-hint-Span.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 21 Jun 2026 07:59:40 +0000 (07:59 +0000)]
Footer-Links als Schnellzugriff markieren
Impressum- und Datenschutz-Links im Footer erhalten denselben
<span class="alias-hint"> (Schnellzugriff)</span> wie Alias-Einträge
im Sitemap-Menü — für Screen-Reader/Text-Browser sichtbar, im
Classic-Layout per CSS ausgeblendet.
CSS-Regel von '#submenu .alias-hint' auf '.alias-hint' verallgemeinert,
damit sie auch Footer-Links abdeckt (gilt weiterhin nur im Classic-Layout
via :root[data-layout=classic]-Scope in navigation.scss).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 21 Jun 2026 07:37:13 +0000 (07:37 +0000)]
CLAUDE.md: Breadcrumb-Verhalten und Implementierung dokumentieren
Invariante: Breadcrumb = kanonischer Nav-Pfad = fettgedruckter Pfad im
Sitemap-Menü. Beschreibt Implementierung für alle drei Bereiche (About,
Projects, Blog) und benennt Abweichungen explizit als Bugs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 21 Jun 2026 07:36:50 +0000 (07:36 +0000)]
Breadcrumb spiegelt kanonischen Nav-Pfad für alle Seiten wider
About-Section-Breadcrumbs fehlten durchgängig den Eintrag 'About' als
Vorfahren; datenschutz.html fehlte zusätzlich 'Impressum'. Ursache war
hartkodierte, vom Nav-Baum abweichende Pfaddefinitionen in den Templates.
Lösung: aboutSection-Baum in src/lib/about.ts ausgelagert. Neue Funktion
findAboutPath() traversiert den Baum analog zu findCanonicalPath() für
Projekte. BlogNav.astro und alle neun About-Page-Templates importieren
daraus — findInTree() fällt damit weg. Singletons: NavPage-Interface und
Baum-Definition existieren nur noch an einer Stelle.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 21 Jun 2026 07:28:38 +0000 (07:28 +0000)]
Breadcrumb zeigt kanonischen Nav-Pfad statt Schnellzugriff-Pfad
Der bisherige Breadcrumb war auf 3 Einträge (Home → Projects → Titel)
hartkodiert und ignorierte die Nav-Hierarchie. Für Seiten mit Alias-Einträgen
(z.B. Mojo-Seiten) wirkte das wie der Schnellzugriff-Pfad.
Neue Funktion findCanonicalPath() traversiert den Nav-Baum unter Auslassung
von Alias-Nodes und liefert den vollständigen Pfad von der Projekt-Wurzel
zur aktuellen Seite. ProjectPage.astro baut den Breadcrumb daraus auf.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 20 Jun 2026 16:43:17 +0000 (16:43 +0000)]
CLAUDE.md: Herkunft der Projects-Inhalte aus StILi dokumentieren
Der Projects-Content wird per StILi + import-in-astro.sh generiert,
nicht manuell gepflegt. Querverweise auf maven-stili-skin/CLAUDE.md
und workspace/CLAUDE.md ergänzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Fri, 19 Jun 2026 10:18:02 +0000 (10:18 +0000)]
CLAUDE.md: Resurrection als Platzhalter dokumentieren, CSS-Layouts-Abschnitt ergänzen
Resurrection ist ein Platzhalter für ein zukünftig zu entwickelndes Layout
und darf bei CSS-Änderungen ignoriert werden. Neuer Abschnitt erklärt alle
drei Layouts (classic/none/resurrection) und ihr Scope-Modell.
Außerdem: alias-hint-Regel korrekt auf Classic eingeschränkt (war fälschlich
als "alle Screen-Layouts" beschrieben); Verweis auf neuen CSS-Layouts-Abschnitt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Fri, 19 Jun 2026 09:47:57 +0000 (09:47 +0000)]
Alias-Hinweis im Sitemap-Menü für Barrierefreiheit
Alias-Einträge im Sitemap-Menü erhalten jetzt einen Hinweis-Span
'(Schnellzugriff)' direkt nach dem Titel-Element, außerhalb von <strong>.
Dadurch ist der Hinweis nie fett – auch nicht wenn die Seite aktiv ist.
Im CSS (base/navigation.scss) wird #submenu .alias-hint ausgeblendet, sodass
der Hinweis nur im Layout 'None' (kein CSS) sichtbar bleibt – für
Screen-Reader und Text-Browser.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Fri, 19 Jun 2026 09:22:21 +0000 (09:22 +0000)]
Alias-Handling für Nav-Einträge mit mehreren Elternteilen
Seiten, die in stili-json in mehreren childs-Listen stehen (z.B. Mojo-
Seiten eines Maven-Plugins), werden vom Import-Skript an mehreren Stellen
im Content-Tree abgelegt. Die zusätzlichen Einträge (Stubs) erhalten
params.alias: true.
In BlogNav.astro überspringen Alias-Nodes isCurrent und isAncestor in der
off-Berechnung: im Classic-Layout sind sie versteckt, wenn ihre Seite aktiv
ist (der kanonische Eintrag übernimmt die Darstellung). Als Geschwister-
Seiten sind sie sichtbar. Im Layout "None" erscheinen alle Einträge, beide
fett. Die Alias-<li> erhalten zusätzlich die CSS-Klasse alias.
content.config.ts und projects.ts ergänzt um params.alias / isAlias.
CLAUDE.md dokumentiert das Konzept.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Wed, 17 Jun 2026 16:59:46 +0000 (16:59 +0000)]
Update imported content: stili-body (sili → StILi rename)
The StILi skin renamed its HTML element IDs from sili-* to stili-*.
Update the stili-body div ID in all 12 already-imported project content
files to stay consistent with content generated by future imports.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Tue, 16 Jun 2026 18:34:35 +0000 (18:34 +0000)]
Layout-Switcher: Button-Styles im CSS, is:inline für Anti-FOUC-Script
SCSS angepasst: #layout-switcher a → button, inklusive Button-Reset
(background: none, border: none, padding: 0, font: inherit), damit die
Buttons optisch identisch zu den vorherigen Links aussehen.
Anti-FOUC-Script in BaseLayout.astro mit is:inline markiert, damit Astro
es nicht als Modul bündelt — das Script muss synchron im <head> laufen,
bevor der Browser die Seite rendert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Tue, 16 Jun 2026 18:30:35 +0000 (18:30 +0000)]
Layout-Switcher: JS nach BaseLayout, Links durch Buttons ersetzen
Den Event-Listener-Code aus public/js/main.js in einen <script>-Block
in BaseLayout.astro verschoben. Astro bundelt das automatisch als externes
Modul – kein manuelles script-src mehr nötig.
Die <a href="#">-Links im Switcher durch <button>-Elemente ersetzt:
Buttons sind semantisch korrekt für Aktionen (keine Navigation), und ohne
JS scrollt ein Klick nicht mehr versehentlich zum Seitenanfang.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Mon, 15 Jun 2026 18:41:56 +0000 (18:41 +0000)]
Remove Hugo-specific outputs/layout fields from project content
outputs: [html] and layout: article are Hugo artifacts carried over
from the migration — Astro ignores them. Removed from all 12 content
files and from the Zod schema in content.config.ts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 19:36:04 +0000 (19:36 +0000)]
Sitemap-Nav: aktuelle Seite nicht mehr verlinkt
Die jeweils gerade aufgerufene Seite wird in der Sitemap-Navigation
(#submenu und h2.nav.submenu) jetzt als <strong class="s"> gerendert
statt als <a class="s selected"> — analog zum Breadcrumb, wo die
aktuelle Seite ebenfalls nicht anklickbar ist.
Die CSS-Regeln für strong.s im #submenu waren bereits vorhanden;
für die h2.nav.submenu wurde eine entsprechende Regel in
screen/menu.scss ergänzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 14:35:54 +0000 (14:35 +0000)]
BlogNav + projects: Code bereinigt und vereinfacht
Totes Code entfernt:
- activeProjectUrl, isReports (nie benutzt)
- dirname, basename in content.config.ts (unused imports)
- visibleRoot-Branch in getActiveProject (identisch mit visiblePage)
Wartbarkeit:
- aboutParentOf Map + aboutSectionIndexUrls Set durch findInTree ersetzt
(leitet parentUrl und isNode direkt aus dem aboutSection-Baum ab statt
beide separat zu pflegen)
- inPath einmal pro Node berechnet, für off-Logik und selected-Klasse
wiederverwendet (war vorher doppelter Traversal)
- versionPrefix in buildNavTree aus makeNode herausgezogen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 12:21:47 +0000 (12:21 +0000)]
CLAUDE.md: Komplett überarbeitet — IST-Zustand des Astro-Projekts dokumentiert
Alle Hugo-spezifischen Inhalte entfernt. Alle Abschnitte beschreiben jetzt
den aktuellen Stand des Astro-Projekts ohne historischen Kontext.
Neu oder wesentlich erweitert:
- Projektstruktur als Astro-Verzeichnisbaum
- HTML-Seitenstruktur via BaseLayout.astro-Slots
- Sitemap-Menü: vollständige Erklärung von Zweck, CSS-Klassen-Logik und
Implementierung als explizite State-Machine in BlogNav.astro
- Blog-Sonderregeln: Canonical-URL-Logik, Archiv-Sichtbarkeit, Taxonomy-Verhalten
- About-Seitenstruktur inkl. isNode-Logik
- Projects-Sonderregeln: sichtbar/nicht-sichtbar, SNAPSHOT-Nav-Substitution,
generierte Inhalte ohne Layout in public/projects/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 12:06:05 +0000 (12:06 +0000)]
CLAUDE.md: Projects-Content-Architektur und Tooling-Anforderungen dokumentiert
Neue Sektion im Astro-Abschnitt erklärt das Verzeichnislayout unter
src/content/projects/, das Frontmatter-Schema für sichtbare und nicht
sichtbare Versionen, das Mapping zwischen Content-Dateien und
Routing-Dateien in src/pages/, den .html-URL-Quirk in Astro sowie
die Behandlung generierter Inhalte (apidocs, xref etc.) über
public/projects/.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 11:59:59 +0000 (11:59 +0000)]
Projects: Routing-Pages, ProjectPage-Komponente und BlogNav-Integration
- ProjectPage.astro: wiederverwendbare Komponente für alle Projektseiten
(liest Collection-Entry per ID, rendert HTML-Body via set:html, setzt canonical)
- 12 statische Routing-Dateien: 6 für 2.1.1 (visible) unter /hibernate-maven-plugin/,
6 für 2.1.2-SNAPSHOT unter /projects/hibernate-maven-plugin/2.1.2-SNAPSHOT/
- BlogNav: Projects-Ast zwischen Blog und About eingefügt mit vollständiger
off-Logik (tree.html-Analogon); SNAPSHOT-Seiten zeigen SNAPSHOT-NavTree
an der Position der sichtbaren Version; off-Logic für Blog/About angepasst
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 10:18:43 +0000 (10:18 +0000)]
BlogNav: Categories/Tags-Unterseiten auch auf Index-Seite anzeigen
sub-Klasse und aktive ul wurden nur bei onCategoryTerm/onTagTerm gesetzt,
nicht auf /blog/categories/ bzw. /blog/tags/ selbst. Fix: categoriesSelected
bzw. tagsSelected als einheitliche Bedingung (Index || Term).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 10:01:18 +0000 (10:01 +0000)]
BlogNav: Archive-Subtree immer rendern, off-Klasse steuert Sichtbarkeit
Jahre und Posts fehlten im HTML wenn man sich auf Categories/Tags-Seiten
oder außerhalb des Blog-Bereichs befand. Jahr-off-Logik korrigiert:
sichtbar nur auf Archive-Root (alle Jahre als Kinder) oder wenn aktiv.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 09:38:05 +0000 (09:38 +0000)]
About-Seiten: fehlende Unterseiten als Astro-Pages angelegt
Alle 6 About-Unterseiten, die bisher auf 404 liefen, wurden als
.html.astro-Dateien mit korrektem currentUrl für die BlogNav erstellt.
Inhalte aus content--via-hugo übernommen, Thymeleaf-Artefakte entfernt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 09:12:36 +0000 (09:12 +0000)]
BlogNav: vollständige About-Subtree mit korrekter off-Logik
Statischer About-Seitenbaum aus Hugo content/about/-Struktur:
/about.html → /contact.html, /impressum.html (mit 5 Unterseiten), /agb.html
aboutPageOff() implementiert Hugo tree.html-Logik:
sichtbar wenn isCurrent || isAncestor || isSibling(nicht section-index) || isChild
Korrekturen gegenüber Vorgängerversion:
- onAboutSection (inSubtree) statt onAbout (nur /about.html)
→ activeSection 'about' auch auf Impressum/Datenschutz
→ blogSectionOff = onAboutSection (Blog versteckt auf allen About-Seiten)
- About-Link zeigt selected auf allen About-Section-Seiten
- About-li hat jetzt class 'sub' (hat Kinder)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 08:58:04 +0000 (08:58 +0000)]
CLAUDE.md: BlogNav off-Logik und About-Navigation-Status aktualisiert
off-Klassen-Abschnitt: Herleitung jetzt korrekt aus Hugo-Template-Quellen
(frontend-Branch) dokumentiert statt aus HTML-Output-Analyse.
Standalone-Seiten-Abschnitt: Status von "offener Punkt" auf
"implementiert via BlogNav" aktualisiert; nur Projects-Baum fehlt noch.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sun, 14 Jun 2026 08:57:10 +0000 (08:57 +0000)]
Navigation für About-Seiten ergänzt; off-Klassen-Logik korrigiert
BlogNav.astro: About-Eintrag in #submenu hinzugefügt. off-Logik der
Blog- und About-Sektion basiert jetzt auf den Hugo-Template-Quellen
(frontend-Branch):
- blogSectionOff = onAbout (aus tree.html: section-index blendet andere Sections aus)
- aboutOff = blogSelected (aus blog.html: alle Non-Blog-Sections immer off)
Auf Homepage und regulären Root-Seiten (Impressum, Datenschutz) sind
beide Sections sichtbar — wie in Hugo (Kind-/Geschwister-Logik).
about.html.astro, impressum.html.astro, datenschutz.html.astro:
menu-Slot mit BlogNav befüllt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 13:23:46 +0000 (13:23 +0000)]
CLAUDE.md: Fehlende Architektur-Entscheidungen aus Steps 9/10/11 ergänzt
- CSS-Abschnitt: Referenz auf entferntes themes/hugo-juplo korrigiert
(SCSS-Quellen liegen jetzt in src/styles/)
- Standard-Entscheidungen: public/, RSS via @astrojs/rss ergänzt
- Eigene Entscheidungen: RSS-Routing-Struktur, src/lib/posts.ts,
SEO/OG-Tags in BaseLayout, Hugo-Cleanup-Umfang dokumentiert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 11:22:47 +0000 (11:22 +0000)]
Document Astro design decisions in CLAUDE.md; fix branch name
Adds a 'Astro-Implementierung: Design- und Architektur-Entscheidungen'
section that records all non-trivial decisions made during the migration:
- CSS pre-compilation via separate sass step (not Astro built-in)
- Split taxonomy URL structure matching Hugo's output
- BlogNav as an explicit TypeScript state machine (vs. Hugo's recursive
template partial)
- URL compatibility via frontmatter 'url' field
- Word count / reading time via inline string manipulation
- Summary extraction from raw Markdown body
- .html suffix routing via double-extension file naming
- Standalone pages without navigation (documented as open issue)
Also corrects the branch name in Arbeitsregeln from content--via-hugo
to content--via-astro.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 11:21:04 +0000 (11:21 +0000)]
Add README.md with Astro dev/build quickstart and project structure
Documents how to start the dev server, run the static build, and
explains project-specific conventions (CSS pre-compilation, .html
page routing, Content Collections glob loader).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 13:20:04 +0000 (13:20 +0000)]
Step 11: Hugo-Content und Themes aus Astro-Branch entfernen
Das Astro-Projekt verwaltet seinen Content in src/content/blog/.
Die Hugo-spezifischen Verzeichnisse werden nicht mehr benötigt:
- content/ (1288 Dateien): Hugo-Content-Struktur; Blog-Artikel bereits
nach src/content/blog/ migriert, Standalone-Seiten als Astro-Pages
implementiert
- themes/PaperMod/: Ungenutztes Hugo-Theme (nie als aktives Theme
konfiguriert, nur als Fallback vorhanden)
- themes/hugo-juplo: Hugo-juplo-Submodule; SCSS-Quellen wurden bereits
nach src/styles/ kopiert (Schritt 7), Theme-Layouts durch Astro-
Komponenten ersetzt
- .gitmodules: Submodule-Referenz auf hugo-juplo entfernt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 13:18:06 +0000 (13:18 +0000)]
Step 11: Hugo-Konfigurationsdateien entfernen
Entfernt aus dem Astro-Branch:
- hugo.yaml (Hugo-Konfiguration, nicht mehr benötigt)
- archetypes/default.md (Hugo-Archetyp für neue Content-Dateien)
- inventory.md (Migrations-Analyse-Dokument aus Schritt 1)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 11:35:31 +0000 (11:35 +0000)]
Step 10: static/ nach public/ verschieben (Hugo → Astro Assets-Migration)
In Hugo liegt statischer Content unter static/, in Astro unter public/.
Alle Unterverzeichnisse werden mit git mv verschoben, damit git die
Renames erkennt und die Dateihistorie erhalten bleibt.
Kai Moritz [Sat, 6 Jun 2026 11:20:29 +0000 (11:20 +0000)]
Add homepage and standalone pages; fix BlogNav off-state logic
- Implement src/pages/index.astro: full BaseLayout with pack/bg/cf
panels, 5 recent posts, and EU-funding marginalcontent aside
- Add src/pages/about.html.astro, impressum.html.astro,
datenschutz.html.astro with content from Hugo _index.html sources
- Fix BlogNav: Archive/Categories/Tags now get 'off' class when the
current page is not in any blog section (e.g. homepage, about page);
previously they were only off on taxonomy-term pages
- Remove Projects/About subtree from BlogNav submenu — Hugo does not
render them either, because the tree.html partial filters them out
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 10:45:54 +0000 (10:45 +0000)]
Step 8: Taxonomie-Seiten (Kategorien und Tags)
Vier neue Seiten für das Blog-Taxonomie-System:
- /blog/categories/ — Übersicht aller Kategorien
- /categories/[term]/ — Artikel einer Kategorie (mit Wortanzahl/Lesezeit)
- /blog/tags/ — Übersicht aller Tags
- /tags/[term]/ — Artikel eines Tags (mit Wortanzahl/Lesezeit)
Zugleich BlogNav überarbeitet: korrekte active/off-Zustände für
Taxonomy-Kontext (Archiv-Subtree wird nur bei onArchive/onBlog gerendert,
Category/Tag-Items erhalten nav-leaf-Klasse wenn nicht im Taxonomy-Kontext).
Entspricht Hugos categories/taxonomy.html und categories/term.html Layouts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 10:15:45 +0000 (10:15 +0000)]
Step 6 (Abschluss): Blog-Listing-Seiten mit vollständigem Layout
blog/index, blog/archive/index und blog/archive/[year] ersetzen das
minimale Gerüst aus Schritt 3 durch das vollständige BaseLayout mit
Header, Breadcrumb, BlogNav-Sidebar und Footer.
Blog-Index zeigt 3 aktuelle Posts mit automatisch extrahierten Zusammen-
fassungen (erste Textpassage, ~350 Zeichen) und Browse-Abschnitte für
Jahr, Kategorie und Tag.
Archive-Index und Jahres-Archive listen Beiträge mit Datum, Wortanzahl
und Lesezeit auf – analog zur Hugo-Vorlage.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Sat, 6 Jun 2026 07:42:04 +0000 (07:42 +0000)]
Schritt 3: Blog-Inhalte nach src/content/blog/ migrieren
75 Blog-Posts aus content/blog/archive/YYYY/ nach src/content/blog/YYYY/ verschoben.
Hugo-spezifische _index.md/_index.html-Dateien entfernt (werden durch Astro-Routes ersetzt).
Astro Content Collection eingerichtet:
- src/content.config.ts: Schema mit glob-Loader (Astro 6)
- Robuste Verarbeitung von null-Werten bei categories/tags
- Draft-Erkennung (String "true" und Boolean)
Minimale Routing-Grundlage erstellt:
- src/pages/[slug].astro: Einzelne Blog-Posts unter Flat-URL aus url:-Frontmatter
- src/pages/blog/index.astro: Blog-Index mit letzten Posts + Jahresüberblick
- src/pages/blog/archive/[year].astro: Jahres-Archiv-Seiten
Kai Moritz [Fri, 5 Jun 2026 20:59:23 +0000 (20:59 +0000)]
Schritt 2: Astro-Projekt initialisieren
Minimales Astro 6.4.4-Projekt (minimal-Template) im Website-Repository angelegt:
- astro.config.mjs mit site-URL und trailingSlash-Konfiguration
- package.json (Name: juplo, Astro als einzige Dependency)
- tsconfig.json (strict)
- src/pages/index.astro als Platzhalter-Startseite
Hugo-Build-Output (public/) aus .gitignore entfernt, da public/ für Astro
das Static-Assets-Verzeichnis wird; Build-Output geht nach dist/.
node_modules/, dist/ und .astro/ in .gitignore aufgenommen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Fri, 5 Jun 2026 15:59:10 +0000 (15:59 +0000)]
CLAUDE.md: Submodule-Pointer-Updates nur nach Rückfrage
Neue Regel: Der Zeiger auf den Theme-Commit darf nicht automatisch
in Commits des Haupt-Repos einfließen — nur bei inhaltlich
zusammengehöriger Änderung und nur nach expliziter Rückfrage.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Thu, 4 Jun 2026 22:15:41 +0000 (22:15 +0000)]
prettify.js vollständig entfernen: Code-Blöcke auf plain <pre> umstellen
Die fünf facebook-utils-2.5.0-Seiten mit echten Code-Beispielen
(debugging, configuration, force, pitfalls, skip) verwendeten
<div class="prettyprint"><pre>-Wrapper für Google Code Prettify.
Diese werden zu einfachem <pre> konvertiert, das ohne JavaScript
korrekt dargestellt wird.
Damit ist prettify.js auf der gesamten Site nicht mehr erforderlich.
Das Theme entfernt in dem angezogenen Commit static/js/prettify.js
sowie alle Script- und CSS-Einbindungen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Thu, 4 Jun 2026 21:58:42 +0000 (21:58 +0000)]
Entferne veraltete prettify.js-Referenzen aus Maven-generierten Seiten
onload="prettyPrint()" und überflüssige <script src="/js/prettify.js">-Tags
aus 32 Maven-generierten Projektseiten (scannotation-1.0.4, facebook-utils-2.5.0)
entfernt. Diese Seiten enthielten keinen Code mit class="prettyprint", der
Aufruf lief also ins Leere.
Fünf Seiten mit echtem Code (facebook-utils-2.5.0: debugging, configuration,
force, pitfalls, skip) bleiben unverändert – sie binden prettify.js selbst
ein und funktionieren weiterhin.
Zieht gleichzeitig den Theme-Commit ein, der prettify.js aus dem globalen
Head-Template entfernt (Hugo nutzt Chroma für Syntax-Highlighting).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Wed, 3 Jun 2026 23:00:25 +0000 (23:00 +0000)]
fix: security.allowContent für Hugo 0.162.0 ergänzt
Hugo 0.162.0 blockiert HTML-Inhaltsdateien standardmäßig über die neue
Sicherheitsrichtlinie. allowContent ist eine Allowlist — das Pattern
"^text/" erlaubt text/markdown und text/html (benötigt u.a. für die
generierten Maven-Site-HTML-Dateien in projects/).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Wed, 3 Jun 2026 22:20:12 +0000 (22:20 +0000)]
Content-Migration: Statische Inhalte aus Theme-Submodule ins Hauptrepo verschoben
Alle Content-Dateien aus themes/hugo-juplo/content/ wurden ins Hauptrepo
unter content/ verschoben:
- About-Sektion (about/, about/impressum/ mit allen Unterseiten)
- Blog-Sektion-Index (blog/_index.html)
- Blog-Archiv-Index (blog/archive/_index.html)
- Taxonomy-Indexseiten (categories/_index.html, tags/_index.html)
Im Theme-Submodule wurden als Ersatz minimale Platzhalter in der
exampleSite angelegt (about/, about/impressum/, blog/, blog/archive/,
categories/, tags/), damit das Theme weiterhin unabhängig vom Content-
Branch mit der exampleSite getestet werden kann.
Die exampleSite/hugo.yaml wurde ebenfalls von PaperMod-Parametern
bereinigt und um copyrightShort ergänzt (analog zur hugo.yaml im
Hauptrepo).
Ergebnis: Das Theme enthält jetzt ausschließlich Layouts, Assets,
Shortcodes und exampleSite – keine Produktionsinhalte mehr.
Außerdem: blog/_index.md: Duplikat entfernt
Die Blog-Sektion wurde doppelt definiert: einmal in content/blog/_index.md
(dieses Repo) und einmal in themes/hugo-juplo/content/blog/_index.html
(Theme). Hugo verwendet in diesem Fall die Datei im Hauptrepo (Override-
Mechanik), die Theme-Datei wurde ignoriert.
Da beide Dateien identischen Inhalt hatten (title: Blog, weight: 10),
wird die Duplikatdatei im Hauptrepo entfernt. Die Theme-Datei übernimmt
die Sektionsdefinition und wird beim geplanten Content-Migration-Schritt
ins Hauptrepo verschoben.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Wed, 3 Jun 2026 22:19:34 +0000 (22:19 +0000)]
hugo.yaml: PaperMod-Parameter und ungenutztes menu.main entfernt
Entfernt wurden alle Parameter, die ausschließlich für das PaperMod-Theme
gelten und vom hugo-juplo-Theme ignoriert werden:
disableThemeToggle, showShareButtons, showWordCount, showReadingTime,
showToc, showBreadCrumbs, showCodeCopyButtons, hideFooter,
assets.favicon, assets.disableHLJS.
Ebenfalls entfernt: menu.main (categories/tags/archives) – das Theme
baut die Navigation aus MainSections und der Seitenhierarchie, nicht
aus der hugo.yaml-Menükonfiguration.
Neu hinzugefügt: params.copyrightShort: mo – wird in baseof.html für
die Copyright-Zeile verwendet (Kurzname, getrennt vom vollen Namen in
params.author.name und dem RSS/Feed-Copyright in copyright:).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kai Moritz [Wed, 3 Jun 2026 22:17:48 +0000 (22:17 +0000)]
Dokumentation der Projektstruktur, Template-Architektur und Menü-Konzept
Ergänzt CLAUDE.md im Hauptrepo mit einem vollständigen Abschnitt zur
technischen Projektstruktur, die aus der Ist-Analyse hervorgegangen ist:
Template-Aufbau, Block-Override-Tabelle, Menü-Konzept (SEO-Sitemap),
Content-Architektur (Zielzustand). Vorhandene Abschnitte wurden
konsolidiert und gestrafft.
Im Theme-Submodule wurde erstmals eine CLAUDE.md angelegt mit
Verzeichnisstruktur, Menü-System-Beschreibung und Shortcode-Übersicht.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>