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 &amp; 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