- docs/STATUS.md: was ist getan, was läuft live, wo liegen die Fäden
- docs/HANDOFF.md: nächste Optionen (Publish-Pipeline, Menü, Cutover),
Dev-Kommandos, bekannte Stolperfallen
- .claude/skills/joerglohrerde-workflow.md: repo-spezifischer Skill
zum Session-Start — Konventionen, API-Eigenheiten, wiederkehrende
Kommandos, wie mit Jörg arbeiten
- README.md als Navigation zu allen Dokumenten
Damit kann die nächste Session ohne Kontextverlust fortgeführt werden.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deckt die vollständige SPA-Spec ab: Setup + adapter-static, Daten-
ebene (Relay-Pool, Loader, Profil, Markdown, Signer), Routing mit
Legacy-URL-Normalisierung, Tag-Filter, Reactions, NIP-07-Kommentare.
TDD für pure Transformationen (URL-Parser, naddr, Markdown), E2E mit
Playwright für Happy-Paths.
Deploy-Ziel: svelte.joerg-lohrer.de. spa.joerg-lohrer.de bleibt als
Vanilla-Mini-Spike-MVP erhalten (Referenz-Verhalten).
Publish-Pipeline hat eigene Spec und bekommt separaten Plan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Revidiert das URL-Schema: die lange Hugo-Form /YYYY/MM/DD/<dtag>.html/
wird als Legacy behandelt, die kurze Form /<dtag>/ als kanonisch.
Gründe: schöner zu teilen, skaliert über die 18 Altposts hinaus,
Datumskomponente fügt keinen Informationswert (Datum steht im Event
als published_at).
Legacy-URLs werden clientseitig via history.replaceState ohne Reload
auf die kurze Form normalisiert — Backlinks bleiben funktional,
Bookmarks konvergieren zur kurzen Form. Keine .htaccess-Redirects.
Im Mini-Spike bereits umgesetzt und live auf spa.joerg-lohrer.de.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Die produktive SPA soll Events wahrheitsgetreu darstellen und nicht
defensiv korrigieren. Daten-Anomalien (doppelte t-Tags etc.) bleiben
sichtbar, damit der Autor sie wahrnimmt. Bereinigung gehört in
separate Audit-Werkzeuge, nicht in die SPA-Renderlogik.
Der Mini-SPA-Spike dedup'te pragmatisch — explizit als Abweichung
vom Zielverhalten vermerkt.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Häufige Sorge ("kann mein einfaches Webspace-Paket SvelteKit hosten?")
explizit beantwortet: SvelteKit mit adapter-static produziert reine
statische Dateien, exakt analog zu Hugos public/. Webspace, FTP und
.htaccess reichen vollständig — keine Node-Runtime, keine Datenbank,
kein vServer nötig.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Publish-Pipeline für den Weg Markdown → signiertes kind:30023 → Relays,
plus Bilder-Upload (Legacy: rsync zu All-Inkl für die 18 Altposts;
Blossom: BUD-01-Upload für neue Posts).
Kernpunkte:
- Deno-Runtime, gemeinsame Library und CLI für lokal + GitHub Action
- NIP-46 Bunker (Amber-Stufe, später Optiplex-Stufe ohne Code-Change)
- Relay- und Blossom-Server-Listen via kind:10002 / kind:10063
(manuell einmalig publiziert, identisch mit SPA-Nutzung)
- Git-Diff als Change-Detection, --force-all für Migration/Reimport
- State-los im Repo, keine Lock-Files, keine Commits zurück
- Pre-Flight `deno task check` validiert alle Voraussetzungen
Beziehung zur SPA-Spec: gemeinsame Event-Verträge (kind:30023, 10002,
10063) sind in dieser Spec normativ; SPA-Spec verweist darauf.
Publish läuft einmalig für die 18 Altposts (SPA-Migrationsschritt C)
vor dem SPA-Cutover (Schritt D).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Die Relay-Liste wird zur Laufzeit aus dem NIP-65-Outbox-Event geholt
(via Bootstrap-Relay), mit hartcodierter Fallback-Liste als Sicherheit.
Damit teilen SPA und Publish-Pipeline eine gemeinsame Quelle der
Wahrheit für Relay-Konfiguration — Änderungen erfordern nur ein neues
Event, keinen Code-Deploy.
Publish-Spec wird das normative Schema für kind:10002 und kind:10063
definieren; SPA-Spec verweist darauf.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SvelteKit-SPA, die Blog-Posts live aus signierten kind:30023-Events
von Public-Relays rendert. Ablösung der Hugo-Seite auf All-Inkl ohne
eigene Infrastruktur in Phase 1; Stubs, eigener Relay und Blossom als
Evolutionspfad.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>