Go to file
Jörg Lohrer d12ed3c40e docs: status/handoff/readme/claude.md auf multilingual-stand
- README: neue plan-referenzen (3x multilingual), repo-struktur auf
  content/posts/<lang>/<slug>/, svelte-i18n + translations im app-tree
- STATUS: event-count 27 (26 de + 1 en), kurzfassung um mehrsprachigkeit,
  multilingual-abschnitt in „erledigt" (pipeline, spa, i18n + bugfixes)
- HANDOFF: option D entfernt (erledigt), neuer abschnitt „wie man eine
  übersetzung anlegt", frontmatter-template um a:-platzhalter,
  deploy-target-stolperfalle verschärft, vr-post-pfad aktualisiert
- Multilingual-spec: status von „noch nicht implementiert" auf „umgesetzt"
  + anmerkung zum post-switcher (📖 DE | EN statt text-hinweis)
- CLAUDE.md neu: knapper einstieg für agent-sessions mit commit-konvention,
  deploy-falle, zsh-globbing, forgejo-mirror-timing
- workflow-skill generalüberholt: post-cutover-stand, multilingual,
  publish-pipeline, activeLocale, 73 pipeline-tests

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 16:31:16 +02:00
.claude docs: status/handoff/readme/claude.md auf multilingual-stand 2026-04-21 16:31:16 +02:00
.github/workflows publish(task 22): github-actions-workflow für auto-publish 2026-04-18 06:52:08 +02:00
app feat(app): sprach-switcher direkt im post (📖 DE | EN) 2026-04-21 16:09:33 +02:00
content feat(content): erste englische übersetzung (bible-selfies) + bidirektionaler a-tag 2026-04-21 12:53:59 +02:00
docs docs: status/handoff/readme/claude.md auf multilingual-stand 2026-04-21 16:31:16 +02:00
preview/spa-mini spike(spa-mini): legacy-hugo-urls auf kurze form normalisieren 2026-04-15 14:44:25 +02:00
publish fix(publish): changedPostDirs gibt pfade mit original-contentRoot zurück 2026-04-21 10:18:20 +02:00
scripts spa/deploy: dynamische site-url via __SITE_URL__-platzhalter, staging + prod als deploy-targets 2026-04-18 10:01:08 +02:00
static comment integration ohne styling 2025-02-12 19:43:36 +01:00
.gitignore spike(spa-mini): vanilla-html viewer für einen einzelnen nostr-post 2026-04-15 13:53:16 +02:00
CLAUDE.md docs: status/handoff/readme/claude.md auf multilingual-stand 2026-04-21 16:31:16 +02:00
LICENSE Initial commit 2024-11-06 15:55:54 +01:00
README.md docs: status/handoff/readme/claude.md auf multilingual-stand 2026-04-21 16:31:16 +02:00

README.md

joerg-lohrer.de

Persönliche Webseite. Nach einer Transition von einer Hugo-basierten, statischen Seite läuft joerg-lohrer.de jetzt als SvelteKit-SPA, die Blog-Posts live aus signierten Nostr-Events (NIP-23, kind:30023) rendert.

Aktueller Stand

  • https://joerg-lohrer.de/ — SvelteKit-SPA, seit 2026-04-18 live. Seit 2026-04-21 multilingual (Deutsch + Englisch via NIP-32 l-Tag und NIP-33-a-Tag-Verlinkung).
  • https://staging.joerg-lohrer.de/ — Staging (gleicher Build, ein Schritt vor Prod).
  • https://svelte.joerg-lohrer.de/ — Entwicklungs-Deploy-Target der Pipeline.
  • https://spa.joerg-lohrer.de/ — Vanilla-HTML-Mini-Spike (Proof of Concept, historisch).

Detailliert in docs/STATUS.md.

Wie die Seite funktioniert

  1. Inhalte liegen als Markdown in content/posts/<lang>/<slug>/index.md (z. B. content/posts/de/<slug>/ oder content/posts/en/<slug>/) mit strukturierten Bild-Metadaten im Frontmatter (Alt-Text, Lizenz, Autor:innen). Übersetzungen eines Posts werden über bidirektionale a:-Tags im Frontmatter verlinkt — Details in docs/superpowers/specs/2026-04-21-multilingual-posts-design.md.
  2. Publish-Pipeline (publish/, Deno) lädt Bilder auf Blossom-Server (content-addressed) und publiziert signierte kind:30023-Events via NIP-46-Bunker (Amber) auf 5 Relays — inkl. NIP-32 l-Tag (Sprache) und NIP-33 a-Tag (Verlinkung zu anderssprachigen Varianten).
  3. SvelteKit-SPA (app/) lädt diese Events zur Laufzeit und rendert Post-Liste + Detailseiten. UI-Chrome via svelte-i18n (DE/EN), Browser- Locale als Default, Listen nach aktivem Locale gefiltert. Keine Server-Komponente, Static-Hosting reicht.
  4. CI: GitHub Actions triggert die Publish-Pipeline bei Push auf main (via Forgejo→GitHub Push-Mirror).

Identität und Assets:

  • Pubkey: npub1f7jar3qnu269uyx5p0e4v24hqxjnxysxudvujza2ur5ehltvdeqsly2fx9
  • NIP-05: joerglohrer@joerg-lohrer.de (statisches .well-known/nostr.json)
  • Blossom-Server: blossom.edufeed.org, blossom.primal.net
  • Relays: relay.damus.io, nos.lol, relay.primal.net, relay.tchncs.de, relay.edufeed.org

Navigation

Branches

  • main — kanonisch. Seit Cutover (2026-04-18) Produktions-Quelle.
  • spa — historischer SvelteKit-Arbeitszweig, inzwischen gemerged.
  • hugo-archive — eingefrorener Hugo-Zustand als Orphan-Branch. Rollback-Option über git checkout hugo-archive && hugo build.

Repo-Struktur

content/posts/<lang>/<slug>/    Markdown-Posts pro Sprache (26× de, 1× en)
content/impressum.md            Statisches Impressum (wird von SPA geladen)
app/                            SvelteKit-SPA (Laufzeit-Renderer)
  src/lib/i18n/                 UI-Lokalisierung (svelte-i18n + Messages)
  src/lib/nostr/                Relay-Loader, Translations-Resolving
publish/                        Deno-Publish-Pipeline (Blossom + Nostr)
preview/spa-mini/               Vanilla-HTML-Mini-Spike (historische Referenz)
scripts/deploy-svelte.sh        FTPS-Deploy, Targets: svelte/staging/prod
static/                         Site-Assets (Favicons, Profilbild, .well-known/)
docs/                           Specs, Pläne, Status, Handoff, Wiki-Entwürfe
.github/workflows/              GitHub-Actions CI (Publish-Pipeline-Trigger)
.claude/                        Claude-Code-Sessions (Transparenz) + Skills
CLAUDE.md                       Einstiegspunkt für Claude-Sessions

Entwicklung

# SPA lokal
cd app && npm run dev

# SPA testen
cd app && npm run test:unit
cd app && npm run test:e2e
cd app && npm run check

# Publish-Pipeline
cd publish && deno task check                    # pre-flight
cd publish && deno task publish --dry-run        # Simulation
cd publish && deno task publish                  # diff-modus echt
cd publish && deno task publish --post <slug>    # ein Post
cd publish && deno task test                     # Tests

# Deploy
DEPLOY_TARGET=staging ./scripts/deploy-svelte.sh
DEPLOY_TARGET=prod ./scripts/deploy-svelte.sh

Lizenz

Inhalte: CC0 1.0 Universal (Namensnennung erwünscht, aber rechtlich nicht erforderlich), sofern nicht anders vermerkt. Drittinhalte sind beim jeweiligen Bild mit Autor:innen und Lizenz gekennzeichnet.

Code: siehe LICENSE.