Lichterei-Inhalte aus dem Template in die Markdown-Datei holen

Einleitungstext und Bildliste standen fest verdrahtet in
layouts/lampe/single.html, die Galerie lief ueber ein hartes
"range seq 1 7". Inhaltliche Aenderungen erforderten damit
Eingriffe ins Template.

Der Text steht jetzt als Fliesstext in lichterei.md und wird ueber
.Content gerendert, die Bilder als Liste "lampen" im Frontmatter mit
optionaler Bildunterschrift. Das Template iteriert ueber die Liste,
statt auf sieben Eintraege festgelegt zu sein.

Leerer text-Wert unterdrueckt die figcaption und laesst den alt-Text
auf "Lampe N" zurueckfallen - die Seite rendert damit unveraendert.

Ausserdem: AGENTS.md als Arbeitsanweisung fuer die lokale
LLM-gestuetzte Bearbeitung, CSS-Regel fuer figcaption ergaenzt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-30 23:37:31 +02:00
parent a2f475da7c
commit 4420b26752
4 changed files with 159 additions and 3 deletions

136
AGENTS.md Normal file
View File

@@ -0,0 +1,136 @@
# robbis.space — Arbeitsanweisung
Hugo-Website. **Deine Aufgabe ist fast immer: Inhalte ändern.** Layout, Theme und
Deployment stehen und sollen nicht angefasst werden.
## Vorschau starten
```bash
cd /Users/robertrapp/robbis.space && hugo server -D
```
Läuft dann auf http://localhost:1313 und lädt bei jeder Dateiänderung neu.
Zum Beenden Ctrl+C.
## Wo Inhalte liegen
Alle Texte sind Markdown-Dateien unter `content/projects/`:
| Datei | Seite |
|---|---|
| `content/projects/_index.md` | Übersichtsseite /projects/ |
| `content/projects/mindboost.md` | /projects/mindboost/ |
| `content/projects/lichterei.md` | /projects/lichterei/ |
| `content/projects/festivals.md` | /projects/festivals/ |
| `content/projects/gemeinschaft.md` | /projects/gemeinschaft/ |
| `content/projects/kollektivarbeit.md` | /projects/kollektivarbeit/ |
Der Dateiname bestimmt die URL. Datei umbenennen = URL ändern.
## Aufbau einer Inhaltsdatei
Jede Datei beginnt mit einem Frontmatter-Block zwischen `---`, danach kommt
normales Markdown:
```markdown
---
title: "Mindboost"
type: page
---
Hier steht der Fließtext als Markdown.
```
Nur diese Felder sind erlaubt:
| Feld | Pflicht | Bedeutung |
|---|---|---|
| `title` | ja | Überschrift, immer in Anführungszeichen |
| `type` | ja | **nur `page` oder `lampe`** |
| `date` | nein | Erstelldatum |
| `lastmod` | nein | Datum der letzten Änderung |
| `image` | nein | Vorschaubild, Pfad wie bei Bildern unten |
| `showTableOfContents` | nein | `true` oder `false` |
`type: lampe` benutzt das Sonderlayout `layouts/lampe/single.html` und wird
aktuell nur von `lichterei.md` verwendet. Im Zweifel `page` nehmen.
Erfinde keine Felder außerhalb dieser Tabelle — sie werden ignoriert.
## Neue Seite anlegen
```bash
hugo new content/projects/meineseite.md
```
Das erzeugt den Frontmatter-Block bereits fertig mit `type: "page"`.
Nur noch `title` anpassen und den Text darunter schreiben.
Die Seite erscheint automatisch unter /projects/meineseite/.
Damit sie auch im Hauptmenü auftaucht, muss ein Eintrag in `hugo.toml`
unter `[[menu.main]]` ergänzt werden — nur dann, wenn ausdrücklich gewünscht.
## Bilder
Bilder gehören nach `static/`. Was dort liegt, landet unverändert im
fertigen Build. Eine Datei `static/lampen/lampe1.jpg` wird im Markdown so
eingebunden:
```markdown
![Beschreibung](/lampen/lampe1.jpg)
```
Der Pfad beginnt mit `/`, ohne `static` davor.
## Sonderfall Lichterei
`content/projects/lichterei.md` ist die Lampengalerie und funktioniert
anders als die übrigen Seiten. Der Text unter dem Frontmatter ist der
Einleitungstext. Die Bilder stehen als Liste `lampen:` im Frontmatter:
```yaml
lampen:
- bild: /lampen/lampe1.jpg
text: "Die erste, aus einem Weinkarton"
- bild: /lampen/lampe2.jpg
text: ""
```
- `bild` ist der Pfad ab `/`, die Datei muss unter `static/lampen/` liegen.
- `text` ist die Bildunterschrift. Bei `""` wird keine angezeigt.
**Neue Lampe hinzufügen:** Bild nach `static/lampen/` legen, dann einen
Eintrag mit `bild` und `text` an die Liste anhängen. Sonst nichts — die
Galerie zählt die Einträge selbst.
Fasse dafür **nicht** `layouts/lampe/single.html` an. Bilder und Text
kommen vollständig aus der Markdown-Datei.
## Nicht anfassen
- `themes/gokarna/` — Git-Submodule, fremder Code. Änderungen gehen beim
nächsten Update verloren.
- `public/` — wird bei jedem Build neu erzeugt. Änderungen sind sofort weg.
- `kirby/` — trotz des Namens der Deployment-Container (nginx + Hugo).
Nur anfassen, wenn ausdrücklich das Deployment geändert werden soll.
- `layouts/` und `hugo.toml` — nur nach ausdrücklicher Aufforderung.
## Veröffentlichen
Push auf `main` genügt:
```bash
git add -A && git commit -m "Beschreibung" && git push
```
Gitea ruft danach `deploy.php` auf dem Server auf. Das Skript macht
`git pull`, aktualisiert die Submodules und baut die Seite mit `hugo` neu.
Es gibt keinen weiteren Schritt und nichts manuell hochzuladen.
## Vor jedem Commit
```bash
hugo --quiet
```
Läuft das ohne Ausgabe durch, ist der Build in Ordnung. Fehler hier
bedeuten, dass auch das Deployment fehlschlägt.

View File

@@ -1,4 +1,22 @@
--- ---
title: "Lichterei" title: "Lichterei"
type: lampe type: lampe
lampen:
- bild: /lampen/lampe1.jpg
text: ""
- bild: /lampen/lampe2.jpg
text: ""
- bild: /lampen/lampe3.jpg
text: ""
- bild: /lampen/lampe4.jpg
text: ""
- bild: /lampen/lampe5.jpg
text: ""
- bild: /lampen/lampe6.jpg
text: ""
- bild: /lampen/lampe7.jpg
text: ""
--- ---
Lampen die ich gesammelt, gebastelt und geliebt habe. Jede hat ihre eigene
Geschichte und ihren eigenen Glow.

View File

@@ -11,12 +11,13 @@
<main id="content"> <main id="content">
<section class="lichterei-hero"> <section class="lichterei-hero">
<h1>{{ .Title }}</h1> <h1>{{ .Title }}</h1>
<p class="intro">Lampen die ich gesammelt, gebastelt und geliebt habe. Jede hat ihre eigene Geschichte und ihren eigenen Glow.</p> <div class="intro">{{ .Content }}</div>
</section> </section>
<section class="lampen-grid"> <section class="lampen-grid">
{{ range $index, $element := seq 1 7 }} {{ range $index, $lampe := .Params.lampen }}
<figure class="lampe-card" style="animation-delay: {{ div $index 10 }}s"> <figure class="lampe-card" style="animation-delay: {{ div $index 10 }}s">
<img src="/lampen/lampe{{ $element }}.jpg" alt="Lampe {{ $element }}" loading="lazy"> <img src="{{ $lampe.bild }}" alt="{{ with $lampe.text }}{{ . }}{{ else }}Lampe {{ add $index 1 }}{{ end }}" loading="lazy">
{{ with $lampe.text }}<figcaption>{{ . }}</figcaption>{{ end }}
</figure> </figure>
{{ end }} {{ end }}
</section> </section>

View File

@@ -9,3 +9,4 @@ body.lampe-type, body.lampe-type main { background:#111!important; color:#eee!im
.lampe-card img { width:100%; height:auto; display:block; } .lampe-card img { width:100%; height:auto; display:block; }
@keyframes floatIn { from{opacity:0;transform:translateY(30px)} to{opacity:1;transform:translateY(0)} } @keyframes floatIn { from{opacity:0;transform:translateY(30px)} to{opacity:1;transform:translateY(0)} }
@keyframes gentleFloat { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-8px)} } @keyframes gentleFloat { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-8px)} }
.lampe-card figcaption { padding:.75rem 1rem; font-size:.95rem; opacity:.8; line-height:1.4; }