]> juplo.de Git - website/log
website
5 days agoClassic-Layout an neue Footer-Navigation angepasst + rotierende Beschreibungen
Kai Moritz [Sun, 5 Jul 2026 09:41:34 +0000 (09:41 +0000)]
Classic-Layout an neue Footer-Navigation angepasst + rotierende Beschreibungen

CSS-Selektoren in screen/menu.scss auf die neue HTML-Struktur aktualisiert:
- h2.nav.menu ist jetzt in einem <div> verschachtelt → Selektor angepasst
- h2.nav.submenu → durch div.home ersetzt (gleiche visuelle Darstellung: V-Pfeil, Farbe, Border)
- Neue Elemente (.sep, .description, #sitemap > h2.nav) im Classic-Layout ausgeblendet

div.home: Nested-Anchor-Bug behoben (<a class="home"> → <div class="home">).

.home-Text: "Home" direkt in den beschreibenden Text eingebettet:
- Umgebender Text in span.home-surrounding — im Classic-Layout ausgeblendet
- "Home" bleibt als Klartext stets sichtbar, kein separates span nötig
  Layout "None": "You are at the Home-page of the site" / "Go back to the Home-page of the site"
  Classic-Layout: nur "Home" sichtbar (span.home-surrounding wird ausgeblendet)

JS in BlogNav.astro: rotierende Beschreibungen pro Bereich (Blog/Projects/About)
implementiert; wechseln alle 5 Sekunden und sind im Layout "None" sichtbar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 days agoHTML-Struktur des Footer-Bereichs "Navigation" überarbeitet
Kai Moritz [Sun, 5 Jul 2026 08:11:42 +0000 (10:11 +0200)]
HTML-Struktur des Footer-Bereichs "Navigation" überarbeitet

5 days agoKorrigiere vertikale Ausrichtung der Layout-Buttons am Desktop
Kai Moritz [Sun, 5 Jul 2026 08:01:06 +0000 (08:01 +0000)]
Korrigiere vertikale Ausrichtung der Layout-Buttons am Desktop

Nach der HTML-Umstrukturierung (id="layout-switcher" auf dem <ul> statt dem <li>)
griff #layout-switcher { font-size: 137.5% } plötzlich auf das <ul> selbst — das
Behälterelement mit dem margin-top. Dadurch wurde 1.9375em bei 22px statt 16px
berechnet (42.6px statt 31px), was die Layout-Buttons zu weit nach unten schob.

Fix: font-size: 137.5% aus #layout-switcher in #layout-switcher .layout-option
verschoben. Das <ul> bleibt jetzt bei 16px-Basis, sodass 1.9375em wieder korrekt
31px ergibt (= 1.25em Trennlinie + 0.6875em Zeilenabstand der Rechtliches-Links).

Tablet-Sidebar: Margin-Left des <ul> von 2em (32px bei 16px) auf 2.75em (44px)
angepasst, damit die Einrückung weiterhin mit Überschrift und Rechtliches-Links
übereinstimmt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 days agoKorrigiere Sidebar-Heading: selbe Größe/Farbe wie Buttons, einheitliche Einrückung
Kai Moritz [Sun, 5 Jul 2026 07:37:59 +0000 (07:37 +0000)]
Korrigiere Sidebar-Heading: selbe Größe/Farbe wie Buttons, einheitliche Einrückung

Fehler aus vorherigem Commit:
- font-size: 100% (16px) statt 137.5% (22px) wie die Layout-Buttons
- color: $hintergrund (weiß) statt lighten($schrifthell, 25%) — damit war die
  farbliche Unterscheidung zwischen Layout-Buttons (grau) und Rechtliches-Links
  (weiß) verloren gegangen; außerdem stimmte die Farbe nicht mit den Buttons überein
- Falsche Einrückung: 2em-Margin am 16px-Element ergibt 32px, am 22px-Element 44px —
  Überschrift und Buttons standen damit um 12px versetzt nebeneinander
- Überflüssige button/hover/active-Farboverrides, die ebenfalls weiß erzwangen

Fixes:
- font-size: 137.5% → 2em-Margin jetzt wie beim <ul>: 44px (x=743) für alle drei
  Gruppen (Überschrift, Layout-Buttons, Impressum/Datenschutz)
- color: lighten($schrifthell, 25%) → Überschrift gleiche Farbe wie Buttons
- font-weight: normal → keine Bold-Auszeichnung, nur die fehlende Unterstreichung
  unterscheidet die Überschrift von den Links
- margin-top: 2.75em (≈60px bei 22px) → gleicher Abstand zum hr.f wie zuvor die
  Rechtliches-Links (3.75em bei 16px = 60px)
- margin-bottom: 0.5em → etwas mehr Abstand zur ersten Schaltfläche als zwischen
  den Schaltflächen (0.25em)
- .footer-layouts-inner margin-bottom: 1em → deutliche Trennung zum Rechtliches-Abschnitt
- #footerlinks margin-left: 2.75em (44px bei 16px) → auf selber Höhe wie die anderen
  Elemente (x=743)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 days agoVerbessere Footer-Layout: separate LIs pro Layout-Button, Kleingeräte-Styling
Kai Moritz [Sun, 5 Jul 2026 07:23:04 +0000 (07:23 +0000)]
Verbessere Footer-Layout: separate LIs pro Layout-Button, Kleingeräte-Styling

HTML: Jeder Layout-Button bekommt ein eigenes <li class="layout-option">,
id="layout-switcher" zieht auf das <ul>. Das "Layout: "-Label entfällt
(Überschrift "Layouts" reicht). Trennzeichen "|" wird per CSS-Pseudoelement
(::before) eingefügt statt als Literal-Textknoten.

CSS (Classic-Layout, kleine Bildschirmgrößen):
- Tablet .menu (Sidebar): Layout-Buttons jetzt untereinander gestapelt (kein |),
  Überschrift "Layouts" sichtbar, #footerlinks rückt direkt darunter.
- Phone: .footer-layouts-inner float:none (volle Breite), damit Copyright
  in dieselbe Zeile wie Impressum/Datenschutz fällt statt neben die
  Layout-Buttons.
- Desktop/Tablet nomenu: unverändert nebeneinander mit "|".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 days agoFooter: Layout-Links und Rechtliches als eigene benannte Sections
Kai Moritz [Sun, 5 Jul 2026 06:50:29 +0000 (06:50 +0000)]
Footer: Layout-Links und Rechtliches als eigene benannte Sections

Statt eines einzelnen unbenannten Footers mit allen Links gibt es jetzt
zwei benannte Sections — "Layouts" und "Rechtliches" —, die im Layout
"None" (kein CSS) als eigene Bereiche mit Überschriften sichtbar sind.

Im Classic-Layout bleibt die Darstellung pixel-identisch:
- Beide Sections erhalten `display: contents`, sodass ihre Kinder direkt
  im Footer-Kontext floaten wie bisher.
- `#layout-switcher` bekommt explizit `@include bpreplay` und `float: left`
  (Phone) bzw. `margin-left: 2em` (Tablet .menu), um die alten Float-
  Positionen und den BPreplay-Font exakt zu replizieren.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 days agoFooter: Layout-Links und Rechtliches als eigene Abschnitte im Layout "None"
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>
6 days agofix: XML-Blöcke mit Template-Syntax werden korrekt als xml highlighted
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>
6 days agofix: Leere Schlusszeile und Overflow in Projekt-Code-Blöcken
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>
6 days agotmp: Nach Syntax-Highlighting Überarbeitung durch Claude
Kai Moritz [Sat, 4 Jul 2026 18:21:29 +0000 (20:21 +0200)]
tmp: Nach Syntax-Highlighting Überarbeitung durch Claude

6 days agofeat: Syntax-Highlighting für Maven-Projektseiten via Shiki
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>
6 days agofix: Artikel-Überschrift mit 6,6px Abstand zur Marginal-Oberkante
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>
6 days agofix: Artikel-Überschrift bündig zur Marginal-Oberkante ausrichten
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>
6 days agoWIP:fix4
Kai Moritz [Sun, 21 Jun 2026 08:04:33 +0000 (10:04 +0200)]
WIP:fix4

6 days agofix: Footer überlagert Artikelende nicht mehr
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>
2 weeks agostyle: Syntax-Highlighting und Inline-Code-Darstellung verbessert
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>
2 weeks agofix: Sprachbezeichner in Code-Blöcken aller Blog-Artikel korrigiert
Kai Moritz [Mon, 22 Jun 2026 19:51:18 +0000 (19:51 +0000)]
fix: Sprachbezeichner in Code-Blöcken aller Blog-Artikel korrigiert

Shiki ist case-sensitiv und erkennt Bezeichner wie `Java`, `Bash`, `XPath`
nicht — alle fallen auf plaintext zurück. Behoben:

- `Java` → `java` in allen 2016er Facebook-App-Posts
- `Java` → `xml` in xpath-Artikel (Blöcke enthielten XML, nicht Java)
- `Bash` → `log` in problems-deploying (Inhalt ist Log-Output)
- `XPath` → `text` (Shiki hat kein XPath/XQuery-Highlighting)
- `hosts` → `text` (Shiki kennt kein hosts-Format)
- Trailing space nach ` ``` ` in outbox-part-1 entfernt (`java`)
- Unlabeled Opening-Fences mit passendem Label versehen:
  `javascript`, `xml`, `java`, `properties`, `shellsession`, `text`

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoSyntax-Hervorhebung auf Astro-Best-Practice umgestellt
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>
2 weeks agoalias-hint in überschriebenen Footer-Slots ergänzen
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>
2 weeks agoFooter-Links als Schnellzugriff markieren
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>
2 weeks agoCLAUDE.md: Breadcrumb-Verhalten und Implementierung dokumentieren
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>
2 weeks agoBreadcrumb spiegelt kanonischen Nav-Pfad für alle Seiten wider
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>
2 weeks agoBreadcrumb zeigt kanonischen Nav-Pfad statt Schnellzugriff-Pfad
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>
2 weeks agoCLAUDE.md: Querverweis auf andere Repos entfernen
Kai Moritz [Sat, 20 Jun 2026 16:48:00 +0000 (16:48 +0000)]
CLAUDE.md: Querverweis auf andere Repos entfernen

Repo-CLAUDE.mds sollen nur ihr eigenes Repo beschreiben.
Der Gesamtkontext wird über die workspace/CLAUDE.md hergestellt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoCLAUDE.md: Herkunft der Projects-Inhalte aus StILi dokumentieren
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>
3 weeks agoCLAUDE.md: Resurrection als Platzhalter dokumentieren, CSS-Layouts-Abschnitt ergänzen
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>
3 weeks agoWIP:fix3
Kai Moritz [Fri, 19 Jun 2026 10:24:08 +0000 (12:24 +0200)]
WIP:fix3

3 weeks agoAlias-Hinweis im Sitemap-Menü für Barrierefreiheit
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>
3 weeks agoWIP:fix2
Kai Moritz [Fri, 19 Jun 2026 10:22:34 +0000 (12:22 +0200)]
WIP:fix2

3 weeks agoAlias-Handling für Nav-Einträge mit mehreren Elternteilen
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>
3 weeks agoWIP:Code-Listings von Hand nachkorrigiert
Kai Moritz [Fri, 19 Jun 2026 08:24:11 +0000 (08:24 +0000)]
WIP:Code-Listings von Hand nachkorrigiert

3 weeks agoWIP:fix1
Kai Moritz [Thu, 18 Jun 2026 22:52:26 +0000 (00:52 +0200)]
WIP:fix1

3 weeks agoTMP: Mit StILi generiert und mit import-in-astro.sh importiert
Kai Moritz [Thu, 18 Jun 2026 21:49:44 +0000 (23:49 +0200)]
TMP: Mit StILi generiert und mit import-in-astro.sh importiert

3 weeks agoTMP: Mit StILi generiert und mit import-in-astro.sh importiert
Kai Moritz [Thu, 18 Jun 2026 21:39:10 +0000 (23:39 +0200)]
TMP: Mit StILi generiert und mit import-in-astro.sh importiert

3 weeks agoUpdate imported content: stili-body (sili → StILi rename)
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>
3 weeks agoLayout-Switcher: Button-Styles im CSS, is:inline für Anti-FOUC-Script
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>
3 weeks agoLayout-Switcher: JS nach BaseLayout, Links durch Buttons ersetzen
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>
3 weeks agoRemove stale origin comment from BlogNav.astro
Kai Moritz [Mon, 15 Jun 2026 18:45:26 +0000 (18:45 +0000)]
Remove stale origin comment from BlogNav.astro

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 weeks agoRemove Hugo-specific outputs/layout fields from project content
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>
3 weeks agoFix 404 for generated-doc links in project-reports content
Kai Moritz [Mon, 15 Jun 2026 18:25:57 +0000 (18:25 +0000)]
Fix 404 for generated-doc links in project-reports content

apidocs/ and testapidocs/ trailing-slash URLs 404 without server-side
directory-index; changed to explicit /index.html in the body links.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 weeks agoFix 404 for generated-doc entry links (apidocs, xref etc.)
Kai Moritz [Mon, 15 Jun 2026 17:58:25 +0000 (17:58 +0000)]
Fix 404 for generated-doc entry links (apidocs, xref etc.)

Directory URLs like /apidocs/ fail without server-side index fallback;
link directly to /apidocs/index.html instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 weeks agoSitemap-Nav: aktuelle Seite nicht mehr verlinkt
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>
3 weeks agoBlogNav + projects: Code bereinigt und vereinfacht
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)

Duplikate zusammengeführt:
- inSubtree + inProjectSubtree → generische Funktion (funktioniert für
  NavPage und ProjectNavNode dank struktureller Typisierung)
- aboutPageOff + projectNodeOff → nodeOff(nodeUrl, parentUrl, inPath,
  currentParentUrl, currentIsNode); Partial Applications aboutNodeOff
  und projNodeOff binden den section-spezifischen Kontext
- findProjectNode + findProjectParent → findNodeAndParent (ein DFS-Pass
  statt zwei); _activeProjectRoot-Alias dadurch obsolet

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>
3 weeks agoCLAUDE.md: Komplett überarbeitet — IST-Zustand des Astro-Projekts dokumentiert
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>
3 weeks agoCLAUDE.md: Projects-Content-Architektur und Tooling-Anforderungen dokumentiert
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>
3 weeks agoProjects: Routing-Pages, ProjectPage-Komponente und BlogNav-Integration
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>
3 weeks agoProjects: Content Collection + Helper-Bibliothek für Hibernate Maven Plugin
Kai Moritz [Sun, 14 Jun 2026 11:59:50 +0000 (11:59 +0000)]
Projects: Content Collection + Helper-Bibliothek für Hibernate Maven Plugin

- js-yaml als explizite Dev-Dependency hinzugefügt (war transitive Dep)
- Custom Content Layer Loader in content.config.ts: liest HTML+YAML-Frontmatter
  aus src/content/projects/ und stellt sie als 'projects'-Collection bereit
- src/lib/projects.ts: buildNavTree(), getActiveProject(), getVisibleProjectNavTrees()
- Repräsentativer Subset: hibernate-maven-plugin 2.1.1 (sichtbar) + 2.1.2-SNAPSHOT
  (nicht-sichtbar), je 6 Seiten: Index, Configuration, Project Information,
  Project Reports, Plugin Documentation, Goal:create

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 weeks agoBlogNav: Categories/Tags-Unterseiten auch auf Index-Seite anzeigen
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>
3 weeks agoBlogNav: Archive-Subtree immer rendern, off-Klasse steuert Sichtbarkeit
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>
3 weeks agoAbout-Seiten: fehlende Unterseiten als Astro-Pages angelegt
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>
3 weeks agoCLAUDE.md: About-Subtree-Logik und Seitenstruktur dokumentiert
Kai Moritz [Sun, 14 Jun 2026 09:13:17 +0000 (09:13 +0000)]
CLAUDE.md: About-Subtree-Logik und Seitenstruktur dokumentiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 weeks agoBlogNav: vollständige About-Subtree mit korrekter off-Logik
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>
3 weeks agoCLAUDE.md: BlogNav off-Logik und About-Navigation-Status aktualisiert
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>
3 weeks agoNavigation für About-Seiten ergänzt; off-Klassen-Logik korrigiert
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>
4 weeks agoCLAUDE.md: Fehlende Architektur-Entscheidungen aus Steps 9/10/11 ergänzt
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>
4 weeks agoDocument Astro design decisions in CLAUDE.md; fix branch name
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>
4 weeks agoAdd README.md with Astro dev/build quickstart and project structure
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>
4 weeks agoStep 11: Hugo-Content und Themes aus Astro-Branch entfernen
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>
4 weeks agoStep 11: Hugo-Konfigurationsdateien entfernen
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>
4 weeks agoStep 9/11: RSS-Feeds, SEO-Meta-Tags, shared helpers in lib/posts.ts
Kai Moritz [Sat, 6 Jun 2026 13:13:16 +0000 (13:13 +0000)]
Step 9/11: RSS-Feeds, SEO-Meta-Tags, shared helpers in lib/posts.ts

RSS-Feeds (Step 9):
- /blog/index.xml — Blog-Gesamt-Feed
- /blog/archive/index.xml — Archiv-Feed
- /blog/archive/YYYY/index.xml — Jahres-Feeds (dynamisch)
- /categories/TERM/index.xml — Kategorie-Feeds (dynamisch)
- /tags/TERM/index.xml — Tag-Feeds (dynamisch)

SEO-Meta-Tags (Step 9):
- BaseLayout: description-Prop, <meta name="description">, og:title,
  og:description, og:type, og:url
- [slug].astro: übergibt getSummary(post.body) als description

Shared Helpers (Step 11 Refactoring):
- src/lib/posts.ts: getAllPosts(), postUrl(), getSummary(), wordCount()
- Alle Seiten importieren diese Helpers statt lokale Kopien zu haben
- BlogNav, [slug], blog/index, archive/index, [year], categories/[term],
  tags/[term], index.astro migriert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 weeks agoStep 10: static/ nach public/ verschieben (Hugo → Astro Assets-Migration)
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.

Verschoben:
- static/hibernate4-maven-plugin-1.0.3..1.1.1/ → public/
- static/projects/hibernate-maven-plugin/    → public/projects/
- static/wp-uploads/                         → public/wp-uploads/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 weeks agoAdd homepage and standalone pages; fix BlogNav off-state logic
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>
4 weeks agoStep 8: Taxonomie-Seiten (Kategorien und Tags)
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>
4 weeks agoStep 6 (Abschluss): Blog-Listing-Seiten mit vollständigem Layout
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>
4 weeks agoSchritt 7: SCSS/CSS aus Theme übernehmen und für Astro kompilieren
Kai Moritz [Sat, 6 Jun 2026 08:15:10 +0000 (08:15 +0000)]
Schritt 7: SCSS/CSS aus Theme übernehmen und für Astro kompilieren

SCSS-Quellen (screen.scss, print.scss, resurrection.css) aus themes/hugo-juplo/
nach src/styles/ kopiert. Kompilation über npm-Prebuild-Skript (sass CLI):
- src/styles/screen.scss → public/css/screen.css
- src/styles/print.scss → public/css/print.css
- src/styles/resurrection.css → public/css/resurrection.css (unverändert)

JS und statische Assets (fonts, img, favicon) aus Theme-Static nach public/ kopiert.
package.json: build:css-Script + prebuild/predev-Hooks hinzugefügt.
sass als devDependency hinzugefügt.

Deprecation-Warnings (@import, lighten(), globale Built-ins) unterdrückt —
das SCSS selbst bleibt unverändert (Schritt 11: Optimierungen).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 weeks agoSchritt 6: Layout-Migration — BaseLayout + Blog-Navigation
Kai Moritz [Sat, 6 Jun 2026 07:50:57 +0000 (07:50 +0000)]
Schritt 6: Layout-Migration — BaseLayout + Blog-Navigation

Astro-native Umsetzung des Hugo-Layouts (identisches HTML-Markup):

BaseLayout.astro:
- Gerüst: #page > header#header, #breadcrumb, main.content.cf, footer#footer
- Inline-Script für Layout-Switcher (Classic/Resurrection/None via localStorage)
- Named Slots: breadcrumb, article, menu, marginalcontent, footerlinks

BlogNav.astro:
- Exakt gleiches Markup wie menu/blog.html (inkl. CSS-Klassen):
  - Section-Menu: m + m-selected auf aktivem Abschnitt
  - Submenu: s, sub, off, selected, nav-leaf identisch zu Hugo
  - Blog-Post-URLs zählen als "im Archiv" (off-Verhalten korrekt)
  - Categories/Tags mit off-Klasse auf Post-Seiten

Breadcrumb.astro, TaxonomyAside.astro, PostMeta.astro als eigenständige
Komponenten. src/pages/[slug].astro nutzt das vollständige Layout.

HTML-Vergleich mit Hugo-Referenz bestanden (bidirectional-association-post).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 weeks agoSchritt 5: Shortcodes durch Astro-Komponenten ersetzen
Kai Moritz [Sat, 6 Jun 2026 07:43:23 +0000 (07:43 +0000)]
Schritt 5: Shortcodes durch Astro-Komponenten ersetzen

Mapping Hugo-Shortcodes → Astro:

| Shortcode             | Astro-Äquivalent                          |
|-----------------------|-------------------------------------------|
| {{< recent-posts >}}  | src/components/RecentPosts.astro          |
| {{< marginalcontent-md >}} | Layout-Slot (kommt in Schritt 6)    |
| {{< marginalcontent-html >}} | Layout-Slot (kommt in Schritt 6)  |
| {{< footerlinks >}}   | Layout-Prop/Slot (kommt in Schritt 6)     |

RecentPosts.astro: zeigt die 5 neuesten Blog-Posts (entspricht
dem Hugo-Shortcode recent-posts.html). Wird in der Startseite verwendet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 weeks agoSchritt 4: Blog-Routing vollständig und stabil
Kai Moritz [Sat, 6 Jun 2026 07:42:50 +0000 (07:42 +0000)]
Schritt 4: Blog-Routing vollständig und stabil

/blog/archive/-Übersichtsseite hinzugefügt.
Routing-Inventur: 65 Seiten werden korrekt generiert:
- 54 Blog-Posts unter Original-Flat-URLs (aus url:-Frontmatter)
- 8 Jahresarchive (/blog/archive/YYYY/)
- /blog/archive/ Übersicht
- /blog/ Index
- / Startseite (Platzhalter)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4 weeks agoSchritt 3: Blog-Inhalte nach src/content/blog/ migrieren
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

Build-Ergebnis: 64 Seiten (54 Posts ohne Drafts, 8 Jahresarchive, Blog-Index, Homepage).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 weeks agoSchritt 2: Astro-Projekt initialisieren
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>
5 weeks agoSchritt 1: Funktionsinventar für Hugo → Astro Migration
Kai Moritz [Fri, 5 Jun 2026 20:49:11 +0000 (20:49 +0000)]
Schritt 1: Funktionsinventar für Hugo → Astro Migration

Vollständige Analyse des Hugo-Projekts:
- 75 Blog-Posts (2012–2021) mit Flat-URLs via Frontmatter
- 8 Jahres-Archive, Taxonomien (Categories + Tags)
- 4 Shortcodes, komplexe Navigation mit 2 Varianten
- SCSS mit 5 Breakpoints + Print + Resurrection-CSS
- Layout-Varianten Classic/Resurrection/None via localStorage

inventory.md listet alle Features und ihre geplanten Astro-Äquivalente.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 weeks agoTheme-Submodule auf aktuellen Stand bringen (9 neue Commits) content--via-hugo
Kai Moritz [Fri, 5 Jun 2026 20:42:37 +0000 (20:42 +0000)]
Theme-Submodule auf aktuellen Stand bringen (9 neue Commits)

Erfasst Theme-Commits von bd8c879e bis 778d0fd6:
- SCSS-Konsolidierung (base.scss → screen.scss, statische CSS entfernt)
- Layout-Weiche: Classic / Resurrection / None
- Resurrection-Layout: SCSS durch natives CSS ersetzt
- Vollständige Sitemap-Navigation (nav-leaf, strong-Breadcrumb, blog.html-Partial)
- Fix Classic-Layout-Regressionen nach strong-Einführung
- Spec-Dokumentation für Navigations-Konzept und Classic-Bildsprache

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 weeks agoCLAUDE.md: Submodule-Pointer-Updates nur nach Rückfrage
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>
5 weeks agoCLAUDE.md: UI-Workflow ergänzt
Kai Moritz [Fri, 5 Jun 2026 15:58:55 +0000 (15:58 +0000)]
CLAUDE.md: UI-Workflow ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 weeks agoprettify.js vollständig entfernen: Code-Blöcke auf plain <pre> umstellen
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>
5 weeks agoEntferne veraltete prettify.js-Referenzen aus Maven-generierten Seiten
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>
5 weeks agofix: security.allowContent für Hugo 0.162.0 ergänzt
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>
5 weeks agoContent-Migration: Statische Inhalte aus Theme-Submodule ins Hauptrepo verschoben
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>
5 weeks agoDiverse Korrekturen & Verbesserungen des hugo-juplo Themes
Kai Moritz [Wed, 3 Jun 2026 22:18:03 +0000 (22:18 +0000)]
Diverse Korrekturen & Verbesserungen des hugo-juplo Themes

- .Scratch durch .Store ersetzt; Copyright-Jahr in baseof.html dynamisch
- Altlasten entfernt: dist/, Debug-Partials, Backup-Template, Legacy-Kommentare
- 3 Bugs behoben: Breadcrumb-Tags, CSS-Klasse Off-Sektion, Head-Meta

5 weeks agohugo.yaml: PaperMod-Parameter und ungenutztes menu.main entfernt
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>
5 weeks agoDokumentation der Projektstruktur, Template-Architektur und Menü-Konzept
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>
5 weeks agoWIP:hugo-juplo-theme
Kai Moritz [Sun, 31 May 2026 14:48:45 +0000 (16:48 +0200)]
WIP:hugo-juplo-theme

2 months ago`hibernate-maven-plugin/1.0.3` mit sili neu generiert
Kai Moritz [Thu, 7 May 2026 22:14:41 +0000 (00:14 +0200)]
`hibernate-maven-plugin/1.0.3` mit sili neu generiert

2 months ago`hibernate-maven-plugin/1.0.4` mit sili neu generiert
Kai Moritz [Thu, 7 May 2026 21:41:26 +0000 (23:41 +0200)]
`hibernate-maven-plugin/1.0.4` mit sili neu generiert

2 months ago`hibernate-maven-plugin/1.0.5` mit sili neu generiert
Kai Moritz [Thu, 7 May 2026 21:33:40 +0000 (23:33 +0200)]
`hibernate-maven-plugin/1.0.5` mit sili neu generiert

2 months ago`hibernate-maven-plugin/1.1.0` mit sili neu generiert
Kai Moritz [Thu, 7 May 2026 21:27:45 +0000 (23:27 +0200)]
`hibernate-maven-plugin/1.1.0` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.2-SNAPSHOT` mit sili neu generiert
Kai Moritz [Mon, 4 May 2026 21:21:45 +0000 (23:21 +0200)]
WIP:`hibernate-maven-plugin/2.1.2-SNAPSHOT` mit sili neu generiert

2 months ago`hibernate-maven-plugin/1.1.1` mit sili neu generiert
Kai Moritz [Mon, 4 May 2026 20:48:53 +0000 (22:48 +0200)]
`hibernate-maven-plugin/1.1.1` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.0.0` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 17:13:48 +0000 (19:13 +0200)]
WIP:`hibernate-maven-plugin/2.0.0` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.0` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 17:09:00 +0000 (19:09 +0200)]
WIP:`hibernate-maven-plugin/2.1.0` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.1` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 13:49:44 +0000 (15:49 +0200)]
WIP:`hibernate-maven-plugin/2.1.1` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.2-SNAPSHOT` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 13:42:45 +0000 (15:42 +0200)]
WIP:`hibernate-maven-plugin/2.1.2-SNAPSHOT` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.0.0` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 12:55:46 +0000 (14:55 +0200)]
WIP:`hibernate-maven-plugin/2.0.0` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.1` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 12:53:15 +0000 (14:53 +0200)]
WIP:`hibernate-maven-plugin/2.1.1` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.2-SNAPSHOT` mit sili neu generiert
Kai Moritz [Wed, 29 Apr 2026 11:36:08 +0000 (13:36 +0200)]
WIP:`hibernate-maven-plugin/2.1.2-SNAPSHOT` mit sili neu generiert

2 months agoWIP:`hibernate-maven-plugin/2.1.1` mit sili neu generiert
Kai Moritz [Sun, 19 Apr 2026 15:11:51 +0000 (17:11 +0200)]
WIP:`hibernate-maven-plugin/2.1.1` mit sili neu generiert

2 months agoWIP:hugo-juplo-theme
Kai Moritz [Wed, 29 Apr 2026 11:22:59 +0000 (13:22 +0200)]
WIP:hugo-juplo-theme

2 months ago`hibernate-maven-plugin/2.0.0` mit sili neu generiert
Kai Moritz [Wed, 22 Apr 2026 07:24:07 +0000 (09:24 +0200)]
`hibernate-maven-plugin/2.0.0` mit sili neu generiert

2 months ago`hibernate-maven-plugin/2.1.0` mit sili neu generiert
Kai Moritz [Wed, 22 Apr 2026 07:13:48 +0000 (09:13 +0200)]
`hibernate-maven-plugin/2.1.0` mit sili neu generiert

2 months agoAlias für den Blog-Artikel mit der ursprünglichen Ankündigung des `hibernate-maven...
Kai Moritz [Sun, 19 Apr 2026 15:18:15 +0000 (17:18 +0200)]
Alias für den Blog-Artikel mit der ursprünglichen Ankündigung des `hibernate-maven-plugin`