joerglohrerde/docs/STATUS.md

6.4 KiB
Raw Blame History

Projekt-Status: joerg-lohrer.de → Nostr-basierte SPA

Stand: 2026-04-18

Kurzfassung

Jörg Lohrers persönliche Webseite wird von einem Hugo-basierten statischen Site-Generator zu einer dezentralen Nostr-basierten SPA überführt. Posts existieren als signierte Events (NIP-23, kind:30023) auf Public-Relays und werden zur Laufzeit im Browser gerendert.

Vier parallele Webseiten

URL Status Rolle
https://joerg-lohrer.de/ live, unverändert Hugo-Altbestand (bleibt bis Cutover)
https://spa.joerg-lohrer.de/ live Vanilla-HTML-Mini-Spike (Proof of Concept)
https://svelte.joerg-lohrer.de/ live SvelteKit-SPA (35-Task-Plan komplett)
https://staging.joerg-lohrer.de/ live, leer Staging (Webroot joerglohrer26/ für Pipeline-Entwicklung; FTP-Creds in .env.local)

Die SvelteKit-SPA unter svelte.joerg-lohrer.de ist die Ziel-Implementierung. spa.joerg-lohrer.de bleibt als schlanke Referenz erhalten. Hugo läuft weiter, bis die Publish-Pipeline steht und der Cutover auf die Hauptdomain erfolgt.

Was auf Nostr liegt

  • Autoren-Pubkey: npub1f7jar3qnu269uyx5p0e4v24hqxjnxysxudvujza2ur5ehltvdeqsly2fx9 (hex: 4fa5d1c413e2b45e10d40bf3562ab701a5331206e359c90baae0e99bfd6c6e41)
  • Publizierte Events: 18 Langform-Posts (kind:30023) — alle Altposts via Publish-Pipeline migriert (Commit 0c6fdd1, Log in docs/publish-logs/2026-04-18-force-all-migration.json).
  • Relay-Liste (kind:10002): relay.damus.io, nos.lol, relay.primal.net, relay.tchncs.de, relay.edufeed.org
  • Blossom-Server (kind:10063): blossom.edufeed.org, blossom.primal.net

91 Bilder auf beiden Blossom-Servern. Alle Events enthalten hash-basierte Blossom-URLs. SPA rendert alle Posts einheitlich — kein Legacy-Pfad, keine rsync-Artefakte.

Repo-Struktur

joerglohrerde/
├── content/posts/             # 18 Markdown-Posts, alle mit structured images: im Frontmatter
├── app/                       # SvelteKit-SPA (Ziel-Implementation)
├── preview/spa-mini/          # Vanilla-HTML-Mini-Spike (Referenz)
├── publish/                   # NOCH NICHT ANGELEGT — Publish-Pipeline (Task 1 aus Plan)
├── scripts/
│   └── deploy-svelte.sh       # FTPS-Deploy nach svelte.joerg-lohrer.de
├── docs/
│   ├── STATUS.md              # Dieses Dokument
│   ├── HANDOFF.md             # Wie man hier weitermacht
│   ├── redaktion-bild-metadaten.md           # Checkliste, Bild-Durchgang (abgearbeitet)
│   ├── wiki-entwurf-nostr-bild-metadaten.md  # Wiki-Konvention deutsch
│   ├── wiki-draft-nostr-image-metadata.md    # Wiki-Konvention englisch
│   └── superpowers/
│       ├── specs/             # SPA + Publish-Pipeline + Bild-Metadaten-Konvention
│       └── plans/
│           ├── 2026-04-15-spa-sveltekit.md             # erledigt
│           └── 2026-04-16-publish-pipeline.md          # ⬅ als nächstes
├── .claude/
│   ├── skills/                # Repo-spezifischer Claude-Skill
│   └── settings.local.json    # Claude-Session-State (gitignored)
└── .env.local                 # Gitignored: FTP-Creds, Bunker-URL, Publish-Pipeline-Keys

Branch-Layout (Git)

  • main — kanonischer Zweig.
  • spa — aktueller Arbeits-Branch, vor main. SvelteKit-SPA live, Content-Migration (Bild-Metadaten) abgeschlossen, Publish-Pipeline geplant.
  • hugo-archive — Orphan-Branch mit Hugo-Zustand, eingefroren.

Setup-Zustand

Einmalig manuell erledigt:

  • Amber-Bunker-URL in .env.local als BUNKER_URL
  • FTP-Creds für alle Subdomains (SPA, SVELTE, STAGING) in .env.local
  • AUTHOR_PUBKEY_HEX und BOOTSTRAP_RELAY=wss://relay.primal.net in .env.local
  • kind:10002-Event publiziert (Relay-Liste)
  • kind:10063-Event publiziert (Blossom-Server)
  • Subdomains mit TLS + HSTS
  • Staging-Subdomain staging.joerg-lohrer.de → Webroot joerglohrer26/

Alles in .env.local — gitignored, nicht committet.

Offene Punkte

  • CI-Mirror Forgejo → GitHub eingerichtet, GitHub-Secrets gesetzt. End-to-End-Test (Content-Commit, Workflow-Trigger, CI-Lauf) noch offen. Später: Migration auf Woodpecker oder Cron auf Optiplex möglich (siehe docs/github-ci-setup.md).
  • Menü-Navigation in der SPA (Home / Archiv / Impressum / Kontakt)
  • Impressum-Seite (braucht rechtlichen Text)
  • Cutover auf joerg-lohrer.de (Pipeline läuft, Voraussetzung erfüllt; Hauptdomain kann auf SvelteKit-SPA umgestellt werden)
  • 5 UNKNOWN-Einträge im virtual-reality-Post zur späteren Recherche (Wikipedia-Screenshot, Sketchfab-Fotograf, Ready-Player-Me, EyeMeasure-App)

Erledigt seit 2026-04-15

  • Content-Migration: alle 18 Posts haben strukturierte images:-Liste im Frontmatter (91 Bilder, mit Alt-Text, Lizenz, Autor:innen, ggf. Caption und Modifications). Commit c023b59.
  • Erlebnispädagogik-Post: tote Amazon-Hotlinks entfernt.
  • Spec, Plan und Bild-Metadaten-Konvention geschrieben.
  • Community-Wiki-Entwürfe (DE + EN) für Nostr-Bildattribution.
  • Publish-Pipeline komplett implementiert, 22 Tasks aus dem Plan:
    • 18 Code-Tasks (Phase 16), 59 Unit-Tests grün
    • Stabile NIP-46-Anbindung via CLIENT_SECRET_HEX für wiederverwendbare App-Identität in Amber
    • validatePost akzeptiert auch string-dates (für Hugo-Kompatibilität)
  • Alle 18 Altposts publiziert als kind:30023-Events (Commit 0c6fdd1, Log in docs/publish-logs/2026-04-18-force-all-migration.json).
  • 91 Bilder auf beiden Blossom-Servern.
  • SPA rendert alle Posts mit Bildern von Blossom (visuell verifiziert).
  • GitHub-Actions-Workflow angelegt (.github/workflows/publish.yml).
  • Forgejo → GitHub Push-Mirror eingerichtet, GitHub-Secrets gesetzt.

Live-Verifikation

curl -sI https://svelte.joerg-lohrer.de/ | head -3
curl -sI https://staging.joerg-lohrer.de/ | head -3

Kontakt zur Implementierung

Alle Design-Entscheidungen in:

  • docs/superpowers/specs/2026-04-15-nostr-page-design.md (SPA)
  • docs/superpowers/specs/2026-04-15-publish-pipeline-design.md (Publish, Blossom-only)
  • docs/superpowers/specs/2026-04-16-image-metadata-convention.md (Bild-Metadaten-YAML)
  • docs/superpowers/plans/2026-04-16-publish-pipeline.md (24 Tasks, als nächstes)

Für die nächste Session: docs/HANDOFF.md lesen.