statt text-hinweis "auch verfügbar in: ..." zeigt der post jetzt einen
kompakten switcher (📖 aktiver-code | anderer-code). klick auf den
anderen code setzt die ui-sprache global und navigiert zur sprach-
variante — alles konsistent.
language names raus (unused): displayLanguage + tests entfernt, da die
darstellung nun nur noch sprachcodes (DE/EN) zeigt. auch i18n-keys
lang.de/lang.en und post.also_available_in aufgeräumt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- externalClientLinks-Reihenfolge: EduFeed, Habla, Yakihonne (njump
raus). EduFeed als OER/OEP-Community-Home an erster Stelle.
- njump bleibt für Kommentar-Autor-Profile (Klick auf Avatar/Name
unter einem Kommentar) — dort ist es der bessere Profil-Viewer.
- EduFeed-URL-Schema: https://edufeed.org/a/<naddr> (falls sich das
als falsch erweist, in zweitem Commit korrigieren).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Zwei Erweiterungen, die Community-Interaktion an Nostr-native Clients
auslagern statt in der SPA nachzubauen:
1. ReplyItem-Header ist jetzt ein <a href=https://njump.me/<npub>
target=_blank>. Klick auf Avatar/Name öffnet das vollständige
Profil des Kommentar-Authors mit allen Events.
2. Neue ExternalClientLinks.svelte zwischen Reactions und Composer:
dezente Box mit "In Nostr-Client öffnen" — drei Links (Habla,
Yakihonne, njump) über naddr, damit Leser Thread-Replies,
Reactions, Teilen dort nutzen können, wo die volle Nostr-Social-
Layer läuft.
Nostr-Helper erweitert:
- buildNpub(hex) — npub1…-Bech32-Encoding
- buildNjumpProfileUrl(hex) — njump.me/<npub>
- externalClientLinks({pubkey, kind, identifier}) — Liste der drei
etablierten Langform-Viewer mit naddr1…-URLs.
npm run check: 0 errors, 611 files. Deploy live.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- loadPostsByTag(tagName): client-seitige Filterung der Post-Liste
(case-insensitive). #t-Filter wird nicht von allen Relays zuverlässig
unterstützt — wir laden alles und filtern lokal.
- /tag/[name]/+page.ts+svelte: neue Tag-Route, Breadcrumb zurück zur
Übersicht, #tagName als H1, dieselbe PostCard-Darstellung wie Home.
- Tag-Chips in PostView sind bereits klickbar (aus Task 21).
npm run check: 0 errors. Deploy live auf svelte.joerg-lohrer.de.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
window.nostr-Proxy für Alby/nos2x/Flamingo-Extensions. Fehlertolerant:
bei fehlender Extension ODER User-Ablehnung returnen die Helper null,
damit UI klar "bitte Extension installieren"-Hinweise zeigen kann
statt zu crashen.
UnsignedEvent/SignedEvent als explizite Types — werden ab Task 29
(ReplyComposer) für NIP-07-signierte kind:1-Kommentare genutzt.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
loadReactions(dtag) sammelt kind:7-Events mit #a-Filter auf den
Post, gruppiert nach content (emoji oder +/-), zählt und sortiert
nach Häufigkeit. Leerer content wird als + interpretiert (NIP-25-
Konvention für Like-Default).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fügt `loadReplies(dtag)` an loaders.ts an. Filter `#a` auf das
addressable-Event-Format "30023:<pubkey>:<dtag>" findet alle kind:1
Replies auf den Post. Sortiert aufsteigend (älteste zuerst).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- JSDoc zu NaddrArgs, buildNaddr, buildHablaLink (Stil konsistent mit config.ts).
- Neue Tests: ohne relays (Default-`?? []`-Pfad), unterschiedliche Inputs
erzeugen unterschiedliche Links (Guard gegen konstanten Rückgabewert).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- FALLBACK_READ_RELAYS als `as const` tuple (kein mutables Array).
- BOOTSTRAP_RELAY als erster Eintrag referenziert statt dupliziert.
- Präzisere JSDoc zu HABLA_BASE (klarmacht, dass /a/ baked-in ist).
- Timeout-Kommentare trennen soft (per-Relay) vs. hard (Page-Budget).
Code-Quality-Nitpicks aus Task 3 Review adressiert. npm run check grün.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>