nostr-penetration.svg raw
1 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 520" font-family="'Inter', 'Helvetica Neue', sans-serif">
2 <defs>
3 <linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
4 <stop offset="0%" stop-color="#0a0a0f"/>
5 <stop offset="100%" stop-color="#12121a"/>
6 </linearGradient>
7 <linearGradient id="aiGrad" x1="0" y1="0" x2="1" y2="0">
8 <stop offset="0%" stop-color="#3b82f6"/>
9 <stop offset="100%" stop-color="#60a5fa"/>
10 </linearGradient>
11 <linearGradient id="trollGrad" x1="0" y1="0" x2="1" y2="0">
12 <stop offset="0%" stop-color="#ef4444"/>
13 <stop offset="100%" stop-color="#f87171"/>
14 </linearGradient>
15 </defs>
16
17 <!-- Background -->
18 <rect width="960" height="520" fill="url(#bg)" rx="8"/>
19
20 <!-- Title -->
21 <text x="480" y="38" text-anchor="middle" fill="#e2e8f0" font-size="18" font-weight="600">AI & Manipulation Penetration on Nostr</text>
22 <text x="480" y="58" text-anchor="middle" fill="#64748b" font-size="12">Dendrite 8-pass lattice detection — nos.lol relay, ~2000 events per sample week</text>
23
24 <!-- Chart area: x=110..710 within wider canvas, y=80..400 -->
25 <!-- Y axis gridlines and labels (0% to 80%) -->
26 <line x1="100" y1="400" x2="870" y2="400" stroke="#1e293b" stroke-width="1"/>
27 <line x1="100" y1="360" x2="870" y2="360" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
28 <line x1="100" y1="320" x2="870" y2="320" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
29 <line x1="100" y1="280" x2="870" y2="280" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
30 <line x1="100" y1="240" x2="870" y2="240" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
31 <line x1="100" y1="200" x2="870" y2="200" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
32 <line x1="100" y1="160" x2="870" y2="160" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
33 <line x1="100" y1="120" x2="870" y2="120" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
34 <line x1="100" y1="80" x2="870" y2="80" stroke="#1e293b" stroke-width="1" stroke-dasharray="4,4"/>
35
36 <text x="90" y="404" text-anchor="end" fill="#64748b" font-size="11">0%</text>
37 <text x="90" y="364" text-anchor="end" fill="#64748b" font-size="11">10%</text>
38 <text x="90" y="324" text-anchor="end" fill="#64748b" font-size="11">20%</text>
39 <text x="90" y="284" text-anchor="end" fill="#64748b" font-size="11">30%</text>
40 <text x="90" y="244" text-anchor="end" fill="#64748b" font-size="11">40%</text>
41 <text x="90" y="204" text-anchor="end" fill="#64748b" font-size="11">50%</text>
42 <text x="90" y="164" text-anchor="end" fill="#64748b" font-size="11">60%</text>
43 <text x="90" y="124" text-anchor="end" fill="#64748b" font-size="11">70%</text>
44 <text x="90" y="84" text-anchor="end" fill="#64748b" font-size="11">80%</text>
45
46 <!-- X axis labels: 13 points, x = 110 to 870, spacing = 63.3 -->
47 <!-- x positions: 110, 173, 237, 300, 363, 427, 490, 553, 617, 680, 743, 807, 870 -->
48
49 <text x="110" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jan</text>
50 <text x="110" y="434" text-anchor="middle" fill="#64748b" font-size="9">'23</text>
51
52 <text x="173" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jul</text>
53 <text x="173" y="434" text-anchor="middle" fill="#64748b" font-size="9">'23</text>
54
55 <text x="237" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jan</text>
56 <text x="237" y="434" text-anchor="middle" fill="#64748b" font-size="9">'24</text>
57
58 <text x="300" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jul</text>
59 <text x="300" y="434" text-anchor="middle" fill="#64748b" font-size="9">'24</text>
60
61 <text x="363" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jan</text>
62 <text x="363" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
63
64 <text x="427" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Feb</text>
65 <text x="427" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
66
67 <text x="490" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Mar</text>
68 <text x="490" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
69
70 <text x="553" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">May</text>
71 <text x="553" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
72
73 <text x="617" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jul</text>
74 <text x="617" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
75
76 <text x="680" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Sep</text>
77 <text x="680" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
78
79 <text x="743" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Nov</text>
80 <text x="743" y="434" text-anchor="middle" fill="#64748b" font-size="9">'25</text>
81
82 <text x="807" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Jan</text>
83 <text x="807" y="434" text-anchor="middle" fill="#64748b" font-size="9">'26</text>
84
85 <text x="870" y="422" text-anchor="middle" fill="#94a3b8" font-size="10">Mar</text>
86 <text x="870" y="434" text-anchor="middle" fill="#64748b" font-size="9">'26</text>
87
88 <!-- ═══════════════════════════════════════════════════ -->
89 <!-- AI Detection line (blue) -->
90 <!-- Jan23:23.9 Jul23:16.3 Jan24:18.2 Jul24:14.5 -->
91 <!-- Jan25:19.7 Feb25:22.9 Mar25:19.3 May25:21.5 -->
92 <!-- Jul25:19.9 Sep25:20.5 Nov25:23.4 Jan26:24.9 -->
93 <!-- Feb26:25.7 -->
94 <!-- Y scale: 0%=400, 80%=80. y = 400 - (pct * 4) -->
95 <!-- ═══════════════════════════════════════════════════ -->
96
97 <!-- AI area fill -->
98 <path d="M110,304 L173,335 L237,327 L300,342 L363,321 L427,308 L490,323 L553,314 L617,320 L680,318 L743,306 L807,300 L870,297 L870,400 L110,400 Z"
99 fill="#3b82f6" fill-opacity="0.08"/>
100
101 <!-- AI line -->
102 <polyline points="110,304 173,335 237,327 300,342 363,321 427,308 490,323 553,314 617,320 680,318 743,306 807,300 870,297"
103 fill="none" stroke="url(#aiGrad)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
104
105 <!-- AI data points -->
106 <circle cx="110" cy="304" r="3.5" fill="#3b82f6"/>
107 <circle cx="173" cy="335" r="3.5" fill="#3b82f6"/>
108 <circle cx="237" cy="327" r="3.5" fill="#3b82f6"/>
109 <circle cx="300" cy="342" r="3.5" fill="#3b82f6"/>
110 <circle cx="363" cy="321" r="3.5" fill="#3b82f6"/>
111 <circle cx="427" cy="308" r="3.5" fill="#3b82f6"/>
112 <circle cx="490" cy="323" r="3.5" fill="#3b82f6"/>
113 <circle cx="553" cy="314" r="3.5" fill="#3b82f6"/>
114 <circle cx="617" cy="320" r="3.5" fill="#3b82f6"/>
115 <circle cx="680" cy="318" r="3.5" fill="#3b82f6"/>
116 <circle cx="743" cy="306" r="3.5" fill="#3b82f6"/>
117 <circle cx="807" cy="300" r="3.5" fill="#3b82f6"/>
118 <circle cx="870" cy="297" r="3.5" fill="#3b82f6"/>
119
120 <!-- AI percentage labels (key points only to avoid clutter) -->
121 <text x="110" y="296" text-anchor="middle" fill="#60a5fa" font-size="10" font-weight="500">23.9%</text>
122 <text x="300" y="354" text-anchor="middle" fill="#60a5fa" font-size="10" font-weight="500">14.5%</text>
123 <text x="427" y="300" text-anchor="middle" fill="#60a5fa" font-size="10" font-weight="500">22.9%</text>
124 <text x="743" y="298" text-anchor="middle" fill="#60a5fa" font-size="10" font-weight="500">23.4%</text>
125 <text x="807" y="292" text-anchor="middle" fill="#60a5fa" font-size="10" font-weight="500">24.9%</text>
126 <text x="870" y="289" text-anchor="middle" fill="#60a5fa" font-size="10" font-weight="500">25.7%</text>
127
128 <!-- ═══════════════════════════════════════════════════ -->
129 <!-- Manipulation line (red) -->
130 <!-- Jan23:59.5 Jul23:74.9 Jan24:67.4 Jul24:75.3 -->
131 <!-- Jan25:62.6 Feb25:63.2 Mar25:65.6 May25:68.4 -->
132 <!-- Jul25:69.3 Sep25:66.8 Nov25:67.2 Jan26:69.0 -->
133 <!-- Feb26:64.7 -->
134 <!-- ═══════════════════════════════════════════════════ -->
135
136 <!-- Manipulation area fill -->
137 <path d="M110,162 L173,100 L237,130 L300,99 L363,150 L427,147 L490,138 L553,126 L617,123 L680,133 L743,131 L807,124 L870,141 L870,400 L110,400 Z"
138 fill="#ef4444" fill-opacity="0.04"/>
139
140 <!-- Manipulation line -->
141 <polyline points="110,162 173,100 237,130 300,99 363,150 427,147 490,138 553,126 617,123 680,133 743,131 807,124 870,141"
142 fill="none" stroke="url(#trollGrad)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
143
144 <!-- Manipulation data points -->
145 <circle cx="110" cy="162" r="3.5" fill="#ef4444"/>
146 <circle cx="173" cy="100" r="3.5" fill="#ef4444"/>
147 <circle cx="237" cy="130" r="3.5" fill="#ef4444"/>
148 <circle cx="300" cy="99" r="3.5" fill="#ef4444"/>
149 <circle cx="363" cy="150" r="3.5" fill="#ef4444"/>
150 <circle cx="427" cy="147" r="3.5" fill="#ef4444"/>
151 <circle cx="490" cy="138" r="3.5" fill="#ef4444"/>
152 <circle cx="553" cy="126" r="3.5" fill="#ef4444"/>
153 <circle cx="617" cy="123" r="3.5" fill="#ef4444"/>
154 <circle cx="680" cy="133" r="3.5" fill="#ef4444"/>
155 <circle cx="743" cy="131" r="3.5" fill="#ef4444"/>
156 <circle cx="807" cy="124" r="3.5" fill="#ef4444"/>
157 <circle cx="870" cy="141" r="3.5" fill="#ef4444"/>
158
159 <!-- Manipulation percentage labels (key points) -->
160 <text x="110" y="154" text-anchor="middle" fill="#f87171" font-size="10" font-weight="500">59.5%</text>
161 <text x="300" y="91" text-anchor="middle" fill="#f87171" font-size="10" font-weight="500">75.3%</text>
162 <text x="617" y="115" text-anchor="middle" fill="#f87171" font-size="10" font-weight="500">69.3%</text>
163 <text x="807" y="116" text-anchor="middle" fill="#f87171" font-size="10" font-weight="500">69.0%</text>
164 <text x="870" y="133" text-anchor="middle" fill="#f87171" font-size="10" font-weight="500">64.7%</text>
165
166 <!-- Trend annotation: AI accelerating from Nov 2025 onward -->
167 <path d="M700,330 C730,325 770,310 850,299" fill="none" stroke="#fbbf24" stroke-width="1.5" stroke-dasharray="4,3"/>
168 <polygon points="848,295 856,299 848,303" fill="#fbbf24"/>
169 <text x="720" y="345" fill="#fbbf24" font-size="10" font-style="italic">accelerating</text>
170
171 <!-- Vertical divider: ChatGPT launch (Nov 2022, before chart) -->
172 <!-- Vertical annotation: GPT-4 era begins ~Mar 2023 -->
173 <line x1="142" y1="80" x2="142" y2="400" stroke="#334155" stroke-width="1" stroke-dasharray="2,4"/>
174 <text x="142" y="75" text-anchor="middle" fill="#475569" font-size="8">GPT-4</text>
175
176 <!-- Legend -->
177 <rect x="130" y="460" width="14" height="14" rx="2" fill="#3b82f6"/>
178 <text x="150" y="472" fill="#94a3b8" font-size="12">AI-generated text detected</text>
179
180 <rect x="420" y="460" width="14" height="14" rx="2" fill="#ef4444"/>
181 <text x="440" y="472" fill="#94a3b8" font-size="12">Manipulation pattern match (avg)</text>
182
183 <!-- Horizontal reference: 25% threshold annotation -->
184 <line x1="100" y1="300" x2="870" y2="300" stroke="#fbbf24" stroke-width="0.5" stroke-dasharray="8,6" opacity="0.4"/>
185 <text x="875" y="304" fill="#fbbf24" font-size="9" opacity="0.6">25%</text>
186
187 <!-- Sample size note -->
188 <text x="480" y="500" text-anchor="middle" fill="#475569" font-size="10">n ≈ 2,000 events per sample period | 7-day sample windows | nos.lol relay | 13 sample periods Jan 2023 – Mar 2026</text>
189 </svg>
190