diff --git a/src/components/nostr/kinds/RelayMembersRenderer.tsx b/src/components/nostr/kinds/RelayMembersRenderer.tsx
index 537c23b..2e5767a 100644
--- a/src/components/nostr/kinds/RelayMembersRenderer.tsx
+++ b/src/components/nostr/kinds/RelayMembersRenderer.tsx
@@ -1,4 +1,4 @@
-import { Shield, Users } from "lucide-react";
+import { Users } from "lucide-react";
import { getTagValues } from "@/lib/nostr-utils";
import {
BaseEventProps,
@@ -35,7 +35,7 @@ export function RelayMembersRenderer({ event }: BaseEventProps) {
event={event}
className="flex items-center gap-1.5 text-sm font-medium"
>
-
+
Relay Members
@@ -61,7 +61,7 @@ export function RelayMembersDetailRenderer({ event }: { event: NostrEvent }) {
return (
-
+
Relay Members
diff --git a/src/components/nostr/kinds/RelayUserChangeRenderer.tsx b/src/components/nostr/kinds/RelayUserChangeRenderer.tsx
new file mode 100644
index 0000000..c46444a
--- /dev/null
+++ b/src/components/nostr/kinds/RelayUserChangeRenderer.tsx
@@ -0,0 +1,137 @@
+import { UserPlus, UserMinus } from "lucide-react";
+import { getTagValue } from "applesauce-core/helpers";
+import {
+ BaseEventProps,
+ BaseEventContainer,
+ ClickableEventTitle,
+} from "./BaseEventRenderer";
+import { PubkeyListFull } from "../lists";
+import type { NostrEvent } from "@/types/nostr";
+
+/**
+ * Kind 8000 Renderer - Add User (Feed View)
+ * NIP-43 event published when a member is added to a relay
+ */
+export function AddUserRenderer({ event }: BaseEventProps) {
+ const addedPubkey = getTagValue(event, "p");
+
+ if (!addedPubkey) {
+ return (
+
+
+ Invalid add user event (missing pubkey)
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ User Added
+
+
+
+ Member added to relay
+
+
+
+ );
+}
+
+/**
+ * Kind 8000 Detail View - Full add user details
+ */
+export function AddUserDetailRenderer({ event }: { event: NostrEvent }) {
+ const addedPubkey = getTagValue(event, "p");
+
+ return (
+
+
+
+ User Added
+
+
+ {addedPubkey ? (
+
}
+ />
+ ) : (
+
+ Invalid event (missing pubkey)
+
+ )}
+
+ );
+}
+
+/**
+ * Kind 8001 Renderer - Remove User (Feed View)
+ * NIP-43 event published when a member is removed from a relay
+ */
+export function RemoveUserRenderer({ event }: BaseEventProps) {
+ const removedPubkey = getTagValue(event, "p");
+
+ if (!removedPubkey) {
+ return (
+
+
+ Invalid remove user event (missing pubkey)
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ User Removed
+
+
+
+ Member removed from relay
+
+
+
+ );
+}
+
+/**
+ * Kind 8001 Detail View - Full remove user details
+ */
+export function RemoveUserDetailRenderer({ event }: { event: NostrEvent }) {
+ const removedPubkey = getTagValue(event, "p");
+
+ return (
+
+
+
+ User Removed
+
+
+ {removedPubkey ? (
+
}
+ />
+ ) : (
+
+ Invalid event (missing pubkey)
+
+ )}
+
+ );
+}
diff --git a/src/components/nostr/kinds/index.tsx b/src/components/nostr/kinds/index.tsx
index a41c085..fcec3b3 100644
--- a/src/components/nostr/kinds/index.tsx
+++ b/src/components/nostr/kinds/index.tsx
@@ -71,6 +71,12 @@ import {
RelayMembersRenderer,
RelayMembersDetailRenderer,
} from "./RelayMembersRenderer";
+import {
+ AddUserRenderer,
+ AddUserDetailRenderer,
+ RemoveUserRenderer,
+ RemoveUserDetailRenderer,
+} from "./RelayUserChangeRenderer";
// NIP-51 List Renderers
import { MuteListRenderer, MuteListDetailRenderer } from "./MuteListRenderer";
import { PinListRenderer, PinListDetailRenderer } from "./PinListRenderer";
@@ -163,6 +169,8 @@ const kindRenderers: Record
> = {
1621: IssueRenderer, // Issue (NIP-34)
9735: Kind9735Renderer, // Zap Receipt
9802: Kind9802Renderer, // Highlight
+ 8000: AddUserRenderer, // Add User (NIP-43)
+ 8001: RemoveUserRenderer, // Remove User (NIP-43)
777: SpellRenderer, // Spell (Grimoire)
10000: MuteListRenderer, // Mute List (NIP-51)
10001: PinListRenderer, // Pin List (NIP-51)
@@ -260,6 +268,8 @@ const detailRenderers: Record<
1618: PullRequestDetailRenderer, // Pull Request Detail (NIP-34)
1621: IssueDetailRenderer, // Issue Detail (NIP-34)
9802: Kind9802DetailRenderer, // Highlight Detail
+ 8000: AddUserDetailRenderer, // Add User Detail (NIP-43)
+ 8001: RemoveUserDetailRenderer, // Remove User Detail (NIP-43)
10000: MuteListDetailRenderer, // Mute List Detail (NIP-51)
10001: PinListDetailRenderer, // Pin List Detail (NIP-51)
10002: Kind10002DetailRenderer, // Relay List Detail (NIP-65)
diff --git a/src/constants/kinds.ts b/src/constants/kinds.ts
index fda5f80..cfbec7c 100644
--- a/src/constants/kinds.ts
+++ b/src/constants/kinds.ts
@@ -892,7 +892,7 @@ export const EVENT_KINDS: Record = {
name: "Relay Members",
description: "Relay membership list",
nip: "43",
- icon: Shield,
+ icon: Users,
},
// 17375: {
// kind: 17375,