+
+
+ Network Overview
+
+
+ Real-time statistics from connected Nostr relays (last 7 days).
+
+
+
+ {/* Stats Overview Cards */}
+
+
+
+ Total Events
+
+
+
+ {isLoading ? (
+
+ ) : (
+ <>
+ {stats?.totalEvents.toLocaleString()}
+
+ Last 7 days
+
+ >
+ )}
+
+
+
+
+
+ Unique Authors
+
+
+
+ {isLoading ? (
+
+ ) : (
+ <>
+ {stats?.uniqueAuthors.toLocaleString()}
+
+ Active contributors
+
+ >
+ )}
+
+
+
+
+
+ Event Types
+
+
+
+ {isLoading ? (
+
+ ) : (
+ <>
+
+ {Object.keys(stats?.eventsByKind || {}).length}
+
+
+ Different kinds
+
+ >
+ )}
+
+
+
+
+
+ Avg. per Day
+
+
+
+ {isLoading ? (
+
+ ) : (
+ <>
+
+ {Math.round((stats?.totalEvents || 0) / 7).toLocaleString()}
+
+
+ Events per day
+
+ >
+ )}
+
+
+
+
+ {/* Activity Timeline Chart */}
+
+
+ Activity Timeline
+ Events published over the last 7 days
+
+
+ {isLoading ? (
+
+ ) : (
+
+
+
+
+
+ } />
+
+
+
+ )}
+
+
+
+ {/* Charts Grid */}
+
+ {/* Top Event Kinds Chart */}
+
+
+ Top Event Kinds
+ Most popular event types by count
+
+
+ {isLoading ? (
+
+ ) : (
+
+
+
+
+
+ } />
+
+
+
+ )}
+
+
+
+ {/* Event Distribution Pie Chart */}
+
+
+ Event Distribution
+ Distribution of top 5 event kinds
+
+
+ {isLoading ? (
+
+ ) : (
+
+
+ } />
+
+
+
+ )}
+
+
+
+
+ {/* Top Authors List */}
+
+
+ Most Active Authors
+ Top contributors in the last 7 days
+
+
+ {isLoading ? (
+
+ {[...Array(5)].map((_, i) => (
+
+
+
+
+ ))}
+
+ ) : stats?.topAuthors && stats.topAuthors.length > 0 ? (
+
+ {stats.topAuthors.map((author, index) => (
+
+
+
+ {index + 1}
+
+
+
+ {genUserName(author.pubkey)}
+
+
+ {author.pubkey.slice(0, 8)}...{author.pubkey.slice(-8)}
+
+
+
+
+ {author.count.toLocaleString()} events
+
+
+ ))}
+
+ ) : (
+
+ No author data available
+
+ )}
+
+
+
+