diff --git a/app/src/lib/nostr/loaders.ts b/app/src/lib/nostr/loaders.ts index c77f446..19cbb67 100644 --- a/app/src/lib/nostr/loaders.ts +++ b/app/src/lib/nostr/loaders.ts @@ -145,6 +145,19 @@ export async function loadReplies( return events.sort((a, b) => a.created_at - b.created_at); } +/** + * Filtert Post-Liste clientseitig nach Tag-Name. + * (Relay-seitige #t-Filter werden nicht von allen Relays unterstützt — safer + * ist es, die ganze Liste zu laden und lokal zu filtern.) + */ +export async function loadPostsByTag(tagName: string): Promise { + const all = await loadPostList(); + const norm = tagName.toLowerCase(); + return all.filter((ev) => + ev.tags.some((t) => t[0] === 't' && t[1]?.toLowerCase() === norm) + ); +} + export interface ReactionSummary { /** Emoji oder "+"/"-" */ content: string; diff --git a/app/src/routes/tag/[name]/+page.svelte b/app/src/routes/tag/[name]/+page.svelte new file mode 100644 index 0000000..c327d88 --- /dev/null +++ b/app/src/routes/tag/[name]/+page.svelte @@ -0,0 +1,59 @@ + + + + +

#{tagName}

+ + + +{#each posts as post (post.id)} + +{/each} + + diff --git a/app/src/routes/tag/[name]/+page.ts b/app/src/routes/tag/[name]/+page.ts new file mode 100644 index 0000000..0f2397e --- /dev/null +++ b/app/src/routes/tag/[name]/+page.ts @@ -0,0 +1,5 @@ +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ params }) => { + return { tagName: decodeURIComponent(params.name) }; +};