diff --git a/src/lib/navigator/EventNetwork/Legend.svelte b/src/lib/navigator/EventNetwork/Legend.svelte
index 053c77b..8d25b06 100644
--- a/src/lib/navigator/EventNetwork/Legend.svelte
+++ b/src/lib/navigator/EventNetwork/Legend.svelte
@@ -1,6 +1,7 @@
@@ -915,6 +975,7 @@
eventCounts={eventCounts}
{disabledTags}
onTagToggle={handleTagToggle}
+ {autoDisabledTags}
/>
diff --git a/src/lib/utils/eventColors.ts b/src/lib/utils/eventColors.ts
new file mode 100644
index 0000000..d820a44
--- /dev/null
+++ b/src/lib/utils/eventColors.ts
@@ -0,0 +1,92 @@
+/**
+ * Deterministic color mapping for event kinds
+ * Uses golden ratio to distribute colors evenly across the spectrum
+ */
+
+const GOLDEN_RATIO = 0.618033988749895;
+
+/**
+ * Get a deterministic color for an event kind
+ * @param kind - The event kind number
+ * @returns HSL color string
+ */
+export function getEventKindColor(kind: number): string {
+ // Use golden ratio for better distribution
+ const hue = (kind * GOLDEN_RATIO * 360) % 360;
+
+ // Use different saturation/lightness for better visibility
+ const saturation = 65 + (kind % 20); // 65-85%
+ const lightness = 55 + ((kind * 3) % 15); // 55-70%
+
+ return `hsl(${Math.round(hue)}, ${saturation}%, ${lightness}%)`;
+}
+
+/**
+ * Get a friendly name for an event kind
+ * @param kind - The event kind number
+ * @returns Human-readable name
+ */
+export function getEventKindName(kind: number): string {
+ const kindNames: Record = {
+ 0: 'Metadata',
+ 1: 'Text Note',
+ 2: 'Recommend Relay',
+ 3: 'Contact List',
+ 4: 'Encrypted DM',
+ 5: 'Event Deletion',
+ 6: 'Repost',
+ 7: 'Reaction',
+ 8: 'Badge Award',
+ 16: 'Generic Repost',
+ 40: 'Channel Creation',
+ 41: 'Channel Metadata',
+ 42: 'Channel Message',
+ 43: 'Channel Hide Message',
+ 44: 'Channel Mute User',
+ 1984: 'Reporting',
+ 9734: 'Zap Request',
+ 9735: 'Zap',
+ 10000: 'Mute List',
+ 10001: 'Pin List',
+ 10002: 'Relay List',
+ 22242: 'Client Authentication',
+ 24133: 'Nostr Connect',
+ 27235: 'HTTP Auth',
+ 30000: 'Categorized People List',
+ 30001: 'Categorized Bookmark List',
+ 30008: 'Profile Badges',
+ 30009: 'Badge Definition',
+ 30017: 'Create or update a stall',
+ 30018: 'Create or update a product',
+ 30023: 'Long-form Content',
+ 30024: 'Draft Long-form Content',
+ 30040: 'Publication Index',
+ 30041: 'Publication Content',
+ 30078: 'Application-specific Data',
+ 30311: 'Live Event',
+ 30402: 'Classified Listing',
+ 30403: 'Draft Classified Listing',
+ 30617: 'Repository',
+ 30818: 'Wiki Page',
+ 31922: 'Date-Based Calendar Event',
+ 31923: 'Time-Based Calendar Event',
+ 31924: 'Calendar',
+ 31925: 'Calendar Event RSVP',
+ 31989: 'Handler recommendation',
+ 31990: 'Handler information',
+ 34550: 'Community Definition',
+ };
+
+ return kindNames[kind] || `Kind ${kind}`;
+}
+
+/**
+ * Get the short label for an event kind (for node display)
+ * @param kind - The event kind number
+ * @returns Short label (usually just the kind number)
+ */
+export function getEventKindLabel(kind: number): string {
+ // For now, just return the kind number
+ // Could be extended to return short codes if needed
+ return kind.toString();
+}
\ No newline at end of file