joerglohrerde/preview/spa-mini
Jörg Lohrer 1147980f2a spike(spa-mini): legacy-hugo-urls auf kurze form normalisieren
/YYYY/MM/DD/<dtag>.html/ wird erkannt, via history.replaceState auf
die kanonische Form /<dtag>/ umgeschrieben, dann der Post geladen.
Externe Backlinks auf alte Hugo-URLs landen damit ohne Reload-Flash
auf der neuen kurzen Adresse.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 14:44:25 +02:00
..
.htaccess spike(spa-mini): vanilla-html viewer für einen einzelnen nostr-post 2026-04-15 13:53:16 +02:00
README.md spike(spa-mini): vanilla-html viewer für einen einzelnen nostr-post 2026-04-15 13:53:16 +02:00
index.html spike(spa-mini): legacy-hugo-urls auf kurze form normalisieren 2026-04-15 14:44:25 +02:00

README.md

SPA Mini-Preview

Tech-Spike, kein Produkt.

Eine einzige index.html, die im Browser einen einzelnen Nostr-Post (kind:30023) live von Public-Relays lädt und rendert. Beweist, dass die SPA-Architektur aus docs/superpowers/specs/2026-04-15-nostr-page-design.md in der Praxis funktioniert — ohne SvelteKit-Build, ohne Routing, ohne Backend.

Was sie macht

  • Lädt nostr-tools, marked und DOMPurify zur Laufzeit von esm.sh.
  • Verbindet sich zu fünf Public-Relays.
  • Holt das kind:30023-Event mit d-Tag dezentrale-oep-oer für den hartcodierten Pubkey.
  • Rendert Markdown via marked, sanitized via DOMPurify.
  • Cover-Bild wird vom Blossom-Server geladen (URL aus dem Event-Tag image).

Was sie nicht macht

  • Kein Routing, keine Post-Liste, keine Tags-Navigation, keine Reactions, keine Kommentare.
  • Kein NIP-65-Outbox-Resolution (Relays sind hartcodiert).
  • Kein NIP-07-Login.
  • Kein Code-Splitting, keine Service-Worker, keine Optimierung.

Für all das wartet die echte SvelteKit-SPA — das hier ist nur das „Hello World".

Lokal ausprobieren

Die Datei kann nicht per file:// geöffnet werden (CORS für CDN-Imports). Stattdessen ein lokaler HTTP-Server:

cd preview/spa-mini
python3 -m http.server 8000
# Browser: http://localhost:8000/

Oder mit Deno:

deno run --allow-net --allow-read jsr:@std/http/file-server preview/spa-mini

Auf die Subdomain spa.joerg-lohrer.de deployen

Voraussetzung: Subdomain im All-Inkl-KAS angelegt, eigener DocumentRoot eingerichtet, SSL-Zertifikat aktiviert.

Inhalt von preview/spa-mini/ (also index.html und .htaccess) per FTP in den DocumentRoot der Subdomain hochladen.

Erwartetes Ergebnis: https://spa.joerg-lohrer.de/ zeigt den Post.

Spätere Ablösung

Sobald die SvelteKit-SPA fertig ist, wird ihr build/-Output denselben Webroot ablösen. Diese Mini-Seite kann dann gelöscht oder als historisches Artefakt im Repo bleiben.