<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2026-06-04T09:58:15Z</updated>
  <generator>https://njump.me</generator>

  <title>Nostr notes by nn</title>
  <author>
    <name>nn</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub14qhqxyuac6ncy3pk5tdqdd5tlyu6887mpvwelcf3pyp0e8fxfsssn5a4g8.rss" />
  <link href="https://njump.me/npub14qhqxyuac6ncy3pk5tdqdd5tlyu6887mpvwelcf3pyp0e8fxfsssn5a4g8" />
  <id>https://njump.me/npub14qhqxyuac6ncy3pk5tdqdd5tlyu6887mpvwelcf3pyp0e8fxfsssn5a4g8</id>
  <icon>https://blossom.primal.net/15b5ffb01a0eda62d13a03b9e8ce3749fcbb1dba1e853c24dde6230543a837a2.jpg</icon>
  <logo>https://blossom.primal.net/15b5ffb01a0eda62d13a03b9e8ce3749fcbb1dba1e853c24dde6230543a837a2.jpg</logo>




  <entry>
    <id>https://njump.me/nevent1qqstlmae74kktd6f6327z5s5fs9085thsg6sdv22ucu0yr59ff8pq5szyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz6z9suw</id>
    
      <title type="html">i figured an approximation for adoption of new technology: every ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstlmae74kktd6f6327z5s5fs9085thsg6sdv22ucu0yr59ff8pq5szyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz6z9suw" />
    <content type="html">
      i figured an approximation for adoption of new technology:&lt;br/&gt;every step you take reduces users by 98 %&lt;br/&gt;&lt;br/&gt;step 1) click a button:&lt;br/&gt;you have 2 % of users left&lt;br/&gt;&lt;br/&gt;how can you assume everyone would click the same button.&lt;br/&gt;&lt;br/&gt;step 2) ....
    </content>
    <updated>2026-06-06T15:44:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspsm9eaj9zj509q4z70ch4au630mcs3zzyc5xnm4fxt0rfvxm2rgqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzznunxxa</id>
    
      <title type="html">i think .bit names in nip05 will never take off unless you can ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspsm9eaj9zj509q4z70ch4au630mcs3zzyc5xnm4fxt0rfvxm2rgqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzznunxxa" />
    <content type="html">
      i think .bit names in nip05 will never take off &lt;br/&gt;&lt;br/&gt;unless you can make it totally obvious.&lt;br/&gt;&lt;br/&gt; &lt;img src=&#34;https://i.imgflip.com/atosgv.jpg&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-06-06T15:20:37Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv2ms52thy9t9238ntcys767yks8lfqngwlshf38f7w4e60pjxs6qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzpske84</id>
    
      <title type="html">kind one coherence still sucks &amp;lt;a href=&amp;#34;#&amp;#34;&amp;gt;maybe ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv2ms52thy9t9238ntcys767yks8lfqngwlshf38f7w4e60pjxs6qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzpske84" />
    <content type="html">
      kind one coherence still sucks&lt;br/&gt;&lt;br/&gt;&amp;lt;a href=&amp;#34;#&amp;#34;&amp;gt;maybe ill start posting some html because nobody cares about markup anyway&amp;lt;/a&amp;gt;
    </content>
    <updated>2026-06-06T13:44:16Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdlpsyql20xu2p8ythtpd95s5f7vagnr8hndpwk92nmusmzxkhe6qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzuvsvyl</id>
    
      <title type="html">just come to my mind, is nostr markup missing [spoler]spoiler ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdlpsyql20xu2p8ythtpd95s5f7vagnr8hndpwk92nmusmzxkhe6qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzuvsvyl" />
    <content type="html">
      just come to my mind, is nostr markup missing [spoler]spoiler tags[/spoiler], **i guess so**.&lt;br/&gt;
    </content>
    <updated>2026-06-06T13:41:24Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxvdltgpf08dp6v9lm8s4j7vjnf0qehsnvk5lqkmc03wpr9gg58kszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzygwcj0</id>
    
      <title type="html">tip: claim is correct, but the statement is irrelevant</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxvdltgpf08dp6v9lm8s4j7vjnf0qehsnvk5lqkmc03wpr9gg58kszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzygwcj0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqz52tl4qg7tgm3nqnrnmuxxgp0d8hsfy866r2j6yx4d5dtd9rf6cpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtck987pj&#39;&gt;nevent1q…87pj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;tip: claim is correct, but the statement is irrelevant
    </content>
    <updated>2026-06-06T13:38:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqz52tl4qg7tgm3nqnrnmuxxgp0d8hsfy866r2j6yx4d5dtd9rf6czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzc72jwv</id>
    
      <title type="html">some people say blockchains has very limited tx throughput but ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqz52tl4qg7tgm3nqnrnmuxxgp0d8hsfy866r2j6yx4d5dtd9rf6czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzc72jwv" />
    <content type="html">
      some people say blockchains has very limited tx throughput&lt;br/&gt;but they made already a reasoning error forming that sentence&lt;br/&gt;&lt;br/&gt;can you find it?
    </content>
    <updated>2026-06-06T13:35:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs97c3jv57az0xy99r5g92dde8j7ygcvcsurt7rp5frm2fuq4dux4gzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzhe943p</id>
    
      <title type="html">its because i included base64 child porn in your .ts files</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs97c3jv57az0xy99r5g92dde8j7ygcvcsurt7rp5frm2fuq4dux4gzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzhe943p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsf9xc46jm9rcnmyed5j2llec8lg09rweh0celpua7a4062266m24cpzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhgz55827&#39;&gt;nevent1q…5827&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;its because i included base64 child porn in your .ts files
    </content>
    <updated>2026-06-06T07:43:07Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsf9xc46jm9rcnmyed5j2llec8lg09rweh0celpua7a4062266m24czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzmqaese</id>
    
      <title type="html">but its okay nobody understands what the fuck was done and why ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsf9xc46jm9rcnmyed5j2llec8lg09rweh0celpua7a4062266m24czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzmqaese" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0ytg3ghy2q64h4lf8luj5x0w0knr37ya899x5fedn6t2ytc6jyucpz3mhxue69uhkummnw3ezummcw3ezuer9wc4vvpkq&#39;&gt;nevent1q…vpkq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;but its okay&lt;br/&gt;nobody understands what the fuck was done and why the client side javascript chunks equal to 100 MB
    </content>
    <updated>2026-06-06T07:42:31Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0ytg3ghy2q64h4lf8luj5x0w0knr37ya899x5fedn6t2ytc6jyuczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzylft08</id>
    
      <title type="html">i think its not enough next we need to build a system that can ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0ytg3ghy2q64h4lf8luj5x0w0knr37ya899x5fedn6t2ytc6jyuczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzylft08" />
    <content type="html">
      i think its not enough&lt;br/&gt;&lt;br/&gt;next we need to build a system that can build the llm that can infer the code that can be compiled into interpreted language.
    </content>
    <updated>2026-06-06T07:40:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqqle4f560q05rh9006fue0j7qdd9nx2reljgckxy8pps9s339aqszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz7ejhcl</id>
    
      <title type="html">so they came into conclusion that these compile toolchains do not ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqqle4f560q05rh9006fue0j7qdd9nx2reljgckxy8pps9s339aqszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz7ejhcl" />
    <content type="html">
      so they came into conclusion that these compile toolchains do not solve javascript, so we need to add new layer:&lt;br/&gt;&lt;br/&gt;lets create a machine that can write the code that can be compiled into interpreted language!&lt;br/&gt;&lt;br/&gt;thats called llm.&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qvzqqqqqqypzp2pwqvfem348sfzrdgk6q6mgh7fe5w0akzcanlsnzzgzljwjvnppqy28wumn8ghj7mn0wd68ytn00p68ytnyv4mqz9nhwden5te0wfjkccte9ec8y6tdv9kzumn9wsqs6amnwvaz7tmwdaejumr0dsqzpjgdpngcjthfn8ln4naapluq2qselsgsugnlycu74uwqvwsamm2t2jphtp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…phtp&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; do you remember when interpreted languages where coded directly without compile toolchain?&lt;br/&gt;&lt;br/&gt;me neither.&lt;br/&gt;&lt;br/&gt;but if i try, it was somewhere between 1900 and 1915 i think. &lt;/blockquote&gt;
    </content>
    <updated>2026-06-06T07:40:08Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvjrgv6xyja6veluavl0g0lqzsyx0uzy8zylex8840rsrr58w76jczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzfqks0g</id>
    
      <title type="html">do you remember when interpreted languages where coded directly ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvjrgv6xyja6veluavl0g0lqzsyx0uzy8zylex8840rsrr58w76jczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzfqks0g" />
    <content type="html">
      do you remember when interpreted languages where coded directly without compile toolchain?&lt;br/&gt;&lt;br/&gt;me neither.&lt;br/&gt;&lt;br/&gt;but if i try, it was somewhere between 1900 and 1915 i think.
    </content>
    <updated>2026-06-06T07:35:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxsp8mk094ww7367jpk75jmuhvh76ndpev38fnatggsv0f7zzlw9gzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz7j48wu</id>
    
      <title type="html">but its ok to get hiv on your computer, no problem</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxsp8mk094ww7367jpk75jmuhvh76ndpev38fnatggsv0f7zzlw9gzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz7j48wu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy42vq8hre78s882g4cakp9t8dr838awzq3zwpf232t8xa88jwcrspzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhgafq94v&#39;&gt;nevent1q…q94v&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;but its ok to get hiv on your computer, no problem
    </content>
    <updated>2026-06-06T07:32:43Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsy42vq8hre78s882g4cakp9t8dr838awzq3zwpf232t8xa88jwcrszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzlnal6t</id>
    
      <title type="html">tbh i dont remember when i last run npm build without some ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsy42vq8hre78s882g4cakp9t8dr838awzq3zwpf232t8xa88jwcrszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzlnal6t" />
    <content type="html">
      tbh i dont remember when i last run npm build without some critical vulnerabilities in packages.
    </content>
    <updated>2026-06-06T07:32:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsd2qw436rmcjnpuxnydq27avjd0fdmqjg4v69ry0zp3kp3junu6jqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvpqrm4</id>
    
      <title type="html">i&amp;#39;ve been trying to convert nostter to run statically on ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsd2qw436rmcjnpuxnydq27avjd0fdmqjg4v69ry0zp3kp3junu6jqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvpqrm4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvmh08junragaf2phmvn34zk0hnv58myydz7tumw0a06ujnwxq6zqpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtc2wvw2z&#39;&gt;nevent1q…vw2z&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;i&amp;#39;ve been trying to convert nostter to run statically on nginx, but it seems impossible,&lt;br/&gt;meaning i have to run some bullshit nodejs on my machine to run supposedly client side nostr client
    </content>
    <updated>2026-06-06T07:29:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvmh08junragaf2phmvn34zk0hnv58myydz7tumw0a06ujnwxq6zqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzezgxjc</id>
    
      <title type="html">promise of web: everything runs in your browser&amp;#39;s virtual ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvmh08junragaf2phmvn34zk0hnv58myydz7tumw0a06ujnwxq6zqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzezgxjc" />
    <content type="html">
      promise of web: &lt;br/&gt;everything runs in your browser&amp;#39;s virtual machine, its safe&lt;br/&gt;&lt;br/&gt;reality: &lt;br/&gt;added 714 packages, and audited 715 packages in 2m&lt;br/&gt;&lt;br/&gt;237 packages are looking for funding&lt;br/&gt;  run `npm fund` for details&lt;br/&gt;&lt;br/&gt;17 vulnerabilities (1 low, 11 moderate, 5 high)
    </content>
    <updated>2026-06-06T07:27:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswfmxh4w0tu322egjf4larukdv3yz32yfmrd3wz2gapxq4e23rz7szyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvhzpa4</id>
    
      <title type="html">patch amethyst, remove ReportEvent.KIND logic</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswfmxh4w0tu322egjf4larukdv3yz32yfmrd3wz2gapxq4e23rz7szyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvhzpa4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs29nu6ujthw3ax9v6jl58k6a4sc0vmpvgpdfww9wfqpvj0gjugdecpzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhgrwlelt&#39;&gt;nevent1q…lelt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;patch amethyst, remove ReportEvent.KIND logic
    </content>
    <updated>2026-06-04T19:48:25Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs29nu6ujthw3ax9v6jl58k6a4sc0vmpvgpdfww9wfqpvj0gjugdeczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzf6n5cf</id>
    
      <title type="html">diff --git ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs29nu6ujthw3ax9v6jl58k6a4sc0vmpvgpdfww9wfqpvj0gjugdeczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzf6n5cf" />
    <content type="html">
      diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/metadata/FilterBookmarksAndReportsFromKey.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/metadata/FilterBookmarksAndReportsFromKey.kt&lt;br/&gt;index 1dbe220f8..22cefbf04 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/metadata/FilterBookmarksAndReportsFromKey.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/metadata/FilterBookmarksAndReportsFromKey.kt&lt;br/&gt;@@ -28,12 &#43;28,10 @@ import com.vitorpamplona.quartz.nip51Lists.PinListEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip51Lists.bookmarkList.BookmarkListEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip51Lists.bookmarkList.OldBookmarkListEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip51Lists.labeledBookmarkList.LabeledBookmarkListEvent&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip62RequestToVanish.RequestToVanishEvent&lt;br/&gt; &lt;br/&gt; val ReportsAndBookmarksFromKeyKinds =&lt;br/&gt;     listOf(&lt;br/&gt;-        ReportEvent.KIND,&lt;br/&gt;         BookmarkListEvent.KIND,&lt;br/&gt;         OldBookmarkListEvent.KIND,&lt;br/&gt;         LabeledBookmarkListEvent.KIND,&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip01Notifications/FilterNotificationsToPubkey.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip01Notifications/FilterNotificationsToPubkey.kt&lt;br/&gt;index 10cca27dc..3e196b9ef 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip01Notifications/FilterNotificationsToPubkey.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip01Notifications/FilterNotificationsToPubkey.kt&lt;br/&gt;@@ -45,7 &#43;45,6 @@ import com.vitorpamplona.quartz.nip47WalletConnect.events.LnZapPaymentResponseEv&lt;br/&gt; import com.vitorpamplona.quartz.nip52Calendar.appt.day.CalendarDateSlotEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip52Calendar.appt.time.CalendarTimeSlotEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip52Calendar.rsvp.CalendarRSVPEvent&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip58Badges.award.BadgeAwardEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip64Chess.challenge.accept.LiveChessGameAcceptEvent&lt;br/&gt;@@ -68,7 &#43;67,6 @@ val SummaryKinds =&lt;br/&gt; &lt;br/&gt; val NotificationsPerKeyKinds =&lt;br/&gt;     listOf(&lt;br/&gt;-        ReportEvent.KIND,&lt;br/&gt;         LnZapPaymentResponseEvent.KIND,&lt;br/&gt;         ChannelMessageEvent.KIND,&lt;br/&gt;         EphemeralChatEvent.KIND,&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToAddresses.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToAddresses.kt&lt;br/&gt;index 9015be8e3..753cca9a1 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToAddresses.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToAddresses.kt&lt;br/&gt;@@ -33,7 &#43;33,6 @@ import com.vitorpamplona.quartz.nip18Reposts.RepostEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip22Comments.CommentEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip25Reactions.ReactionEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip53LiveActivities.chat.LiveActivitiesChatMessageEvent&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip58Badges.award.BadgeAwardEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip72ModCommunities.approval.CommunityPostApprovalEvent&lt;br/&gt;@@ -45,7 &#43;44,6 @@ val RepliesAndReactionsToAddressesKinds1 =&lt;br/&gt;         ReactionEvent.KIND,&lt;br/&gt;         RepostEvent.KIND,&lt;br/&gt;         GenericRepostEvent.KIND,&lt;br/&gt;-        ReportEvent.KIND,&lt;br/&gt;         LnZapEvent.KIND,&lt;br/&gt;         ZapPollEvent.KIND,&lt;br/&gt;         CommentEvent.KIND,&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToNotes.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToNotes.kt&lt;br/&gt;index f9a505235..8e4f0ccce 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToNotes.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/watchers/FilterRepliesAndReactionsToNotes.kt&lt;br/&gt;@@ -38,7 &#43;38,6 @@ import com.vitorpamplona.quartz.nip22Comments.CommentEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip25Reactions.ReactionEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip34Git.reply.GitReplyEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip35Torrents.TorrentCommentEvent&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip88Polls.response.PollResponseEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip90Dvms.contentDiscoveryResponse.NIP90ContentDiscoveryResponseEvent&lt;br/&gt;@@ -52,7 &#43;51,6 @@ val RepliesAndReactionsKinds =&lt;br/&gt;         ReactionEvent.KIND,&lt;br/&gt;         RepostEvent.KIND,&lt;br/&gt;         GenericRepostEvent.KIND,&lt;br/&gt;-        ReportEvent.KIND,&lt;br/&gt;         LnZapEvent.KIND,&lt;br/&gt;         OnchainZapEvent.KIND,&lt;br/&gt;         OtsEvent.KIND,&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt&lt;br/&gt;index 8e72efe9e..9851ceb90 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt&lt;br/&gt;@@ -27,7 &#43;27,6 @@ import com.vitorpamplona.amethyst.model.LocalCache&lt;br/&gt; import com.vitorpamplona.amethyst.model.User&lt;br/&gt; import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.loaders.UserOutboxFinderSubAssembler&lt;br/&gt; import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.watchers.UserCardsSubAssembler&lt;br/&gt;-import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.watchers.UserReportsSubAssembler&lt;br/&gt; import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.watchers.UserWatcherSubAssembler&lt;br/&gt; import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient&lt;br/&gt; import com.vitorpamplona.quartz.nip01Core.relay.client.accessories.RelayOfflineTracker&lt;br/&gt;@@ -49,7 &#43;48,6 @@ class UserFinderFilterAssembler(&lt;br/&gt;         listOf(&lt;br/&gt;             UserOutboxFinderSubAssembler(client, cache, failureTracker, ::allKeys),&lt;br/&gt;             UserWatcherSubAssembler(client, cache, failureTracker, ::allKeys),&lt;br/&gt;-            UserReportsSubAssembler(client, cache, ::allKeys),&lt;br/&gt;             UserCardsSubAssembler(client, cache, ::allKeys),&lt;br/&gt;         )&lt;br/&gt; &lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterReportsToKey.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterReportsToKey.kt&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 481be74b4..000000000&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterReportsToKey.kt&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,48 &#43;0,0 @@&lt;br/&gt;-/*&lt;br/&gt;- * Copyright (c) 2025 Vitor Pamplona&lt;br/&gt;- *&lt;br/&gt;- * Permission is hereby granted, free of charge, to any person obtaining a copy of&lt;br/&gt;- * this software and associated documentation files (the &amp;#34;Software&amp;#34;), to deal in&lt;br/&gt;- * the Software without restriction, including without limitation the rights to use,&lt;br/&gt;- * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the&lt;br/&gt;- * Software, and to permit persons to whom the Software is furnished to do so,&lt;br/&gt;- * subject to the following conditions:&lt;br/&gt;- *&lt;br/&gt;- * The above copyright notice and this permission notice shall be included in all&lt;br/&gt;- * copies or substantial portions of the Software.&lt;br/&gt;- *&lt;br/&gt;- * THE SOFTWARE IS PROVIDED &amp;#34;AS IS&amp;#34;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br/&gt;- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS&lt;br/&gt;- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR&lt;br/&gt;- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN&lt;br/&gt;- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION&lt;br/&gt;- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br/&gt;- */&lt;br/&gt;-package com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.watchers&lt;br/&gt;-&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.core.HexKey&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt;-&lt;br/&gt;-val ReportKindList = listOf(ReportEvent.KIND)&lt;br/&gt;-&lt;br/&gt;-fun filterReportsToKeysFromTrusted(&lt;br/&gt;-    targets: Set&amp;lt;HexKey&amp;gt;,&lt;br/&gt;-    trustedAccounts: List&amp;lt;HexKey&amp;gt;,&lt;br/&gt;-    relay: NormalizedRelayUrl,&lt;br/&gt;-    since: Long?,&lt;br/&gt;-): RelayBasedFilter? {&lt;br/&gt;-    if (targets.isEmpty() || trustedAccounts.isEmpty()) return null&lt;br/&gt;-    return RelayBasedFilter(&lt;br/&gt;-        relay = relay,&lt;br/&gt;-        filter =&lt;br/&gt;-            Filter(&lt;br/&gt;-                kinds = ReportKindList,&lt;br/&gt;-                authors = trustedAccounts,&lt;br/&gt;-                tags = mapOf(&amp;#34;p&amp;#34; to targets.sorted()),&lt;br/&gt;-                since = since,&lt;br/&gt;-            ),&lt;br/&gt;-    )&lt;br/&gt;-}&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserReportsSubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserReportsSubAssembler.kt&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index fd2e68532..000000000&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserReportsSubAssembler.kt&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,142 &#43;0,0 @@&lt;br/&gt;-/*&lt;br/&gt;- * Copyright (c) 2025 Vitor Pamplona&lt;br/&gt;- *&lt;br/&gt;- * Permission is hereby granted, free of charge, to any person obtaining a copy of&lt;br/&gt;- * this software and associated documentation files (the &amp;#34;Software&amp;#34;), to deal in&lt;br/&gt;- * the Software without restriction, including without limitation the rights to use,&lt;br/&gt;- * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the&lt;br/&gt;- * Software, and to permit persons to whom the Software is furnished to do so,&lt;br/&gt;- * subject to the following conditions:&lt;br/&gt;- *&lt;br/&gt;- * The above copyright notice and this permission notice shall be included in all&lt;br/&gt;- * copies or substantial portions of the Software.&lt;br/&gt;- *&lt;br/&gt;- * THE SOFTWARE IS PROVIDED &amp;#34;AS IS&amp;#34;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br/&gt;- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS&lt;br/&gt;- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR&lt;br/&gt;- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN&lt;br/&gt;- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION&lt;br/&gt;- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br/&gt;- */&lt;br/&gt;-package com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.watchers&lt;br/&gt;-&lt;br/&gt;-import com.vitorpamplona.amethyst.commons.model.toHexSet&lt;br/&gt;-import com.vitorpamplona.amethyst.commons.relayClient.eoseManagers.SingleSubEoseManager&lt;br/&gt;-import com.vitorpamplona.amethyst.model.LocalCache&lt;br/&gt;-import com.vitorpamplona.amethyst.model.User&lt;br/&gt;-import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.UserFinderQueryState&lt;br/&gt;-import com.vitorpamplona.amethyst.service.relays.MutableTime&lt;br/&gt;-import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter&lt;br/&gt;-import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl&lt;br/&gt;-import com.vitorpamplona.quartz.utils.mapOfSet&lt;br/&gt;-&lt;br/&gt;-class UserReportsSubAssembler(&lt;br/&gt;-    client: INostrClient,&lt;br/&gt;-    val cache: LocalCache,&lt;br/&gt;-    allKeys: () -&amp;gt; Set&amp;lt;UserFinderQueryState&amp;gt;,&lt;br/&gt;-) : SingleSubEoseManager&amp;lt;UserFinderQueryState&amp;gt;(client, allKeys) {&lt;br/&gt;-    override fun newEose(&lt;br/&gt;-        relay: NormalizedRelayUrl,&lt;br/&gt;-        time: Long,&lt;br/&gt;-        filters: List&amp;lt;Filter&amp;gt;?,&lt;br/&gt;-    ) {&lt;br/&gt;-        filters?.forEach { filter -&amp;gt;&lt;br/&gt;-            filter.tags?.get(&amp;#34;p&amp;#34;)?.forEach {&lt;br/&gt;-                val targetUser = cache.getUserIfExists(it)&lt;br/&gt;-                targetUser?.reportsOrNull()?.latestEOSEs?.newEose(relay, time)&lt;br/&gt;-            }&lt;br/&gt;-        }&lt;br/&gt;-        super.newEose(relay, time, filters)&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    override fun updateFilter(&lt;br/&gt;-        keys: List&amp;lt;UserFinderQueryState&amp;gt;,&lt;br/&gt;-        since: SincePerRelayMap?,&lt;br/&gt;-    ): List&amp;lt;RelayBasedFilter&amp;gt;? {&lt;br/&gt;-        if (keys.isEmpty()) return null&lt;br/&gt;-&lt;br/&gt;-        val accounts = keys.mapTo(mutableSetOf()) { it.account }&lt;br/&gt;-&lt;br/&gt;-        // Ignore reports for people that we are following.&lt;br/&gt;-        val lastUsersOnFilter = keys.mapTo(mutableSetOf()) { it.user }&lt;br/&gt;-&lt;br/&gt;-        if (lastUsersOnFilter.isEmpty()) return null&lt;br/&gt;-&lt;br/&gt;-        val trustedAccountsPerRelay =&lt;br/&gt;-            mapOfSet {&lt;br/&gt;-                accounts.map { it.declaredFollowsPerOutboxRelay.value }.forEach {&lt;br/&gt;-                    add(it)&lt;br/&gt;-                }&lt;br/&gt;-            }&lt;br/&gt;-&lt;br/&gt;-        return trustedAccountsPerRelay&lt;br/&gt;-            .flatMap { (relay, trustedUsersInThisRelay) -&amp;gt;&lt;br/&gt;-                // this relay &#43; accounts are where we could find reports.&lt;br/&gt;-                // we might have already loaded them, so let&amp;#39;s separate new targets that were checked before from the others&lt;br/&gt;-                val groups = groupByRelayPresence(lastUsersOnFilter, relay)&lt;br/&gt;-                val trustedAccounts = trustedUsersInThisRelay.sorted()&lt;br/&gt;-                listOfNotNull(&lt;br/&gt;-                    filterReportsToKeysFromTrusted(&lt;br/&gt;-                        targets = groups.usersWithoutEose.toHexSet(),&lt;br/&gt;-                        trustedAccounts = trustedAccounts,&lt;br/&gt;-                        relay = relay,&lt;br/&gt;-                        since = null,&lt;br/&gt;-                    ),&lt;br/&gt;-                    filterReportsToKeysFromTrusted(&lt;br/&gt;-                        targets = groups.usersWithEose.toHexSet(),&lt;br/&gt;-                        trustedAccounts = trustedAccounts,&lt;br/&gt;-                        relay = relay,&lt;br/&gt;-                        since = findMinimumEOSEsForUsers(groups.usersWithEose, relay),&lt;br/&gt;-                    ),&lt;br/&gt;-                )&lt;br/&gt;-            }&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    class PresenceGroup(&lt;br/&gt;-        val usersWithEose: List&amp;lt;User&amp;gt; = emptyList(),&lt;br/&gt;-        val usersWithoutEose: List&amp;lt;User&amp;gt; = emptyList(),&lt;br/&gt;-    )&lt;br/&gt;-&lt;br/&gt;-    fun groupByRelayPresence(&lt;br/&gt;-        targetUsers: Iterable&amp;lt;User&amp;gt;,&lt;br/&gt;-        relay: NormalizedRelayUrl,&lt;br/&gt;-    ): PresenceGroup {&lt;br/&gt;-        if (targetUsers.none()) return PresenceGroup()&lt;br/&gt;-&lt;br/&gt;-        val groups =&lt;br/&gt;-            targetUsers.groupBy { user -&amp;gt;&lt;br/&gt;-                relay in&lt;br/&gt;-                    user&lt;br/&gt;-                        .reports()&lt;br/&gt;-                        .latestEOSEs.relayList.keys&lt;br/&gt;-            }&lt;br/&gt;-&lt;br/&gt;-        return PresenceGroup(&lt;br/&gt;-            groups[true]?.sortedBy { it.pubkeyHex } ?: emptyList(),&lt;br/&gt;-            groups[false]?.sortedBy { it.pubkeyHex } ?: emptyList(),&lt;br/&gt;-        )&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    fun findMinimumEOSEsForUsers(&lt;br/&gt;-        users: List&amp;lt;User&amp;gt;,&lt;br/&gt;-        relay: NormalizedRelayUrl,&lt;br/&gt;-    ): Long? {&lt;br/&gt;-        var min: MutableTime? = null&lt;br/&gt;-&lt;br/&gt;-        users.forEach {&lt;br/&gt;-            val eose = it.reports().latestEOSEs.since()[relay]&lt;br/&gt;-            if (min != null &amp;amp;&amp;amp; eose != null) {&lt;br/&gt;-                min.updateIfOlder(eose.time)&lt;br/&gt;-            } else if (eose != null) {&lt;br/&gt;-                min = MutableTime(eose.time)&lt;br/&gt;-            }&lt;br/&gt;-        }&lt;br/&gt;-&lt;br/&gt;-        return min?.time&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    override fun distinct(key: UserFinderQueryState) = key.user&lt;br/&gt;-}&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/RelayInformationScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/RelayInformationScreen.kt&lt;br/&gt;index 108ef90cf..430e8ffee 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/RelayInformationScreen.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/RelayInformationScreen.kt&lt;br/&gt;@@ -207,7 &#43;207,6 @@ import com.vitorpamplona.quartz.nip53LiveActivities.nestsServers.NestsServersEve&lt;br/&gt; import com.vitorpamplona.quartz.nip53LiveActivities.presence.MeetingRoomPresenceEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip53LiveActivities.streaming.LiveActivitiesEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip54Wiki.WikiNoteEvent&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapPrivateEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapRequestEvent&lt;br/&gt;@@ -659,7 &#43;658,6 @@ fun kindDisplayName(kind: Int): Int =&lt;br/&gt;         RelayDiscoveryEvent.KIND -&amp;gt; R.string.kind_relay_discovery&lt;br/&gt;         RelayMonitorEvent.KIND -&amp;gt; R.string.kind_relay_monitor&lt;br/&gt;         RelaySetEvent.KIND -&amp;gt; R.string.kind_relay_set&lt;br/&gt;-        ReportEvent.KIND -&amp;gt; R.string.kind_reports&lt;br/&gt;         RepostEvent.KIND -&amp;gt; R.string.kind_reposts&lt;br/&gt;         RequestToVanishEvent.KIND -&amp;gt; R.string.kind_user_delete&lt;br/&gt;         SealedRumorEvent.KIND -&amp;gt; R.string.kind_seals&lt;br/&gt;@@ -687,7 &#43;685,7 @@ val posts = setOf(0, 1, 6, 7, 16, 30023)&lt;br/&gt; val settings = setOf(3, 10002, 10000, 10001, 10003, 10004, 30000)&lt;br/&gt; val dms = setOf(4, GiftWrapEvent.KIND, EphemeralGiftWrapEvent.KIND, 10050)&lt;br/&gt; val zaps = setOf(9734, 9735, 9041, 17375, 23194, 23195)&lt;br/&gt;-val reports = setOf(ReportEvent.KIND, MuteListEvent.KIND, DeletionEvent.KIND, RequestToVanishEvent.KIND)&lt;br/&gt;&#43;val reports = setOf(MuteListEvent.KIND, DeletionEvent.KIND, RequestToVanishEvent.KIND)&lt;br/&gt; &lt;br/&gt; @Composable&lt;br/&gt; fun KindChip(kind: Int) {&lt;br/&gt;diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/connected/ConnectedRelayListViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/connected/ConnectedRelayListViewModel.kt&lt;br/&gt;index 4f6de2002..fa1f84af1 100644&lt;br/&gt;--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/connected/ConnectedRelayListViewModel.kt&lt;br/&gt;&#43;&#43;&#43; b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/connected/ConnectedRelayListViewModel.kt&lt;br/&gt;@@ -27,7 &#43;27,6 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySet&lt;br/&gt; import com.vitorpamplona.amethyst.ui.screen.loggedIn.relays.common.BasicRelaySetupInfoModel&lt;br/&gt; import com.vitorpamplona.quartz.nip01Core.core.HexKey&lt;br/&gt; import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; &lt;br/&gt; @Stable&lt;br/&gt; class ConnectedRelayListViewModel : BasicRelaySetupInfoModel() {&lt;br/&gt;@@ -41,14 &#43;40,11 @@ class ConnectedRelayListViewModel : BasicRelaySetupInfoModel() {&lt;br/&gt;                 val users = mutableSetOf&amp;lt;HexKey&amp;gt;()&lt;br/&gt;                 reqs.forEach { _, filters -&amp;gt;&lt;br/&gt;                     filters.forEach { filter -&amp;gt;&lt;br/&gt;-                        val isReportFilter = filter.kinds?.size == 1 &amp;amp;&amp;amp; filter.kinds?.firstOrNull() == ReportEvent.KIND&lt;br/&gt;-                        if (!isReportFilter) {&lt;br/&gt;-                            filter.authors?.forEach { pubkey -&amp;gt;&lt;br/&gt;-                                users.add(pubkey)&lt;br/&gt;-                            }&lt;br/&gt;-                            filter.tags?.get(&amp;#34;p&amp;#34;)?.forEach { pubkey -&amp;gt;&lt;br/&gt;-                                users.add(pubkey)&lt;br/&gt;-                            }&lt;br/&gt;&#43;                        filter.authors?.forEach { pubkey -&amp;gt;&lt;br/&gt;&#43;                            users.add(pubkey)&lt;br/&gt;&#43;                        }&lt;br/&gt;&#43;                        filter.tags?.get(&amp;#34;p&amp;#34;)?.forEach { pubkey -&amp;gt;&lt;br/&gt;&#43;                            users.add(pubkey)&lt;br/&gt;                         }&lt;br/&gt;                     }&lt;br/&gt;                 }&lt;br/&gt;diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/EventFactory.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/EventFactory.kt&lt;br/&gt;index 5ae5eed35..8b6e179c3 100644&lt;br/&gt;--- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/EventFactory.kt&lt;br/&gt;&#43;&#43;&#43; b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/EventFactory.kt&lt;br/&gt;@@ -176,7 &#43;176,6 @@ import com.vitorpamplona.quartz.nip53LiveActivities.presence.MeetingRoomPresence&lt;br/&gt; import com.vitorpamplona.quartz.nip53LiveActivities.raid.LiveActivitiesRaidEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip53LiveActivities.streaming.LiveActivitiesEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip54Wiki.WikiNoteEvent&lt;br/&gt;-import com.vitorpamplona.quartz.nip56Reports.ReportEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapPrivateEvent&lt;br/&gt; import com.vitorpamplona.quartz.nip57Zaps.LnZapRequestEvent&lt;br/&gt;@@ -567,7 &#43;566,6 @@ class EventFactory {&lt;br/&gt;                 RelayMonitorEvent.KIND -&amp;gt; RelayMonitorEvent(id, pubKey, createdAt, tags, content, sig)&lt;br/&gt;                 ReleaseArtifactSetEvent.KIND -&amp;gt; ReleaseArtifactSetEvent(id, pubKey, createdAt, tags, content, sig)&lt;br/&gt;                 RelaySetEvent.KIND -&amp;gt; RelaySetEvent(id, pubKey, createdAt, tags, content, sig)&lt;br/&gt;-                ReportEvent.KIND -&amp;gt; ReportEvent(id, pubKey, createdAt, tags, content, sig)&lt;br/&gt;                 RootSiteEvent.KIND -&amp;gt; RootSiteEvent(id, pubKey, createdAt, tags, content, sig)&lt;br/&gt;                 RepostEvent.KIND -&amp;gt; RepostEvent(id, pubKey, createdAt, tags, content, sig)&lt;br/&gt;                 RequestToVanishEvent.KIND -&amp;gt; RequestToVanishEvent(id, pubKey, createdAt, tags, content, sig)
    </content>
    <updated>2026-06-04T19:47:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvzzruuywct6y8p6dy2frcuvxhe0admnwxdnpz3a5u3w98zcrhttczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz0ahqgd</id>
    
      <title type="html">&amp;gt;Open Signal on your phone to keep your account active idk ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvzzruuywct6y8p6dy2frcuvxhe0admnwxdnpz3a5u3w98zcrhttczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz0ahqgd" />
    <content type="html">
      &amp;gt;Open Signal on your phone to keep your account active &lt;br/&gt;idk some kinda fiat bullshit
    </content>
    <updated>2026-06-04T13:35:01Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs238gg7yjmaaye6n6l2t4ua8aw6gczgjarkuldhmkn5jeu6x4l4qqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzh2kve2</id>
    
      <title>Nostr event nevent1qqs238gg7yjmaaye6n6l2t4ua8aw6gczgjarkuldhmkn5jeu6x4l4qqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzh2kve2</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs238gg7yjmaaye6n6l2t4ua8aw6gczgjarkuldhmkn5jeu6x4l4qqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzh2kve2" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/7809b94e70fbbcfda7cc3ab47dfcebc06ed92a8049637995308e9a2d2e8cae4f.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/a0efc5676d4a637d4283fab3da99e0a4ee68c76ca947ecb458302e3b373df157.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/62a15cbbfd47270fc3b500802ee29c2cc026914e5b6b46297cf4392161469b31.jpg&#34;&gt; &lt;br/&gt;#luda
    </content>
    <updated>2026-06-04T12:21:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspuapyl7vjk93kfamnkumf7fq7cerl9sevug97nzj8mdv92nq2jsgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzjcv5vs</id>
    
      <title type="html">git diff --name-status M package.json M src/routes/&#43;layout.ts D ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspuapyl7vjk93kfamnkumf7fq7cerl9sevug97nzj8mdv92nq2jsgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzjcv5vs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswmvsrv0030ked3xt6x5mlmvxner4mv28at2c5qht0k274ry24t9gpp4mhxue69uhkummn9ekx7mq454t9y&#39;&gt;nevent1q…4t9y&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;git diff --name-status&lt;br/&gt;M       package.json&lt;br/&gt;M       src/routes/&#43;layout.ts&lt;br/&gt;D       src/routes/&#43;page.server.ts&lt;br/&gt;D       src/routes/[naddr=naddr]/&#43;page.server.ts&lt;br/&gt;D       src/routes/[nostr=nostr]/&#43;page.server.ts&lt;br/&gt;D       src/routes/[note=note]/&#43;page.server.ts&lt;br/&gt;D       src/routes/[npub=npub]/&#43;layout.server.ts&lt;br/&gt;M       src/routes/[npub=npub]/&#43;layout.ts&lt;br/&gt;D       src/routes/api/ogp/&#43;server.ts&lt;br/&gt;D       src/routes/api/url-check/&#43;server.ts&lt;br/&gt;D       src/routes/channel/&#43;layout.server.ts&lt;br/&gt;D       src/routes/global/&#43;layout.server.ts&lt;br/&gt;D       src/routes/list/&#43;layout.server.ts&lt;br/&gt;D       src/routes/notifications/&#43;layout.server.ts&lt;br/&gt;D       src/routes/post/&#43;page.server.ts&lt;br/&gt;D       src/routes/relay/&#43;layout.server.ts&lt;br/&gt;D       src/routes/search/&#43;layout.server.ts&lt;br/&gt;M       src/routes/search/&#43;page.ts&lt;br/&gt;M       svelte.config.js
    </content>
    <updated>2026-06-04T10:16:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0yq0mnp2w0m80t9vetuvhyu5qswa6ngv0r33v45vdpvx4cehxs9qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzk89d97</id>
    
      <title type="html">diff --git a/package.json b/package.json index 023539d2..d018892e ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0yq0mnp2w0m80t9vetuvhyu5qswa6ngv0r33v45vdpvx4cehxs9qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzk89d97" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswmvsrv0030ked3xt6x5mlmvxner4mv28at2c5qht0k274ry24t9gpp4mhxue69uhkummn9ekx7mq454t9y&#39;&gt;nevent1q…4t9y&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;diff --git a/package.json b/package.json&lt;br/&gt;index 023539d2..d018892e 100644&lt;br/&gt;--- a/package.json&lt;br/&gt;&#43;&#43;&#43; b/package.json&lt;br/&gt;@@ -47,6 &#43;47,7 @@&lt;br/&gt;     &amp;#34;@konemono/svelte5-i18n&amp;#34;: &amp;#34;^0.2.3&amp;#34;,&lt;br/&gt;     &amp;#34;@melt-ui/pp&amp;#34;: &amp;#34;^0.3.2&amp;#34;,&lt;br/&gt;     &amp;#34;@rx-nostr/crypto&amp;#34;: &amp;#34;^0.0.0&amp;#34;,&lt;br/&gt;&#43;    &amp;#34;@sveltejs/adapter-static&amp;#34;: &amp;#34;^3.0.10&amp;#34;,&lt;br/&gt;     &amp;#34;@tanstack/svelte-query&amp;#34;: &amp;#34;^5.90.2&amp;#34;,&lt;br/&gt;     &amp;#34;@tanstack/svelte-query-devtools&amp;#34;: &amp;#34;^5.90.2&amp;#34;,&lt;br/&gt;     &amp;#34;eruda&amp;#34;: &amp;#34;^3.4.3&amp;#34;,&lt;br/&gt;diff --git a/src/routes/&#43;layout.ts b/src/routes/&#43;layout.ts&lt;br/&gt;index 5fc45cdb..ede415e9 100644&lt;br/&gt;--- a/src/routes/&#43;layout.ts&lt;br/&gt;&#43;&#43;&#43; b/src/routes/&#43;layout.ts&lt;br/&gt;@@ -6,6 &#43;6,9 @@ import * as nip19 from &amp;#34;nostr-tools/nip19&amp;#34;;&lt;br/&gt; import { relayRegex2 } from &amp;#34;$lib/func/regex&amp;#34;;&lt;br/&gt; import { error } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt; &lt;br/&gt;&#43;export const ssr = false;&lt;br/&gt;&#43;export const prerender = false;&lt;br/&gt;&#43;&lt;br/&gt; //デフォリレーを設定するために必要&lt;br/&gt; //めんどくさいから必要なもの(relays)だけ&lt;br/&gt; export const load: LayoutLoad = async (&lt;br/&gt;diff --git a/src/routes/&#43;page.server.ts b/src/routes/&#43;page.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index d218a8d1..00000000&lt;br/&gt;--- a/src/routes/&#43;page.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,6 &#43;0,0 @@&lt;br/&gt;-import { ogDescription, ogTitle } from &amp;#34;$lib/stores/stores&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load = async () =&amp;gt; {&lt;br/&gt;-  ogTitle.set(&amp;#34;Lumilumi&amp;#34;);&lt;br/&gt;-  ogDescription.set(&amp;#34;The Nostr Client&amp;#34;);&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/[naddr=naddr]/&#43;page.server.ts b/src/routes/[naddr=naddr]/&#43;page.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 9cb87f29..00000000&lt;br/&gt;--- a/src/routes/[naddr=naddr]/&#43;page.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,151 &#43;0,0 @@&lt;br/&gt;-// /page/[naddr]/&#43;page.server.ts&lt;br/&gt;-import type { PageServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-import * as nip19 from &amp;#34;nostr-tools/nip19&amp;#34;;&lt;br/&gt;-import { error } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt;-import * as Nostr from &amp;#34;nostr-typedef&amp;#34;;&lt;br/&gt;-import { ogDescription, ogTitle } from &amp;#34;$lib/stores/stores&amp;#34;;&lt;br/&gt;-import { eventKinds } from &amp;#34;$lib/func/kinds&amp;#34;;&lt;br/&gt;-import { locale } from &amp;#34;@konemono/svelte5-i18n&amp;#34;;&lt;br/&gt;-import { get } from &amp;#34;svelte/store&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-interface CustomParams {&lt;br/&gt;-  naddr: string;&lt;br/&gt;-}&lt;br/&gt;-&lt;br/&gt;-const defaultRelays = [&lt;br/&gt;-  // &amp;#34;wss://relay.nostr.band&amp;#34;,&lt;br/&gt;-  &amp;#34;wss://nos.lol&amp;#34;,&lt;br/&gt;-  &amp;#34;wss://nostr.bitcoiner.social&amp;#34;,&lt;br/&gt;-  &amp;#34;wss://relay.nostr.wirednet.jp&amp;#34;,&lt;br/&gt;-];&lt;br/&gt;-&lt;br/&gt;-const fetchEvent = async (&lt;br/&gt;-  naddrPointer: nip19.AddressPointer,&lt;br/&gt;-): Promise&amp;lt;Nostr.Event | undefined&amp;gt; =&amp;gt; {&lt;br/&gt;-  try {&lt;br/&gt;-    const naddr = nip19.naddrEncode(naddrPointer);&lt;br/&gt;-    console.debug(&amp;#34;[api request id]&amp;#34;, naddr);&lt;br/&gt;-    const response = await fetch(`&lt;a href=&#34;https://restr.mono3.workers.dev/${naddr}&#34;&gt;https://restr.mono3.workers.dev/${naddr}&lt;/a&gt;`, {&lt;br/&gt;-      headers: { &amp;#34;User-Agent&amp;#34;: &amp;#34;lumilumi&amp;#34; },&lt;br/&gt;-    });&lt;br/&gt;-&lt;br/&gt;-    if (!response.ok) {&lt;br/&gt;-      console.warn(&amp;#34;[api event not found]&amp;#34;, await response.text());&lt;br/&gt;-      return undefined;&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    const event = (await response.json()) as Nostr.Event;&lt;br/&gt;-    console.debug(&amp;#34;[api response]&amp;#34;, event);&lt;br/&gt;-    return event;&lt;br/&gt;-  } catch (error) {&lt;br/&gt;-    return undefined;&lt;br/&gt;-  }&lt;br/&gt;-};&lt;br/&gt;-&lt;br/&gt;-export const load: PageServerLoad = async ({&lt;br/&gt;-  params,&lt;br/&gt;-  request,&lt;br/&gt;-  setHeaders,&lt;br/&gt;-}: {&lt;br/&gt;-  params: CustomParams;&lt;br/&gt;-  request: Request;&lt;br/&gt;-  setHeaders: (headers: Record&amp;lt;string, string&amp;gt;) =&amp;gt; void;&lt;br/&gt;-}) =&amp;gt; {&lt;br/&gt;-  const { naddr } = params;&lt;br/&gt;-&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;Cache-Control&amp;#34;: &amp;#34;public, max-age=3600&amp;#34;,&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-    &amp;#34;Content-Type&amp;#34;: &amp;#34;text/html; charset=utf-8&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  console.debug(&amp;#34;[naddr page load]&amp;#34;, naddr);&lt;br/&gt;-&lt;br/&gt;-  // リファラーをチェックして自分のサイトからの遷移かどうかを判定&lt;br/&gt;-  const referer = request.headers.get(&amp;#34;referer&amp;#34;) || &amp;#34;&amp;#34;;&lt;br/&gt;-  const host = request.headers.get(&amp;#34;host&amp;#34;) || &amp;#34;&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-  // 自分のサイトからの遷移かどうか&lt;br/&gt;-  const isInternalNavigation = referer.includes(host) &amp;amp;&amp;amp; host !== &amp;#34;&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-  // 自分のサイトからの遷移でない場合にフェッチする&lt;br/&gt;-  const shouldFetch = !isInternalNavigation;&lt;br/&gt;-&lt;br/&gt;-  console.debug(&amp;#34;[naddr page] referer:&amp;#34;, referer);&lt;br/&gt;-  console.debug(&amp;#34;[naddr page] host:&amp;#34;, host);&lt;br/&gt;-  console.debug(&amp;#34;[naddr page] is internal navigation:&amp;#34;, isInternalNavigation);&lt;br/&gt;-  console.debug(&amp;#34;[naddr page] should fetch:&amp;#34;, shouldFetch);&lt;br/&gt;-&lt;br/&gt;-  try {&lt;br/&gt;-    const { type, data } = nip19.decode(naddr);&lt;br/&gt;-&lt;br/&gt;-    if (type !== &amp;#34;naddr&amp;#34;) throw Error();&lt;br/&gt;-&lt;br/&gt;-    const addr = data as nip19.AddressPointer;&lt;br/&gt;-&lt;br/&gt;-    const res: {&lt;br/&gt;-      identifier: string;&lt;br/&gt;-      pubkey: string;&lt;br/&gt;-      kind: number;&lt;br/&gt;-      relays?: string[];&lt;br/&gt;-      event?: Nostr.Event;&lt;br/&gt;-      encoded: string;&lt;br/&gt;-      skipFetch?: boolean;&lt;br/&gt;-    } = {&lt;br/&gt;-      identifier: addr.identifier,&lt;br/&gt;-      pubkey: addr.pubkey,&lt;br/&gt;-      kind: addr.kind,&lt;br/&gt;-      relays: addr.relays,&lt;br/&gt;-      event: undefined,&lt;br/&gt;-      encoded: naddr,&lt;br/&gt;-      skipFetch: !shouldFetch,&lt;br/&gt;-    };&lt;br/&gt;-&lt;br/&gt;-    const kindString = eventKinds.get(res.kind)?.[&lt;br/&gt;-      get(locale) === &amp;#34;ja&amp;#34; ? &amp;#34;ja&amp;#34; : &amp;#34;en&amp;#34;&lt;br/&gt;-    ];&lt;br/&gt;-&lt;br/&gt;-    // OGPクローラーの場合のみフェッチする&lt;br/&gt;-    if (shouldFetch) {&lt;br/&gt;-      res.event = await fetchEvent({&lt;br/&gt;-        identifier: res.identifier,&lt;br/&gt;-        pubkey: res.pubkey,&lt;br/&gt;-        kind: res.kind,&lt;br/&gt;-        relays: (res.relays?.length ? res.relays : defaultRelays).slice(0, 3),&lt;br/&gt;-      });&lt;br/&gt;-&lt;br/&gt;-      if (res.event) {&lt;br/&gt;-        const title = res.event.tags.find((tag) =&amp;gt; tag[0] === &amp;#34;title&amp;#34;)?.[1];&lt;br/&gt;-        const desc = res.event.tags.find(&lt;br/&gt;-          (tag) =&amp;gt; tag[0] === &amp;#34;description&amp;#34; || tag[0] === &amp;#34;summary&amp;#34;,&lt;br/&gt;-        )?.[1];&lt;br/&gt;-        ogTitle.set(&lt;br/&gt;-          `Lumilumi - kind:${res.kind} ${&lt;br/&gt;-            title ? title : kindString ? `(${kindString})` : &amp;#34;&amp;#34;&lt;br/&gt;-          }`,&lt;br/&gt;-        );&lt;br/&gt;-        ogDescription.set(desc || &amp;#34;&amp;#34;);&lt;br/&gt;-      } else {&lt;br/&gt;-        ogTitle.set(&lt;br/&gt;-          `Lumilumi - kind:${res.kind} ${kindString ? `(${kindString})` : &amp;#34;&amp;#34;}`,&lt;br/&gt;-        );&lt;br/&gt;-        ogDescription.set(`Id:${res.identifier}`);&lt;br/&gt;-      }&lt;br/&gt;-    } else {&lt;br/&gt;-      console.debug(&lt;br/&gt;-        &amp;#34;[naddr page] skipping fetch - internal navigation from same site&amp;#34;,&lt;br/&gt;-      );&lt;br/&gt;-&lt;br/&gt;-      // 内部遷移の場合でも最低限のOG設定&lt;br/&gt;-      ogTitle.set(&lt;br/&gt;-        `Lumilumi - kind:${res.kind} ${kindString ? `(${kindString})` : &amp;#34;&amp;#34;}`,&lt;br/&gt;-      );&lt;br/&gt;-      ogDescription.set(`Id:${res.identifier}`);&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    return res;&lt;br/&gt;-  } catch (e) {&lt;br/&gt;-    console.error(&amp;#34;[naddr page decode error]&amp;#34;, e);&lt;br/&gt;-    throw error(404, &amp;#34;Not Found&amp;#34;);&lt;br/&gt;-  }&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/[nostr=nostr]/&#43;page.server.ts b/src/routes/[nostr=nostr]/&#43;page.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index fe4b51f2..00000000&lt;br/&gt;--- a/src/routes/[nostr=nostr]/&#43;page.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,15 &#43;0,0 @@&lt;br/&gt;-import { redirect } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load = async ({ params }) =&amp;gt; {&lt;br/&gt;-  const { nostr } = params;&lt;br/&gt;-  let decodedNostr: string;&lt;br/&gt;-&lt;br/&gt;-  try {&lt;br/&gt;-    decodedNostr = decodeURIComponent(nostr);&lt;br/&gt;-  } catch {&lt;br/&gt;-    decodedNostr = nostr; // デコード失敗時はそのまま使用&lt;br/&gt;-  }&lt;br/&gt;-&lt;br/&gt;-  const newPath = decodedNostr.replace(/^(?:web\&#43;)?nostr:\/?\/?/, &amp;#34;&amp;#34;);&lt;br/&gt;-  throw redirect(302, newPath);&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/[note=note]/&#43;page.server.ts b/src/routes/[note=note]/&#43;page.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 2cbe270f..00000000&lt;br/&gt;--- a/src/routes/[note=note]/&#43;page.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,156 &#43;0,0 @@&lt;br/&gt;-import * as nip19 from &amp;#34;nostr-tools/nip19&amp;#34;;&lt;br/&gt;-import { error } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt;-import * as Nostr from &amp;#34;nostr-typedef&amp;#34;;&lt;br/&gt;-import { ogDescription, ogTitle } from &amp;#34;$lib/stores/stores&amp;#34;;&lt;br/&gt;-import { eventKinds } from &amp;#34;$lib/func/kinds&amp;#34;;&lt;br/&gt;-import { locale } from &amp;#34;@konemono/svelte5-i18n&amp;#34;;&lt;br/&gt;-import { get } from &amp;#34;svelte/store&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-interface CustomParams {&lt;br/&gt;-  note: string;&lt;br/&gt;-}&lt;br/&gt;-&lt;br/&gt;-const defaultRelays = [&amp;#34;wss://nos.lol&amp;#34;, &amp;#34;wss://nostr.bitcoiner.social&amp;#34;];&lt;br/&gt;-&lt;br/&gt;-const fetchEvent = async (&lt;br/&gt;-  id: string,&lt;br/&gt;-  relays: string[],&lt;br/&gt;-): Promise&amp;lt;Nostr.Event | undefined&amp;gt; =&amp;gt; {&lt;br/&gt;-  try {&lt;br/&gt;-    const nevent = nip19.neventEncode({ id: id, relays: relays.slice(0, 3) });&lt;br/&gt;-&lt;br/&gt;-    console.debug(&amp;#34;[api request id]&amp;#34;, nevent, relays);&lt;br/&gt;-    const response = await fetch(`&lt;a href=&#34;https://restr.mono3.workers.dev/${nevent}&#34;&gt;https://restr.mono3.workers.dev/${nevent}&lt;/a&gt;`, {&lt;br/&gt;-      headers: { &amp;#34;User-Agent&amp;#34;: &amp;#34;lumilumi&amp;#34; },&lt;br/&gt;-    });&lt;br/&gt;-&lt;br/&gt;-    if (!response.ok) {&lt;br/&gt;-      console.warn(&amp;#34;[api event not found]&amp;#34;, await response.text());&lt;br/&gt;-      return undefined;&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    const event = (await response.json()) as Nostr.Event;&lt;br/&gt;-    console.debug(&amp;#34;[api response]&amp;#34;, event);&lt;br/&gt;-    return event;&lt;br/&gt;-  } catch (error) {&lt;br/&gt;-    return undefined;&lt;br/&gt;-  }&lt;br/&gt;-};&lt;br/&gt;-&lt;br/&gt;-export const load = async ({&lt;br/&gt;-  params,&lt;br/&gt;-  request,&lt;br/&gt;-  setHeaders,&lt;br/&gt;-}: {&lt;br/&gt;-  params: CustomParams;&lt;br/&gt;-  request: Request;&lt;br/&gt;-  setHeaders: (headers: Record&amp;lt;string, string&amp;gt;) =&amp;gt; void;&lt;br/&gt;-}) =&amp;gt; {&lt;br/&gt;-  const { note } = params;&lt;br/&gt;-&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;Cache-Control&amp;#34;: &amp;#34;public, max-age=3600&amp;#34;,&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-    &amp;#34;Content-Type&amp;#34;: &amp;#34;text/html; charset=utf-8&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  console.debug(&amp;#34;[thread page load]&amp;#34;, note);&lt;br/&gt;-&lt;br/&gt;-  // リファラーをチェックして自分のサイトからの遷移かどうかを判定&lt;br/&gt;-  const referer = request.headers.get(&amp;#34;referer&amp;#34;) || &amp;#34;&amp;#34;;&lt;br/&gt;-  const host = request.headers.get(&amp;#34;host&amp;#34;) || &amp;#34;&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-  // 自分のサイトからの遷移かどうか&lt;br/&gt;-  const isInternalNavigation = referer.includes(host) &amp;amp;&amp;amp; host !== &amp;#34;&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-  // 自分のサイトからの遷移でない場合にフェッチする&lt;br/&gt;-  const shouldFetch = !isInternalNavigation;&lt;br/&gt;-&lt;br/&gt;-  console.debug(&amp;#34;[thread page] referer:&amp;#34;, referer);&lt;br/&gt;-  console.debug(&amp;#34;[thread page] host:&amp;#34;, host);&lt;br/&gt;-  console.debug(&amp;#34;[thread page] is internal navigation:&amp;#34;, isInternalNavigation);&lt;br/&gt;-  console.debug(&amp;#34;[thread page] should fetch:&amp;#34;, shouldFetch);&lt;br/&gt;-&lt;br/&gt;-  try {&lt;br/&gt;-    const { type, data } = nip19.decode(note);&lt;br/&gt;-    console.debug(&amp;#34;[thread decode]&amp;#34;, type, data);&lt;br/&gt;-&lt;br/&gt;-    const res: {&lt;br/&gt;-      id: string;&lt;br/&gt;-      relays?: string[];&lt;br/&gt;-      kind?: number;&lt;br/&gt;-      author?: string;&lt;br/&gt;-      event?: Nostr.Event;&lt;br/&gt;-      encoded: string;&lt;br/&gt;-      skipFetch?: boolean;&lt;br/&gt;-    } = {&lt;br/&gt;-      id: &amp;#34;&amp;#34;,&lt;br/&gt;-      relays: undefined,&lt;br/&gt;-      kind: undefined,&lt;br/&gt;-      author: undefined,&lt;br/&gt;-      event: undefined,&lt;br/&gt;-      encoded: note,&lt;br/&gt;-      skipFetch: !shouldFetch,&lt;br/&gt;-    };&lt;br/&gt;-&lt;br/&gt;-    switch (type) {&lt;br/&gt;-      case &amp;#34;note&amp;#34;:&lt;br/&gt;-        res.id = data;&lt;br/&gt;-        break;&lt;br/&gt;-      case &amp;#34;nevent&amp;#34;:&lt;br/&gt;-        res.id = data.id;&lt;br/&gt;-        res.kind = data.kind;&lt;br/&gt;-        res.author = data.author;&lt;br/&gt;-        break;&lt;br/&gt;-      default:&lt;br/&gt;-        error(500);&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    // OGPクローラーの場合のみフェッチする&lt;br/&gt;-    if (shouldFetch) {&lt;br/&gt;-      res.event = await fetchEvent(&lt;br/&gt;-        res.id,&lt;br/&gt;-        res.relays?.length ? res.relays : defaultRelays,&lt;br/&gt;-      );&lt;br/&gt;-      console.log(res.event);&lt;br/&gt;-&lt;br/&gt;-      if (res.event) {&lt;br/&gt;-        const kindString = eventKinds.get(res.event.kind)?.[&lt;br/&gt;-          get(locale) === &amp;#34;ja&amp;#34; ? &amp;#34;ja&amp;#34; : &amp;#34;en&amp;#34;&lt;br/&gt;-        ];&lt;br/&gt;-        ogTitle.set(&lt;br/&gt;-          `Lumilumi - kind:${res.event.kind} ${&lt;br/&gt;-            kindString ? `(${kindString})` : &amp;#34;&amp;#34;&lt;br/&gt;-          }`,&lt;br/&gt;-        );&lt;br/&gt;-        ogDescription.set(res.event.content);&lt;br/&gt;-      } else if (res.kind) {&lt;br/&gt;-        const kindString = eventKinds.get(res.kind)?.[&lt;br/&gt;-          get(locale) === &amp;#34;ja&amp;#34; ? &amp;#34;ja&amp;#34; : &amp;#34;en&amp;#34;&lt;br/&gt;-        ];&lt;br/&gt;-        ogTitle.set(&lt;br/&gt;-          `Lumilumi - kind:${res.kind} ${kindString ? `(${kindString})` : &amp;#34;&amp;#34;}`,&lt;br/&gt;-        );&lt;br/&gt;-      }&lt;br/&gt;-    } else {&lt;br/&gt;-      console.debug(&lt;br/&gt;-        &amp;#34;[thread page] skipping fetch - internal navigation from same site&amp;#34;,&lt;br/&gt;-      );&lt;br/&gt;-&lt;br/&gt;-      // 内部遷移の場合でも、kindが分かっている場合は最低限のOG設定&lt;br/&gt;-      if (res.kind) {&lt;br/&gt;-        const kindString = eventKinds.get(res.kind)?.[&lt;br/&gt;-          get(locale) === &amp;#34;ja&amp;#34; ? &amp;#34;ja&amp;#34; : &amp;#34;en&amp;#34;&lt;br/&gt;-        ];&lt;br/&gt;-        ogTitle.set(&lt;br/&gt;-          `Lumilumi - kind:${res.kind} ${kindString ? `(${kindString})` : &amp;#34;&amp;#34;}`,&lt;br/&gt;-        );&lt;br/&gt;-      }&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    return res;&lt;br/&gt;-  } catch (e) {&lt;br/&gt;-    console.error(&amp;#34;[thread page decode error]&amp;#34;, e);&lt;br/&gt;-    error(404, &amp;#34;Not Found&amp;#34;);&lt;br/&gt;-  }&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/[npub=npub]/&#43;layout.server.ts b/src/routes/[npub=npub]/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/[npub=npub]/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/[npub=npub]/&#43;layout.ts b/src/routes/[npub=npub]/&#43;layout.ts&lt;br/&gt;index 7f8effa4..e047ade8 100644&lt;br/&gt;--- a/src/routes/[npub=npub]/&#43;layout.ts&lt;br/&gt;&#43;&#43;&#43; b/src/routes/[npub=npub]/&#43;layout.ts&lt;br/&gt;@@ -8,6 &#43;8,9 @@ import { queryProfile } from &amp;#34;nostr-tools/nip05&amp;#34;;&lt;br/&gt; interface CustomParams {&lt;br/&gt;   npub: string;&lt;br/&gt; }&lt;br/&gt;&#43;&lt;br/&gt;&#43;export const ssr = false;&lt;br/&gt;&#43;&lt;br/&gt; //&lt;a href=&#34;https://kit.svelte.jp/docs/load&#34;&gt;https://kit.svelte.jp/docs/load&lt;/a&gt;&lt;br/&gt; //ページを読み込む前に有効なparamかチェック&lt;br/&gt; export const load: LayoutLoad&amp;lt;{&lt;br/&gt;diff --git a/src/routes/api/ogp/&#43;server.ts b/src/routes/api/ogp/&#43;server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 288c057b..00000000&lt;br/&gt;--- a/src/routes/api/ogp/&#43;server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,58 &#43;0,0 @@&lt;br/&gt;-// src/routes/api/ogp/&#43;server.ts&lt;br/&gt;-import { error } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt;-import { unfurl } from &amp;#34;unfurl.js&amp;#34;;&lt;br/&gt;-import type { RequestHandler } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-import type { Metadata } from &amp;#34;unfurl.js/dist/types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const GET: RequestHandler = async ({ url: request }) =&amp;gt; {&lt;br/&gt;-  const url = request.searchParams.get(&amp;#34;url&amp;#34;);&lt;br/&gt;-&lt;br/&gt;-  if (!url) {&lt;br/&gt;-    throw error(404, {&lt;br/&gt;-      message: &amp;#34;require url param&amp;#34;,&lt;br/&gt;-    });&lt;br/&gt;-  }&lt;br/&gt;-&lt;br/&gt;-  const parsedUrl = new URL(url);&lt;br/&gt;-&lt;br/&gt;-  const ALLOWED_PROTOCOLS = [&amp;#34;https:&amp;#34;];&lt;br/&gt;-  if (!ALLOWED_PROTOCOLS.includes(parsedUrl.protocol)) {&lt;br/&gt;-    throw error(400, { message: &amp;#34;Only HTTPS URLs are allowed&amp;#34; });&lt;br/&gt;-  }&lt;br/&gt;-&lt;br/&gt;-  const blockedRanges =&lt;br/&gt;-  /^(localhost|127\.|10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|0\.0\.0\.0|169\.254\.|::1|\[::1\]|\[?fc[0-9a-f]{2}:|\[?fd[0-9a-f]{2}:|\[?fe80:)/i;&lt;br/&gt;-  if (blockedRanges.test(parsedUrl.hostname)) {&lt;br/&gt;-    throw error(403, { message: &amp;#34;Private addresses are not allowed&amp;#34; });&lt;br/&gt;-  }&lt;br/&gt;-&lt;br/&gt;-  const host = parsedUrl.host.toLowerCase();&lt;br/&gt;-&lt;br/&gt;-  let userAgent = &amp;#34;LumilumiOGPFetcher/1.0 (&#43;&lt;a href=&#34;https://lumilumi.app&#34;&gt;https://lumilumi.app&lt;/a&gt;)&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-  if (&lt;br/&gt;-    host.includes(&amp;#34;amazon.&amp;#34;) ||&lt;br/&gt;-    host.includes(&amp;#34;twitter.com&amp;#34;) ||&lt;br/&gt;-    host.includes(&amp;#34;x.com&amp;#34;) ||&lt;br/&gt;-    host.includes(&amp;#34;t.co&amp;#34;) ||&lt;br/&gt;-    host.includes(&amp;#34;suno.com&amp;#34;) ||&lt;br/&gt;-    host.includes(&amp;#34;suno.ai&amp;#34;)&lt;br/&gt;-  ) {&lt;br/&gt;-    userAgent = &amp;#34;facebookexternalhit&amp;#34;;&lt;br/&gt;-  }&lt;br/&gt;-&lt;br/&gt;-  const result: Metadata = await unfurl(url, {&lt;br/&gt;-    headers: {&lt;br/&gt;-      Accept: &amp;#34;text/html, application/xhtml&#43;xml&amp;#34;,&lt;br/&gt;-      &amp;#34;User-Agent&amp;#34;: userAgent,&lt;br/&gt;-    },&lt;br/&gt;-  }).catch((err) =&amp;gt; {&lt;br/&gt;-    throw error(404, {&lt;br/&gt;-      message: err.message ?? String(err),&lt;br/&gt;-    });&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return new Response(JSON.stringify(result), {&lt;br/&gt;-    headers: { &amp;#34;Content-Type&amp;#34;: &amp;#34;application/json&amp;#34; },&lt;br/&gt;-  });&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/api/url-check/&#43;server.ts b/src/routes/api/url-check/&#43;server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 1a07914a..00000000&lt;br/&gt;--- a/src/routes/api/url-check/&#43;server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,52 &#43;0,0 @@&lt;br/&gt;-// src/routes/api/url-check/&#43;server.ts&lt;br/&gt;-import { error } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt;-import type { RequestHandler } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const GET: RequestHandler = async ({ url: request }) =&amp;gt; {&lt;br/&gt;-  const targetUrl = request.searchParams.get(&amp;#34;url&amp;#34;);&lt;br/&gt;-&lt;br/&gt;-  if (!targetUrl) {&lt;br/&gt;-    throw error(400, { message: &amp;#34;URL parameter is required&amp;#34; });&lt;br/&gt;-  }&lt;br/&gt;-&lt;br/&gt;-  try {&lt;br/&gt;-    const parsed = new URL(targetUrl);&lt;br/&gt;-&lt;br/&gt;-    const ALLOWED_PROTOCOLS = [&amp;#34;https:&amp;#34;];&lt;br/&gt;-    if (!ALLOWED_PROTOCOLS.includes(parsed.protocol)) {&lt;br/&gt;-      throw error(400, { message: &amp;#34;Only HTTPS URLs are allowed&amp;#34; });&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    const blockedRanges =&lt;br/&gt;-  /^(localhost|127\.|10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|0\.0\.0\.0|169\.254\.|::1|\[::1\]|\[?fc[0-9a-f]{2}:|\[?fd[0-9a-f]{2}:|\[?fe80:)/i;&lt;br/&gt;-    if (blockedRanges.test(parsed.hostname)) {&lt;br/&gt;-      throw error(403, { message: &amp;#34;Private addresses are not allowed&amp;#34; });&lt;br/&gt;-    }&lt;br/&gt;-&lt;br/&gt;-    const response = await fetch(targetUrl, { method: &amp;#34;HEAD&amp;#34; });&lt;br/&gt;-    const contentType = response.headers.get(&amp;#34;Content-Type&amp;#34;);&lt;br/&gt;-&lt;br/&gt;-    return new Response(&lt;br/&gt;-      JSON.stringify({&lt;br/&gt;-        contentType,&lt;br/&gt;-        status: response.status,&lt;br/&gt;-      }),&lt;br/&gt;-      {&lt;br/&gt;-        headers: { &amp;#34;Content-Type&amp;#34;: &amp;#34;application/json&amp;#34; },&lt;br/&gt;-      },&lt;br/&gt;-    );&lt;br/&gt;-  } catch (err) {&lt;br/&gt;-    if (err &amp;amp;&amp;amp; typeof err === &amp;#34;object&amp;#34; &amp;amp;&amp;amp; &amp;#34;status&amp;#34; in err) {&lt;br/&gt;-      throw err;&lt;br/&gt;-    }&lt;br/&gt;-    return new Response(&lt;br/&gt;-      JSON.stringify({&lt;br/&gt;-        contentType: null,&lt;br/&gt;-        error: err instanceof Error ? err.message : String(err),&lt;br/&gt;-      }),&lt;br/&gt;-      {&lt;br/&gt;-        headers: { &amp;#34;Content-Type&amp;#34;: &amp;#34;application/json&amp;#34; },&lt;br/&gt;-      },&lt;br/&gt;-    );&lt;br/&gt;-  }&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/channel/&#43;layout.server.ts b/src/routes/channel/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/channel/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/global/&#43;layout.server.ts b/src/routes/global/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/global/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/list/&#43;layout.server.ts b/src/routes/list/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/list/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/notifications/&#43;layout.server.ts b/src/routes/notifications/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/notifications/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/post/&#43;page.server.ts b/src/routes/post/&#43;page.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 708f9f9e..00000000&lt;br/&gt;--- a/src/routes/post/&#43;page.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,33 &#43;0,0 @@&lt;br/&gt;-// &#43;page.server.ts&lt;br/&gt;-&lt;br/&gt;-import { fail } from &amp;#34;@sveltejs/kit&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-let data: { title: any; text: any; url?: any; media?: any } = {&lt;br/&gt;-  title: &amp;#34;&amp;#34;,&lt;br/&gt;-  text: &amp;#34;&amp;#34;,&lt;br/&gt;-};&lt;br/&gt;-&lt;br/&gt;-export const actions = {&lt;br/&gt;-  default: async ({ request }) =&amp;gt; {&lt;br/&gt;-    try {&lt;br/&gt;-      const formData = await request.formData();&lt;br/&gt;-&lt;br/&gt;-      data = {&lt;br/&gt;-        title: formData.get(&amp;#34;title&amp;#34;),&lt;br/&gt;-        text: formData.get(&amp;#34;text&amp;#34;),&lt;br/&gt;-        url: formData.get(&amp;#34;url&amp;#34;),&lt;br/&gt;-        media: formData.get(&amp;#34;media&amp;#34;),&lt;br/&gt;-      };&lt;br/&gt;-&lt;br/&gt;-      if (!data.title &amp;amp;&amp;amp; !data.text &amp;amp;&amp;amp; !data.url &amp;amp;&amp;amp; !data.media) {&lt;br/&gt;-        return fail(400, { message: &amp;#34;invalid&amp;#34; });&lt;br/&gt;-      }&lt;br/&gt;-&lt;br/&gt;-      // フロントエンドにデータを返す&lt;br/&gt;-      return { success: true };&lt;br/&gt;-    } catch (err) {&lt;br/&gt;-      console.error(err);&lt;br/&gt;-      return fail(400, { message: &amp;#34;invalid&amp;#34; });&lt;br/&gt;-    }&lt;br/&gt;-  },&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/relay/&#43;layout.server.ts b/src/routes/relay/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/relay/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/search/&#43;layout.server.ts b/src/routes/search/&#43;layout.server.ts&lt;br/&gt;deleted file mode 100644&lt;br/&gt;index 84eb80d6..00000000&lt;br/&gt;--- a/src/routes/search/&#43;layout.server.ts&lt;br/&gt;&#43;&#43;&#43; /dev/null&lt;br/&gt;@@ -1,9 &#43;0,0 @@&lt;br/&gt;-import type { LayoutServerLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt;-&lt;br/&gt;-export const load: LayoutServerLoad = async ({ setHeaders }) =&amp;gt; {&lt;br/&gt;-  setHeaders({&lt;br/&gt;-    &amp;#34;X-Robots-Tag&amp;#34;: &amp;#34;noindex, nofollow&amp;#34;,&lt;br/&gt;-  });&lt;br/&gt;-&lt;br/&gt;-  return {}; // 必要なデータがない場合は空オブジェクトを返す&lt;br/&gt;-};&lt;br/&gt;diff --git a/src/routes/search/&#43;page.ts b/src/routes/search/&#43;page.ts&lt;br/&gt;index bf302eeb..b2176cce 100644&lt;br/&gt;--- a/src/routes/search/&#43;page.ts&lt;br/&gt;&#43;&#43;&#43; b/src/routes/search/&#43;page.ts&lt;br/&gt;@@ -3,6 &#43;3,8 @@ import { ogDescription, ogTitle } from &amp;#34;$lib/stores/stores&amp;#34;;&lt;br/&gt; &lt;br/&gt; import type { PageLoad } from &amp;#34;./$types&amp;#34;;&lt;br/&gt; &lt;br/&gt;&#43;export const ssr = false;&lt;br/&gt;&#43;&lt;br/&gt; export const load: PageLoad = ({ url }) =&amp;gt; {&lt;br/&gt;   const searchParams = url.searchParams;&lt;br/&gt; &lt;br/&gt;diff --git a/svelte.config.js b/svelte.config.js&lt;br/&gt;index 05d0b797..a3021bfb 100644&lt;br/&gt;--- a/svelte.config.js&lt;br/&gt;&#43;&#43;&#43; b/svelte.config.js&lt;br/&gt;@@ -1,5 &#43;1,6 @@&lt;br/&gt; import { preprocessMeltUI, sequence } from &amp;#34;@melt-ui/pp&amp;#34;;&lt;br/&gt;-import adapter from &amp;#34;@sveltejs/adapter-auto&amp;#34;;&lt;br/&gt;&#43;//import adapter from &amp;#34;@sveltejs/adapter-auto&amp;#34;;&lt;br/&gt;&#43;import adapter from &amp;#34;@sveltejs/adapter-static&amp;#34;;&lt;br/&gt; import { vitePreprocess } from &amp;#34;@sveltejs/vite-plugin-svelte&amp;#34;;&lt;br/&gt; /** @type {import(&amp;#39;@sveltejs/kit&amp;#39;).Config}*/&lt;br/&gt; const config = {&lt;br/&gt;@@ -10,7 &#43;11,9 @@ const config = {&lt;br/&gt;     // adapter-auto only supports some environments, see &lt;a href=&#34;https://kit.svelte.dev/docs/adapter-auto&#34;&gt;https://kit.svelte.dev/docs/adapter-auto&lt;/a&gt; for a list.&lt;br/&gt;     // If your environment is not supported, or you settled on a specific environment, switch out the adapter.&lt;br/&gt;     // See &lt;a href=&#34;https://kit.svelte.dev/docs/adapters&#34;&gt;https://kit.svelte.dev/docs/adapters&lt;/a&gt; for more information about adapters.&lt;br/&gt;-    adapter: adapter(),&lt;br/&gt;&#43;    adapter: adapter({&lt;br/&gt;&#43;      fallback: &amp;#34;index.html&amp;#34;&lt;br/&gt;&#43;    }),&lt;br/&gt;     serviceWorker: {&lt;br/&gt;       //pwa仮想モジュール（virtual:pwa-registerまたはvirtual:pwa-register/svelte）を使用している場合は、SvelteKitの設定からサービスワーカーの登録を除外する必要があります：&lt;br/&gt;       register: false,
    </content>
    <updated>2026-06-04T10:12:55Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswmvsrv0030ked3xt6x5mlmvxner4mv28at2c5qht0k274ry24t9gzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzgylys4</id>
    
      <title type="html">i think #lumilumi is pretty good now that i have removed the ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswmvsrv0030ked3xt6x5mlmvxner4mv28at2c5qht0k274ry24t9gzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzgylys4" />
    <content type="html">
      i think #lumilumi is pretty good now that i have removed the server side node stuff and deployed it on #nginx&lt;br/&gt;&lt;br/&gt;idk why japs keep building server side logic on their nostr apps
    </content>
    <updated>2026-06-04T10:11:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0m8xuelpkeq5xcx5uyqlyzg3rnz4r5g0wxky6gmcmqkehr36ktrczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz7unygh</id>
    
      <title type="html">maybe #namecoin identifiers are gaining traction. lumilumi has ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0m8xuelpkeq5xcx5uyqlyzg3rnz4r5g0wxky6gmcmqkehr36ktrczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz7unygh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstqrs3y3k4lv6vuyn8jdan7uvycy8vqcsz7s2t2r66ddka0wew9hspp4mhxue69uhkummn9ekx7mqt7twat&#39;&gt;nevent1q…twat&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;maybe #namecoin identifiers are gaining traction. lumilumi has pr:&lt;br/&gt;&lt;a href=&#34;https://github.com/TsukemonoGit/lumilumi/pull/1037&#34;&gt;https://github.com/TsukemonoGit/lumilumi/pull/1037&lt;/a&gt;
    </content>
    <updated>2026-06-04T10:06:38Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstqrs3y3k4lv6vuyn8jdan7uvycy8vqcsz7s2t2r66ddka0wew9hszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzes2ww3</id>
    
      <title type="html">get electrum nmc: ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstqrs3y3k4lv6vuyn8jdan7uvycy8vqcsz7s2t2r66ddka0wew9hszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzes2ww3" />
    <content type="html">
      get electrum nmc:&lt;br/&gt;&lt;a href=&#34;https://www.namecoin.org/download/betas/#electrum-nmc&#34;&gt;https://www.namecoin.org/download/betas/#electrum-nmc&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;swap some coin to namecoin. no kyc, no account:&lt;br/&gt;&lt;a href=&#34;https://altquick.com/swap/&#34;&gt;https://altquick.com/swap/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;register your nip05 name in electrum nmc by names tab. here is the minimum format needed:&lt;br/&gt;{&amp;#34;nostr&amp;#34;:{&amp;#34;names&amp;#34;:{&amp;#34;yourname&amp;#34;:&amp;#34;your_pubkey_hex&amp;#34;}}}&lt;br/&gt;&lt;br/&gt;profit.&lt;br/&gt;&lt;br/&gt;amethyst and other supporting clients will now resolve the name and its valid for one year. no server needed for findable name.&lt;br/&gt;&lt;br/&gt;see your registered names in explorer:&lt;br/&gt;&lt;a href=&#34;https://namebrow.se/&#34;&gt;https://namebrow.se/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#nmc #namecoin #nip05
    </content>
    <updated>2026-06-04T10:05:21Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2nnajuw43d9k5lsgpuwcdq9v4yw0xxne7vv786fg4pk9723dkwwszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz8x7lus</id>
    
      <title>Nostr event nevent1qqs2nnajuw43d9k5lsgpuwcdq9v4yw0xxne7vv786fg4pk9723dkwwszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz8x7lus</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2nnajuw43d9k5lsgpuwcdq9v4yw0xxne7vv786fg4pk9723dkwwszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz8x7lus" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/6945d4615b5585303a021fd89a0dcfcdf4959752df1e6339bb5df031ae176573.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/20fc99d2f3e44a0b636c14cae915d58e6deced7c640da06b2bf34faf4e282808.jpg&#34;&gt; 
    </content>
    <updated>2026-06-03T20:34:24Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvg5uqwgdqluc8lpkncxwak0jzwhf674k4hl9fjkjm258jklcjpcszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz3pm3z2</id>
    
      <title>Nostr event nevent1qqsvg5uqwgdqluc8lpkncxwak0jzwhf674k4hl9fjkjm258jklcjpcszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz3pm3z2</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvg5uqwgdqluc8lpkncxwak0jzwhf674k4hl9fjkjm258jklcjpcszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz3pm3z2" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/4b7b9f08cfdfbe50bdd0264c7b69d9c94e7806cf865b0dee425ac2bbd018ce63.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/eb1e964c50c5214b1c28677e4e428049dd56c58ee4a8e765355659d4ef30328e.jpg&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-06-03T20:28:51Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp4vuf5fkef5g0p2sy992a0wjyz489yqyjc6mwx9fgz2v53p6yjfczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz4mxyyt</id>
    
      <title>Nostr event nevent1qqsp4vuf5fkef5g0p2sy992a0wjyz489yqyjc6mwx9fgz2v53p6yjfczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz4mxyyt</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp4vuf5fkef5g0p2sy992a0wjyz489yqyjc6mwx9fgz2v53p6yjfczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz4mxyyt" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/074c42b10935c3d0cca8dea1015792b0dbe871bdfbff1331d1bcd8b9468dce8e.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/7d8f4ffce9aa95041c2af9a3ab9893f58df794f53d9cf871d0df1c00e6fa70b6.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/c286e891a2cba62c8c4824a105c18353ed1213d7bf080fb3fae36ef1fc982254.jpg&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-06-03T19:33:15Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs99hannu3eelefnm4jdzdqgf8l84qmpyjjdl20q4hejmdec78ultgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzsjcle6</id>
    
      <title>Nostr event nevent1qqs99hannu3eelefnm4jdzdqgf8l84qmpyjjdl20q4hejmdec78ultgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzsjcle6</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs99hannu3eelefnm4jdzdqgf8l84qmpyjjdl20q4hejmdec78ultgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzsjcle6" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/15b5ffb01a0eda62d13a03b9e8ce3749fcbb1dba1e853c24dde6230543a837a2.jpg&#34;&gt; 
    </content>
    <updated>2026-06-03T19:22:58Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszsudley29uwkp7j3634p9n7y5j3ld7nfruuxm6sewmgz3q0gw4egzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzujart6</id>
    
      <title>Nostr event nevent1qqszsudley29uwkp7j3634p9n7y5j3ld7nfruuxm6sewmgz3q0gw4egzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzujart6</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszsudley29uwkp7j3634p9n7y5j3ld7nfruuxm6sewmgz3q0gw4egzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzujart6" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/7b81647357b248f87a11f462a2481d38aaab8bcce80985b9f5f0830fbd59a785.jpg&#34;&gt; 
    </content>
    <updated>2026-06-03T11:41:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsruun6nlwfw7z3kyrunvtn8qekfta2c07cf45fnhl38mam4gpkvpczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzdh42fj</id>
    
      <title>Nostr event nevent1qqsruun6nlwfw7z3kyrunvtn8qekfta2c07cf45fnhl38mam4gpkvpczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzdh42fj</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsruun6nlwfw7z3kyrunvtn8qekfta2c07cf45fnhl38mam4gpkvpczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzdh42fj" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/8841230ae76b17e3382fb20afd348105068e2182f72a54ff23b0bcfa53a98a9b.jpg&#34;&gt; 
    </content>
    <updated>2026-06-03T11:40:43Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0w9wmrgrvn8g93xn2sh54w62j2xygqjuk255lmnatkjkmhhkg2uczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzlh2w2x</id>
    
      <title>Nostr event nevent1qqs0w9wmrgrvn8g93xn2sh54w62j2xygqjuk255lmnatkjkmhhkg2uczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzlh2w2x</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0w9wmrgrvn8g93xn2sh54w62j2xygqjuk255lmnatkjkmhhkg2uczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzlh2w2x" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/82b84991910d53da3d7972f64be53eae4e2784f9b348c158be7ac795d65a48b0.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/4d2fdba261cf2147e7997586af9cc155b7023719387d3fb43428039a2a4683f1.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/8d39fc13b503232e354d08fc7f6c47f33e5a5b8bbbbf2625e8fea14252fa134d.jpg&#34;&gt;  
    </content>
    <updated>2026-05-30T08:21:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszza348jl3jaejpgu65fw0t39edtsm4nnwcqq6kaph9hz4kaqzehszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzztul4s7</id>
    
      <title>Nostr event nevent1qqszza348jl3jaejpgu65fw0t39edtsm4nnwcqq6kaph9hz4kaqzehszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzztul4s7</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszza348jl3jaejpgu65fw0t39edtsm4nnwcqq6kaph9hz4kaqzehszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzztul4s7" />
    <content type="html">
        &lt;img src=&#34;https://blossom.primal.net/12a44d2b2a0ff040d9e42628e618ca252c551eaaa7a2cc86a433f77b34e6d24c.jpg&#34;&gt;  &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/190f93e30b5ee36ce532d2fc7fdbc4cb98f186e3fb6a45bd8ab05a1dd231cb52.jpg&#34;&gt;  
    </content>
    <updated>2026-05-30T08:18:43Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstfgvyd0wkantwttrdyhwajwtlqqn4h5245lafmvyqfn05f26xfeqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvc4sux</id>
    
      <title>Nostr event nevent1qqstfgvyd0wkantwttrdyhwajwtlqqn4h5245lafmvyqfn05f26xfeqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvc4sux</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstfgvyd0wkantwttrdyhwajwtlqqn4h5245lafmvyqfn05f26xfeqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzvc4sux" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/04042b39934240dcaf14d414be012c5a2ff35b0b07bc532bc76dc1273b20ac51.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/45cf8c26c27c6af64adec77ecaf35f559a11b3a46eaf5ca1242d4debd96cd518.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/fe58018b93791e32f2c679592f84a704c0e0afa370371749e5216896fb585548.jpg&#34;&gt;  
    </content>
    <updated>2026-05-30T08:14:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9rtkffywje35acwsdeycgdjfn4qxw0r0mzyaul2rlkkj825flw7czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzcanh9p</id>
    
      <title>Nostr event nevent1qqs9rtkffywje35acwsdeycgdjfn4qxw0r0mzyaul2rlkkj825flw7czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzcanh9p</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9rtkffywje35acwsdeycgdjfn4qxw0r0mzyaul2rlkkj825flw7czyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzcanh9p" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/bd02700077379c9bcabf7628e74e32a739ceec3e56e7f15ee231e29e278ee6e0.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/6dcdc8e4fb26b9c3d94e31fe6466ec564fcc8742345b4368223e779b9366f7ef.jpg&#34;&gt; 
    </content>
    <updated>2026-05-29T15:42:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswejljkrz74kjqz5l6hf5paulzqfyzx565phywtvclg0quvw822zszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzhdufkp</id>
    
      <title>Nostr event nevent1qqswejljkrz74kjqz5l6hf5paulzqfyzx565phywtvclg0quvw822zszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzhdufkp</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswejljkrz74kjqz5l6hf5paulzqfyzx565phywtvclg0quvw822zszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzhdufkp" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/20a034d07a938a466bd54de269eb95ed94e9b71618495d1afab92e62b066a4b2.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/1cf9ccdf2ddca5f9c77f1ed66858b17a1fb84bcea3e52d1f2951104518350258.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/eb1ab3e53ea18e8bcb31e84413699a048f534e553b1dff7799fff0c244628d18.jpg&#34;&gt;  
    </content>
    <updated>2026-05-29T15:00:58Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfkzdk75y37ku5e7tc22duxvpg080k6pg48jh0jkd8ca5zpuagvsgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzgv3uut</id>
    
      <title>Nostr event nevent1qqsfkzdk75y37ku5e7tc22duxvpg080k6pg48jh0jkd8ca5zpuagvsgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzgv3uut</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfkzdk75y37ku5e7tc22duxvpg080k6pg48jh0jkd8ca5zpuagvsgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzgv3uut" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/2ff7a27ae3bf76a9e0cadad0b756ce22f3e2e803754619e95ce3dd3c36cd8a56.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/914fb92f80f2b8fff640bc14637d19f8010400ffe8ee1b6b059e8b09ef221395.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/ff91a94a4c293bea35925d4d7bf4d3f59705b78fb6a4782434ec95fd79c50ba4.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/76cbed5abddc46b641af51f526776670ec90100d0505049622b96dd4ae418b30.jpg&#34;&gt; 
    </content>
    <updated>2026-05-29T15:00:05Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqvl755jjtxpugtllchyzasvd23pumeg3wjhktc80d3wgt9xrxqfszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz3ce48p</id>
    
      <title>Nostr event nevent1qqsqvl755jjtxpugtllchyzasvd23pumeg3wjhktc80d3wgt9xrxqfszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz3ce48p</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqvl755jjtxpugtllchyzasvd23pumeg3wjhktc80d3wgt9xrxqfszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz3ce48p" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/2607d3dd41fc51738d938333ae28912a4ddec4bcaf06a9df158b13344f6b807f.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/3e8a293a213a7617be44d958fe1741ae248f8808f769cb4d6564b1aa8260045f.jpg&#34;&gt;  
    </content>
    <updated>2026-05-29T14:01:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvhrsk9v9k3d63qw7s02hv3crcsvz4t5fk7qlpc9yss6tx9kxwdcczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzx2lcqa</id>
    
      <title>Nostr event nevent1qqsvhrsk9v9k3d63qw7s02hv3crcsvz4t5fk7qlpc9yss6tx9kxwdcczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzx2lcqa</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvhrsk9v9k3d63qw7s02hv3crcsvz4t5fk7qlpc9yss6tx9kxwdcczyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzx2lcqa" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/c5d578345dc808499cd76ddad68d1f5335fc7464a250975887f46004de9c763f.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/f7ca13689ad0862c511eefdabfe3fd73eef80557e8858fae5594ee013129dc8c.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/a234f2d326606a5f9b600d6d8340a2b7c93312cd287ae738cca9a302751374a8.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/e69fb8de624a950bce0acbc56719d11961190d20e0d2d0ce3bddcf8beb81d7ac.jpg&#34;&gt; 
    </content>
    <updated>2026-05-29T12:59:56Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgggd77wzdv3xdwn5mc8kn3ycgjztm58zhk6epkevlaku609035yqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz20h2hn</id>
    
      <title>Nostr event nevent1qqsgggd77wzdv3xdwn5mc8kn3ycgjztm58zhk6epkevlaku609035yqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz20h2hn</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgggd77wzdv3xdwn5mc8kn3ycgjztm58zhk6epkevlaku609035yqzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz20h2hn" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/1c9a92951dde17677853d2ad81fdb294f3b1ac1a33b18388681ecf121eded9c7.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/0e25216a7d29675f0aa860f4a7b21b9c5b02f96cf6c683875f9804d3f3d649b8.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/fbd15d6e92b0e967a0ab88b0faad0871a4f8f727bcde921096d9ee8acb0e00f7.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/e9ba17e066f938ad592abf42834e9a1cd2131fda19127b084524c7bdd60e2490.jpg&#34;&gt;  
    </content>
    <updated>2026-05-29T12:48:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfdwucz4jl9gs646xrutyeyc5lhzypg8y8500mgyr2ydwlq23pq5qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzth6cgr</id>
    
      <title>Nostr event nevent1qqsfdwucz4jl9gs646xrutyeyc5lhzypg8y8500mgyr2ydwlq23pq5qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzth6cgr</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfdwucz4jl9gs646xrutyeyc5lhzypg8y8500mgyr2ydwlq23pq5qzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzth6cgr" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/e3efe0671ff62134a57bdf07398bc82dfe5d15f171ce6d5d563a001bd131e63d.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/59f200ca472a6772e321a1140d0242756325e00b19e3bca6b343e8a311f8d953.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/b8e35b683be92f20f868517fcddbd018d5007f4cfc882ebafd313597269ed658.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/cf6dfe97685f3873b4ab08824410f1cf388e37998b31fa91c7cef6547d2e2d08.jpg&#34;&gt;  
    </content>
    <updated>2026-05-29T12:11:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs044858kueykxmvz3zrgc7g9gt0ts2fqqepjkl0ap35gkcekfy0qgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzwl6qkz</id>
    
      <title>Nostr event nevent1qqs044858kueykxmvz3zrgc7g9gt0ts2fqqepjkl0ap35gkcekfy0qgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzwl6qkz</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs044858kueykxmvz3zrgc7g9gt0ts2fqqepjkl0ap35gkcekfy0qgzyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzzwl6qkz" />
    <content type="html">
       &lt;img src=&#34;https://blossom.primal.net/22da46eba8af1b709caf7b21b189f42fadf01b88f4e5b94333d9a06c6a4d1a22.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/e627b5964a9103990f6eb19a2582dd1673f9f64f54e14c4bfe42b5a9e8037304.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/4b9ce7ec83083c4ef50ff4cb6fd613869fa0b3a2fbe9ce76c32170693dd33a60.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/3a29109e837b27775acd8201fb2f6ff04c9f57fba0c048cd44ab8bc933b0b021.jpg&#34;&gt;  
    </content>
    <updated>2026-05-29T12:03:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyyp4p5nd8cwl6h0pzuyjvnaj6nnd7twrtm3ex0hm73u8tukgqtwszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz39t002</id>
    
      <title>Nostr event nevent1qqsyyp4p5nd8cwl6h0pzuyjvnaj6nnd7twrtm3ex0hm73u8tukgqtwszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz39t002</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyyp4p5nd8cwl6h0pzuyjvnaj6nnd7twrtm3ex0hm73u8tukgqtwszyz5zuqcnnhr20qjyx63d5p4k30unngulmv93m8lpxyys9lyayexzz39t002" />
    <content type="html">
        &lt;img src=&#34;https://blossom.primal.net/6c535b0b1f007440fa1fab10578973580fd27576d45ddc021067aaf74c4435d6.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/d9dc9fdfef64846a2dec7086fe290669de7508605f798c8f77a126220b9e79b0.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/0516b0e0d86c9ba302d570b7622256424ad4789db9d6776ccf7c67e36fb5645c.jpg&#34;&gt; &lt;br/&gt; &lt;img src=&#34;https://blossom.primal.net/2f02b3cd5dc2c271487de964dce9d038960422b4cab07da1b319d4d6f26308ea.jpg&#34;&gt;  
    </content>
    <updated>2026-05-29T11:39:15Z</updated>
  </entry>

</feed>