joerglohrerde/CLAUDE.md

106 lines
4.0 KiB
Markdown
Raw Normal View History

# CLAUDE.md — Einstieg für Claude-Sessions
Dieser Einstieg ist für Claude-Code-Sessions gedacht. Für den inhaltlichen
Projektstand siehe [`docs/STATUS.md`](docs/STATUS.md) und
[`docs/HANDOFF.md`](docs/HANDOFF.md).
## Was dieses Repo ist
Die persönliche Webseite [`joerg-lohrer.de`](https://joerg-lohrer.de/) als
SvelteKit-SPA, die Blog-Posts live aus Nostr-Events (NIP-23, `kind:30023`)
auf 5 Public-Relays rendert. Seit 2026-04-21 mehrsprachig (DE/EN).
## Einstiegsreihenfolge
1. Diese Datei (Agent-Konventionen, Fallstricke).
2. [`docs/STATUS.md`](docs/STATUS.md) — wo steht alles gerade.
3. [`docs/HANDOFF.md`](docs/HANDOFF.md) — Alltags-Workflow, Stolperfallen.
4. Für konkrete Aufgaben: Spec unter `docs/superpowers/specs/`, Plan unter
`docs/superpowers/plans/`.
## Sprache und Ton
- **Antworten und Commit-Messages auf Deutsch.**
- Code-Identifier auf Englisch.
- Kurz, konkret, kein Grundlagen-Tutorial. Jörg ist technisch versiert.
- Bei mehreren Wegen: 23 Varianten mit Empfehlung, nicht alles aufzählen.
## Commit-Konvention
- Conventional-Commit-Präfixe: `feat`, `fix`, `chore`, `docs`, `test`.
- Imperativ, Deutsch, Body erklärt das *Warum*.
- Co-Author immer ergänzen:
```
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
```
## Kritische Fallstricke
### 1. Deploy-Target
`scripts/deploy-svelte.sh` hat `DEPLOY_TARGET=svelte` als Default —
das zielt auf `svelte.joerg-lohrer.de`, NICHT auf die Produktion.
Für Live-Deploy auf `joerg-lohrer.de`:
```sh
DEPLOY_TARGET=prod ./scripts/deploy-svelte.sh
```
**Immer explizit setzen.** Der stumme Default-Fehler ist nur sichtbar,
wenn man die Live-Seite kontrolliert. Reproduzierbar als Memory-Entry
im Claude-Memory-System.
### 2. zsh-Globbing mit eckigen Klammern
SvelteKit-Routen wie `app/src/routes/[...slug]/+page.svelte` enthalten
eckige Klammern, die zsh als Glob-Pattern interpretiert. Pfade IMMER in
einfachen Anführungszeichen:
```sh
git add 'app/src/routes/[...slug]/+page.svelte'
```
### 3. Forgejo → GitHub Push-Mirror
`git push` landet zuerst auf Forgejo (`forgejo.joerglohrer.synology.me`).
Der Forgejo-Mirror synct dann zu GitHub (typisch 3090 s). Die GitHub-
Action (Publish-Pipeline) läuft erst nach dem Mirror. Wer direkt nach
`git push` `gh run list` aufruft, sieht evtl. noch keinen neuen Run.
### 4. Deno-Path-Konventionen
Publish-Pipeline läuft aus `publish/` (CWD), daher sind Pfade relativ
mit `../content/posts/...`. Git-Diff liefert aber repo-root-relative
Pfade (`content/posts/...`). `changedPostDirs` normalisiert beides —
wenn `posts=0` obwohl Änderungen vorliegen, ist das der Hotspot.
### 5. Publish-Pipeline erwartet `content/posts/<lang>/<slug>/`
Die Zwei-Ebenen-Struktur ist Teil der Traversierung. Wer einen Post
versehentlich in `content/posts/<slug>/` (ohne Sprach-Ordner) anlegt,
wird von der Pipeline ignoriert.
## Hauptarbeitsbereiche im Repo
| Pfad | Inhalt |
|---|---|
| `content/posts/<lang>/<slug>/index.md` | Markdown-Posts pro Sprache |
| `app/src/lib/i18n/` | UI-Lokalisierung (svelte-i18n, activeLocale-Store) |
| `app/src/lib/nostr/` | Relay-Loader, Translations-Resolving |
| `app/src/lib/components/` | Svelte-5-Runes-Komponenten |
| `app/src/routes/` | SvelteKit-Routen (Layout, Home, Archiv, Post, Impressum) |
| `publish/src/` | Deno-Publish-Pipeline (Deno-Tasks in `publish/deno.jsonc`) |
| `publish/tests/` | Deno-Tests für die Pipeline |
| `docs/superpowers/specs/` | Produktdesigns, Konventionen |
| `docs/superpowers/plans/` | Implementierungspläne (alle erledigt) |
| `scripts/deploy-svelte.sh` | FTPS-Deploy |
## Quick-Links
- [Produktspezifikation SPA](docs/superpowers/specs/2026-04-15-nostr-page-design.md)
- [Produktspezifikation Publish-Pipeline](docs/superpowers/specs/2026-04-15-publish-pipeline-design.md)
- [Bild-Metadaten-Konvention](docs/superpowers/specs/2026-04-16-image-metadata-convention.md)
- [Multilingual-Design](docs/superpowers/specs/2026-04-21-multilingual-posts-design.md)
- [Repo-Workflow-Skill](.claude/skills/joerglohrerde-workflow.md) (ausführlicher, mit Kommandos)