2026-04-15 18:34:15 +02:00
|
|
|
|
# Handoff — Nächste Session
|
|
|
|
|
|
|
|
|
|
|
|
Du (Claude, nächste Session) oder ich (Jörg, später) kommen hier zurück.
|
|
|
|
|
|
Dieses Dokument sagt: was ist der Zustand, was wartet, wo liegen die Fäden.
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
## Zustand (Details in `STATUS.md`)
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
Die SvelteKit-SPA unter `svelte.joerg-lohrer.de` ist **fertig und live**.
|
2026-04-16 15:17:57 +02:00
|
|
|
|
Alle 18 Posts haben jetzt **strukturierte Bild-Metadaten** im Frontmatter
|
|
|
|
|
|
(Commit `c023b59`, 91 Bilder). Der Publish-Pipeline-**Plan ist geschrieben**
|
|
|
|
|
|
(`docs/superpowers/plans/2026-04-16-publish-pipeline.md`, 24 Tasks in 12 Phasen).
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
**Als nächstes:** Pipeline implementieren, beginnend mit Task 1.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
## Was als Nächstes ansteht
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
### Option 1 — Publish-Pipeline implementieren ⬅ empfohlen
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
**Warum:** Spec + Plan fertig, Content vorbereitet, alle Design-Entscheidungen
|
|
|
|
|
|
getroffen. Kann direkt losgehen.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
**Nächster konkreter Schritt:**
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
```
|
|
|
|
|
|
cd /Users/joerglohrer/repositories/joerglohrerde
|
|
|
|
|
|
```
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
Dann den Plan öffnen:
|
2026-04-15 18:34:15 +02:00
|
|
|
|
```
|
2026-04-16 15:17:57 +02:00
|
|
|
|
docs/superpowers/plans/2026-04-16-publish-pipeline.md
|
2026-04-15 18:34:15 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
Und Task 1 (Deno-Projekt-Grundgerüst) starten. Der Plan nutzt TDD;
|
|
|
|
|
|
jeder Task hat Test-First, Implementation, Commit.
|
|
|
|
|
|
|
|
|
|
|
|
**Ausführungsweisen:**
|
|
|
|
|
|
- **Subagent-Driven** (im Plan empfohlen): pro Task frischer Subagent,
|
|
|
|
|
|
Review zwischen Tasks. Skill: `superpowers:subagent-driven-development`.
|
|
|
|
|
|
- **Inline**: alles in einer Session. Skill: `superpowers:executing-plans`.
|
|
|
|
|
|
|
|
|
|
|
|
**Besonderheiten beim Plan:**
|
|
|
|
|
|
- Pipeline ist **Blaupause** für andere Nostr-Repos — keine
|
|
|
|
|
|
Projekt-Konstanten im Code, alles via Env.
|
|
|
|
|
|
- **Env-File:** nutzt `../.env.local` (Repo-Root), wo `BUNKER_URL`,
|
|
|
|
|
|
`AUTHOR_PUBKEY_HEX`, `BOOTSTRAP_RELAY` bereits stehen.
|
|
|
|
|
|
- **Blossom-only**: keine rsync/SSH-Altlasten mehr; alle Bilder (auch
|
|
|
|
|
|
die der 17 Altposts) werden zu Blossom hochgeladen.
|
|
|
|
|
|
- **Staging:** `staging.joerg-lohrer.de` zeigt auf `/www/htdocs/v109928/joerglohrer26/`.
|
|
|
|
|
|
Wird erst beim Cutover relevant — Pipeline selbst braucht es nicht.
|
|
|
|
|
|
|
|
|
|
|
|
**Vorarbeiten (bereits erledigt):**
|
|
|
|
|
|
- ✅ SSH-Zugang All-Inkl (Premium): `ssh-v109928@v109928.kasserver.com`
|
|
|
|
|
|
mit Deploy-Key `~/.ssh/id_ed25519_joerglohrerde_deploy` (auch im KAS
|
|
|
|
|
|
eingetragen). Wird jetzt allerdings nicht mehr für die Pipeline
|
|
|
|
|
|
gebraucht — Blossom-only.
|
|
|
|
|
|
- ✅ `.env.local` enthält alle Pipeline-Keys.
|
|
|
|
|
|
- ✅ Content-Migration (18 Posts × Bild-Metadaten) abgeschlossen.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
### Option 2 — Menü-Navigation + Impressum auf der SPA
|
|
|
|
|
|
|
|
|
|
|
|
**Warum:** kleine UX-Ergänzung, die das SPA-Erlebnis runder macht.
|
|
|
|
|
|
|
|
|
|
|
|
- Header-Navigation in `app/src/routes/+layout.svelte` ergänzen (Home, Archiv,
|
|
|
|
|
|
Impressum, evtl. Mastodon-Link)
|
|
|
|
|
|
- `/impressum/`-Route anlegen mit rechtlichem Text
|
|
|
|
|
|
- ggf. Archives-Route als eigene Liste mit Gruppierung nach Jahr
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
**Aufwand:** ~30-60 min.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
### Option 3 — Cutover auf Hauptdomain
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
**Voraussetzung:** Option 1 abgeschlossen und alle 18 Posts als Events
|
|
|
|
|
|
publiziert, Bilder auf Blossom.
|
|
|
|
|
|
|
|
|
|
|
|
**Dann:** KAS → Domain `joerg-lohrer.de` auf den SvelteKit-Webroot
|
|
|
|
|
|
umhängen (derselbe wie `svelte.joerg-lohrer.de` oder `joerglohrer26/`,
|
|
|
|
|
|
je nach Entscheidung).
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
Reihenfolge: **Option 1 → Option 3**, Option 2 kann parallel laufen.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
## Schnell-Orientierung für die nächste Claude-Session
|
|
|
|
|
|
|
|
|
|
|
|
Lies in dieser Reihenfolge:
|
|
|
|
|
|
1. `docs/STATUS.md` (5 min)
|
|
|
|
|
|
2. `docs/HANDOFF.md` (= dieses Dokument)
|
2026-04-16 15:17:57 +02:00
|
|
|
|
3. Für die Pipeline: `docs/superpowers/plans/2026-04-16-publish-pipeline.md`
|
|
|
|
|
|
4. Bei Design-Fragen:
|
2026-04-15 18:34:15 +02:00
|
|
|
|
- Publish-Pipeline: `docs/superpowers/specs/2026-04-15-publish-pipeline-design.md`
|
2026-04-16 15:17:57 +02:00
|
|
|
|
- Bild-Metadaten: `docs/superpowers/specs/2026-04-16-image-metadata-convention.md`
|
|
|
|
|
|
- SPA: `docs/superpowers/specs/2026-04-15-nostr-page-design.md`
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
Nutze den Skill unter `.claude/skills/joerglohrerde-workflow.md` für
|
|
|
|
|
|
wiederkehrende Kommandos.
|
|
|
|
|
|
|
|
|
|
|
|
## Dev-Kommandos
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-04-16 15:17:57 +02:00
|
|
|
|
# Unit-Tests SPA (Vitest)
|
2026-04-15 18:34:15 +02:00
|
|
|
|
cd app && npm run test:unit
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
# E2E-Tests SPA (Playwright)
|
2026-04-15 18:34:15 +02:00
|
|
|
|
cd app && npm run test:e2e
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
# Type-Check SPA
|
2026-04-15 18:34:15 +02:00
|
|
|
|
cd app && npm run check
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
# SPA-Dev-Server (Port 5173)
|
2026-04-15 18:34:15 +02:00
|
|
|
|
cd app && npm run dev
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
# SPA-Production-Build + Deploy
|
2026-04-15 18:34:15 +02:00
|
|
|
|
cd app && npm run build && cd .. && ./scripts/deploy-svelte.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
Publish-Pipeline-Kommandos (sobald implementiert):
|
2026-04-15 18:34:15 +02:00
|
|
|
|
```sh
|
2026-04-16 15:17:57 +02:00
|
|
|
|
cd publish && deno task check # Pre-Flight
|
|
|
|
|
|
cd publish && deno task publish --dry-run # Simulation
|
|
|
|
|
|
cd publish && deno task publish --post <slug> # einen Post
|
|
|
|
|
|
cd publish && deno task publish --force-all # alle Posts
|
|
|
|
|
|
cd publish && deno task test # Tests
|
2026-04-15 18:34:15 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-16 15:17:57 +02:00
|
|
|
|
## Manuelles Publishen (Übergang, bis Pipeline fertig)
|
|
|
|
|
|
|
|
|
|
|
|
Siehe frühere Version dieses Dokuments. Bis die Pipeline läuft, gehen
|
|
|
|
|
|
neue Posts manuell über `nak event` raus.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
## Bekannte Stolperfallen
|
|
|
|
|
|
|
|
|
|
|
|
- **Amber-Bunker:** bei neuer Bunker-URL müssen globale Permissions in Amber
|
|
|
|
|
|
zurückgesetzt werden, sonst hängt `nak` auf den Signatur-Request.
|
2026-04-16 15:17:57 +02:00
|
|
|
|
Auto-Approve für `kind:30023` und `kind:24242` (Blossom-Auth) setzen.
|
2026-04-15 18:34:15 +02:00
|
|
|
|
- **Svelte 5 Runes:** `$props()`-Werte müssen via `$derived()` in lokale
|
|
|
|
|
|
Variablen, sonst `state_referenced_locally`-Warning.
|
|
|
|
|
|
- **applesauce-relay API:** ist RxJS-basiert. `pool.request(relays, filter)`
|
|
|
|
|
|
returned `Observable<NostrEvent>` (nicht die Tupel-`subscribe({next: msg
|
|
|
|
|
|
if msg[0]==='EVENT'})`-Form).
|
|
|
|
|
|
- **Slug-Normalisierung:** alle Frontmatter-Slugs sind lowercase (Commit
|
|
|
|
|
|
`d17410f`). Beim Publishen 1:1 übernehmen, keine Runtime-Transformation.
|
2026-04-16 15:17:57 +02:00
|
|
|
|
- **Dateiname mit Leerzeichen:** im Moodle-Post liegt `03-config generieren.png`.
|
|
|
|
|
|
Pipeline muss URL-Encoding im `rewriteImageUrls`-Helper korrekt umsetzen
|
|
|
|
|
|
(Test ist im Plan Task 5 vorgesehen).
|
2026-04-15 18:34:15 +02:00
|
|
|
|
|
|
|
|
|
|
## Session-Kontext
|
|
|
|
|
|
|
|
|
|
|
|
Hilfreich beim Wiedereinstieg mit Claude:
|
|
|
|
|
|
- Branch-Check: `git log --oneline -10 spa main hugo-archive`
|
|
|
|
|
|
- Live-Check: `curl -sI https://svelte.joerg-lohrer.de/`
|
2026-04-16 15:17:57 +02:00
|
|
|
|
- Publish-Status: `nak req -k 30023 -a 4fa5d1c413e2b45e10d40bf3562ab701a5331206e359c90baae0e99bfd6c6e41 wss://relay.damus.io 2>/dev/null | jq -s 'length'`
|
|
|
|
|
|
(aktuell ~10, nach Pipeline-Lauf `--force-all`: 18)
|
|
|
|
|
|
|
|
|
|
|
|
## Offene UNKNOWN-Einträge zur späteren Recherche
|
|
|
|
|
|
|
|
|
|
|
|
Im VR-Post (`content/posts/2021-08-15-virtual-reality/index.md`)
|
|
|
|
|
|
sind 4 Bilder als `license: UNKNOWN / authors: UNKNOWN` markiert:
|
|
|
|
|
|
- `01-immersion-wikipedia.jpg` (Wikipedia-Screenshot)
|
|
|
|
|
|
- `02-mittelalterliche-kirche.jpg` (Sketchfab — Lizenz ist CC BY-NC, Fotograf fehlt)
|
|
|
|
|
|
- `03-avatare-erstellen.jpg` (Ready Player Me)
|
|
|
|
|
|
- `05-pupillendistanz.jpg` (EyeMeasure iOS App)
|
|
|
|
|
|
|
|
|
|
|
|
Pipeline loggt beim Publishen eine Warnung pro UNKNOWN, publisht aber
|
|
|
|
|
|
trotzdem (Phase-1-Default: `STRICT_MODE=false`). Die Recherche-Todo-Liste
|
|
|
|
|
|
steht in `docs/redaktion-bild-metadaten.md`.
|
|
|
|
|
|
|
|
|
|
|
|
## Community-Wiki-Entwürfe
|
|
|
|
|
|
|
|
|
|
|
|
Noch nicht extern veröffentlicht, liegen im Repo bereit:
|
|
|
|
|
|
- `docs/wiki-entwurf-nostr-bild-metadaten.md` — DE
|
|
|
|
|
|
- `docs/wiki-draft-nostr-image-metadata.md` — EN
|
|
|
|
|
|
|
|
|
|
|
|
Können in die Nostr-Community eingebracht werden (z. B. als NIP-Proposal
|
|
|
|
|
|
oder auf nostrbook.dev), sobald die Pipeline sie in der Praxis validiert.
|