Jörg Lohrer
10e455a078
spa: startseite + archiv + impressum + menü + assets für cutover
...
Startseite (+page.svelte) komplett überarbeitet:
- Hero mit lokalem Profilbild (WebP aus static/, schneller als
kind:0-roundtrip), Begrüßung "Hi Willkommen auf meinem Blog 🤗 ",
About/Website aus kind:0
- Social-Icons-Leiste (Nostr/Mastodon/Bluesky/LinkedIn/ORCID/Mail)
als inline-SVG, monochrom via currentColor, hover färbt blau
- Nostr-Icon von satscoffee/nostr_icons (outline, CC0), die anderen
stilisiert als vereinfachte Brand-Icons
- Neueste 5 Posts + Archiv-Link
Archiv-Route (/archiv/): alle Posts, nach Jahr gruppiert.
Impressum (/impressum/): static-page, rendert content/impressum.md
(via vite ?raw-import), bleibt aus nostr-feeds draußen. Frontmatter-
parser toleriert trailing-spaces auf --- zeilen.
Menü im Layout: sticky header mit brand + 3 links (Home, Archiv,
Impressum), aktiv-state via akzent-farbe. Footer mit © + Impressum
+ "Nostr-basiert"-hinweis.
Assets: profilbild und favicons aus dem hugo-static (repo-root) nach
app/static/ übernommen, favicon-links in app.html ergänzt.
NIP-05: .well-known/nostr.json in app/static angelegt mit CORS-header
via .htaccess, damit "joerglohrer@joerg-lohrer.de" nach cutover
verifizierbar bleibt.
E2E-Tests angepasst an neue hero/navigation-struktur, 29/29 unit + 4/4
e2e grün.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 15:35:05 +02:00
Jörg Lohrer
eb400a8a6a
spa: avatar + name für kommentar-authoren via kind:0-profil
...
- loadProfile(pubkey?) akzeptiert jetzt optional einen Pubkey, default
weiterhin AUTHOR_PUBKEY_HEX.
- Neuer profileCache.ts: sessionsweiter Cache, Promise-Memoization —
paralleles Nachladen derselben Pubkey teilt dieselbe Request.
- ReplyItem lädt das kind:0-Profil des Kommentar-Authors on mount,
zeigt Avatar (32px rund) + display_name/name. Fallback bei fehlendem
Profil: Pubkey-Hex-Prefix (wie bisher).
- Home-Page nutzt getProfile(AUTHOR_PUBKEY_HEX) statt loadProfile()
direkt — gleicher Cache, kein doppeltes Fetchen.
npm run check: 0 errors. E2E 3/3 grün. Deploy live.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:58:44 +02:00
Jörg Lohrer
c089d9e429
spa(phase 4, tasks 23-25): tag-navigation
...
- 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>
2026-04-15 17:44:02 +02:00
Jörg Lohrer
feb336fc5b
spa(phase 3, tasks 15-22): routing, komponenten, home, postview
...
Phase 3 komplett:
- Task 15: LoadingOrError-Komponente (loading/error-states, Habla-Fallback)
- Task 16: app.html mit CSS-Variablen (light/dark), Base-Typography
- Task 17: +layout.svelte mit Container + bootstrapReadRelays onMount
- Task 18: ProfileCard-Komponente (Avatar, Name, About, NIP-05, Website)
- Task 19: PostCard-Komponente (Thumbnail + Titel/Summary/Datum), responsive
- Task 20: +page.svelte als Home (Profil + Liste, Promise.all für beides)
- Task 21: PostView-Komponente (Titel, Meta, Cover, Summary, Markdown-Body)
- Task 22: [...slug]/+page.ts+svelte — Catch-all-Route mit Legacy-301-Redirect
Alle $props()-abhängigen Werte via $derived() (Svelte-5-Runes-Konformität).
npm run check: 0 errors, 0 warnings, 592 files. npm run build grün.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:39:24 +02:00
Jörg Lohrer
5b9773ccd3
spa(task 1): sveltekit-skeleton mit adapter-static initialisiert
...
- sv create minimal template, TypeScript, ohne addons
- adapter-static statt adapter-auto (fallback: index.html)
- ssr=false, prerender=false, trailingSlash=always im layout.ts
- build produziert statisches build/ (getestet)
- .gitignore um package-lock.json und *.log ergänzt
Svelte 5 mit Runes, SvelteKit 2.57, TypeScript 6, Vite 8.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 15:03:15 +02:00