# 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.
