OK
https://nostr.com/
Mozambique
Country
Network
August 01, 2025, 02:35 AM UTC
Date & Time
Websites
Websites
Runtime: 899ms
On August 01, 2025, 02:35 AM UTC, https://nostr.com/ was accessible when tested on AS25139 in Mozambique.

Failures

HTTP Experiment
null
DNS Experiment
null
Control
null

DNS Queries

Resolver:
197.249.0.241
Query:
IN A nostr.com
Engine:
system
Name
Class
TTL
Type
DATA
@
IN
A
104.21.48.1
@
IN
A
104.21.16.1
@
IN
A
104.21.80.1
@
IN
A
104.21.32.1
@
IN
A
104.21.64.1
@
IN
A
104.21.112.1
@
IN
A
104.21.96.1
Query:
IN AAAA nostr.com
Engine:
system
Name
Class
TTL
Type
DATA
@
IN
AAAA
2606:4700:3030::6815:4001
@
IN
AAAA
2606:4700:3030::6815:7001
@
IN
AAAA
2606:4700:3030::6815:1001
@
IN
AAAA
2606:4700:3030::6815:3001
@
IN
AAAA
2606:4700:3030::6815:5001
@
IN
AAAA
2606:4700:3030::6815:2001
@
IN
AAAA
2606:4700:3030::6815:6001

TCP Connections

Connection to 104.21.16.1:443 succeeded.
Connection to 104.21.112.1:443 succeeded.
Connection to 104.21.32.1:443 succeeded.
Connection to 104.21.64.1:443 succeeded.
Connection to 104.21.48.1:443 succeeded.
Connection to 2606:4700:3030::6815:1001:443 was blocked.
Connection to 2606:4700:3030::6815:2001:443 was blocked.
Connection to 2606:4700:3030::6815:3001:443 was blocked.
Connection to 2606:4700:3030::6815:4001:443 was blocked.
Connection to 2606:4700:3030::6815:5001:443 was blocked.
Connection to 2606:4700:3030::6815:6001:443 was blocked.
Connection to 2606:4700:3030::6815:7001:443 was blocked.
Connection to 104.21.80.1:443 succeeded.
Connection to 104.21.96.1:443 succeeded.

HTTP Requests

URL
GET https://nostr.com/
Response Headers
Access-Control-Allow-Credentials:
true
Access-Control-Allow-Origin:
https://nostr.com
Alt-Svc:
h3=":443"; ma=86400
Cache-Control:
public, max-age=0, must-revalidate
Cf-Cache-Status:
DYNAMIC
Cf-Ray:
9681f1ddb9cb73a2-JNB
Content-Type:
text/html; charset=utf-8
Date:
Fri, 01 Aug 2025 02:35:54 GMT
Nel:
{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Referrer-Policy:
strict-origin-when-cross-origin
Report-To:
{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=zeRx%2Be3YK9lih7WgpYxXSyWBlxTDXOqTFMLyv4Hv4K3Jkf3o2nBUldeB1NCLuHpJrkDw62WyP5LNeg52spKQchBTPZQpJ8r1rjhM%2Bkc%3D"}]}
Server:
cloudflare
Server-Timing:
cfCacheStatus;desc="DYNAMIC"
Vary:
accept-encoding
X-Content-Type-Options:
nosniff
Response Body
<!doctype html>
<html lang="en" x-data="darkMode()" :class="isDark ? 'dark' : ''">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Nostr - Notes and Other Stuff Transmitted by Relays</title>
    <!---->

    <!-- for production -->
    <link href="/main.css" rel="stylesheet" />

    <!-- for development -->
    <link href="/src/base.css" rel="stylesheet" />

    <!---->
    <link
      href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined"
      rel="stylesheet"
    />
    <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
  </head>
  <body
    class="font-sans bg-background-light dark:bg-dotcom-dark text-primary dark:text-white"
    x-data="modalToggler()"
  >
    <!-- Header -->
    <header class="border-b">
      <div class="max-w-7xl mx-auto flex justify-between items-center px-4 py-4">
        <div class="text-xl font-bold tracking-tight">
          <span class="text-primary dark:text-white">nostr</span>
        </div>
        <nav class="flex gap-6 text-sm text-primary dark:text-white">
          <a href="#/.com-services" class="text-dotcom-light brightness-[80%] font-semibold"
            >Support</a
          >
          <a href="https://nostrapps.com/" target="_blank">Apps</a>
          <a href="https://nostr.band" target="_blank" class="hidden md:block">Explore</a>
          <a href="https://github.com/nostr-protocol/nips" target="_blank" class="hidden md:block"
            >Spec</a
          >
          <button
            @click="toggle()"
            aria-label="Toggle dark mode"
            class="cursor-pointer ml-4 text-2xl transition material-symbols-outlined"
            x-text="isDark ? 'light_mode' : 'dark_mode'"
          ></button>
        </nav>
      </div>
    </header>

    <!-- Hero -->
    <section class="text-center py-20 px-6">
      <h1
        class="mt-4 text-4xl md:text-6xl lg:text-7xl font-bold max-w-5xl mx-auto mb-6 scroll-reveal-slow"
      >
        An open protocol with a chance of working
      </h1>
      <p
        class="text-base md:text-lg max-w-4xl mx-auto text-primary-lighter dark:text-gray-300 mb-8 scroll-reveal"
      >
        Nostr is an apolitical communication commons. A simple standard that defines a scalable
        architecture of clients and servers that can be used to spread information freely. Not
        controlled by any corporation or government, anyone can build on Nostr and anyone can use
        it.
        <img
          src="/robots/nostr-robot.png"
          alt="Friendly robot"
          class="hidden md:block fixed top-12 right-[-70px] w-20 md:w-28 z-1"
        />
      </p>
      <div class="flex flex-col sm:flex-row justify-center gap-4 scroll-reveal">
        <button
          @click="showModal()"
          class="cursor-pointer inline-flex items-center mx-auto sm:mx-0 max-w-lg bg-secondary dark:bg-dotcom-light text-white dark:text-dotcom-dark font-medium px-8 md:px-6 py-2.5 rounded-full text-sm transition hover:opacity-90"
        >
          Join Nostr
          <span class="ml-1 text-lg">›</span>
        </button>
        <a
          href="https://www.youtube.com/watch?v=Tbt3jL1Ms0w"
          target="_blank"
          class="cursor-pointer inline-flex items-center mx-auto sm:mx-0 max-w-lg border border-secondary dark:border-dotcom-light text-primary dark:text-white font-medium px-8 md:px-6 py-2.5 rounded-full text-sm transition hover:bg-grayish dark:hover:bg-gray-700"
        >
          Watch a presentation
          <span class="ml-1 text-lg">›</span>
        </a>
      </div>
    </section>

    <!-- Screenshots -->
    <section
      class="screenshots-container px-4 mb-20 px-16 sm:px-4 h-140 sm:h-180 overflow-hidden mx-4 xs:mx-8 sm:mx-auto max-w-xl sm:max-w-3xl md:max-w-5xl relative scroll-reveal-stagger"
    >
      <!-- Terminal Mock -->
      <div
        title="the `nak` CLI tool"
        class="hidden md:block max-w-4xl max-h-60 absolute left-5 top-85 bg-primary-lighter dark:bg-gray-800 rounded-xl border shadow-lg overflow-hidden transition duration-500 opacity-70 hover:opacity-100 hover:z-20"
      >
        <div class="text-sm font-mono text-gray-200 p-4 break-all leading-snug">
          <span class="font-semibold text-green-700">~</span><span class="font-semibold">></span>
          <a class="text-teal-500" href="https://github.com/fiatjaf/nak" target="_blank">nak</a>
          <span class="text-purple-300"
            >event --sec 7465 -c
            <span class="text-yellow-500">'this is going to work'</span> nostr.wine relay.damus.io
            nostr.mom</span
          ><br />
          <span class="font-semibold text-green-400">nostr.wine</span>... ok.<br />
          <span class="font-semibold text-green-400">relay.damus.io</span>... ok.<br />
          <span class="font-semibold text-green-400">nostr.mom</span>... ok.<br />
          {"kind":1,"id":"b9fead6eef87d8400cbc1a5621400b360438affb9760a6a043cc0bddea21dab6","pubkey":"82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2","created_at":1676161639,"tags":[],"content":"this
          is going to
          work","sig":"76d19889a803236165a290fa8f3cf5365af8977ee1e002afcfd37063d1355fc755d0293d27ba0ec1c2468acfaf95b7e950e57df275bb32d7a4a3136f8862d2b7"}<br />
          publishing to <span class="font-semibold text-green-400">relay.damus.io</span>...
          success.<br />
          publishing to <span class="font-semibold text-red-400">nostr.wine</span>... msg:
          restricted: not an active paid member<br />
          publishing to <span class="font-semibold text-green-400">nostr.mom</span>... success.<br />
        </div>
      </div>

      <!-- Screenshot -->
      <img
        class="hidden sm:block max-w-2xl md:max-w-3xl absolute left-0 top-5 rounded-xl shadow-lg transition duration-500 opacity-90 hover:opacity-100 hover:z-20 cursor-pointer"
        @click="window.open('https://coracle.social')"
        src="/screenshots/coracle.png"
        title="the Coracle client"
      />

      <!-- iframe -->
      <div
        class="absolute left-10 top-25 transition duration-500 opacity-90 hover:opacity-100 hover:z-20"
        x-data="{url: 'https://chachi.chat/relay/wss%3A%2F%2F' + (Math.random() < 0.3 ? 'yabu.me' : 'nostr.wine') + '/feed'}"
      >
        <iframe
          class="hidden sm:block w-xl md:w-2xl h-130 rounded-xl shadow-lg"
          src=""
          :src="url"
          title="the chachi client"
        >
        </iframe>
        <a
          :href="url"
          target="_blank"
          class="absolute top-0 left-0 right-0 h-10 z-10 cursor-pointer"
          title="Open Chachi client"
          aria-label="Open Chachi client"
        ></a>
        <a
          :href="url"
          target="_blank"
          class="absolute top-0 left-0 bottom-0 w-10 z-10 cursor-pointer"
          title="Open Chachi client"
          aria-label="Open Chachi client"
        ></a>
        <a
          :href="url"
          target="_blank"
          class="absolute top-0 right-0 bottom-0 w-10 z-10 cursor-pointer"
          title="Open Chachi client"
          aria-label="Open Chachi client"
        ></a>
      </div>

      <!-- iframe -->
      <div
        class="absolute left-20 top-45 transition duration-500 opacity-90 hover:opacity-100 hover:z-20"
        x-data="{url: 'https://jumble.social/?r=' + (Math.random() < 0.5 ? Math.random() < 0.5 ? 'relays.land/spatianostra' : 'nostr.land' : 'pyramid.fiatjaf.com')}"
      >
        <iframe
          class="hidden sm:block w-xl md:w-3xl h-[630px] rounded-xl shadow-lg transition duration-500 opacity-90 hover:opacity-100 hover:z-20"
          :src="url"
          title="the Jumble client"
        >
        </iframe>
        <a
          :href="url"
          target="_blank"
          class="absolute top-0 left-0 right-0 h-10 z-10 cursor-pointer"
          title="Open Jumble client"
          aria-label="Open Jumble client"
        ></a>
        <a
          :href="url"
          target="_blank"
          class="absolute top-0 left-0 bottom-0 w-10 z-10 cursor-pointer"
          title="Open Jumble client"
          aria-label="Open Jumble client"
        ></a>
        <a
          :href="url"
          target="_blank"
          class="absolute top-0 right-0 bottom-0 w-10 z-10 cursor-pointer"
          title="Open Jumble client"
          aria-label="Open Jumble client"
        ></a>
      </div>

      <!-- Screenshot -->
      <img
        class="h-120 absolute right-0 top-0 rounded-xl transition duration-500 opacity-90 hover:opacity-100 hover:z-20 cursor-pointer"
        @click="window.open('https://www.amethyst.social/')"
        src="/screenshots/amethyst.png"
        title="the Amethyst client"
      />

      <!-- Screenshot -->
      <img
        class="h-120 absolute right-20 top-10 rounded-xl transition duration-500 opacity-90 hover:opacity-100 hover:z-20"
        @click="window.open('https://yakihonne.com/yakihonne-mobile-app')"
        src="/screenshots/yakihonne2.png"
        title="the Yakihonne client"
      />

      <!-- Screenshot -->
      <img
        class="h-120 absolute right-40 top-20 rounded-xl transition duration-500 opacity-90 hover:opacity-100 hover:z-20"
        @click="window.open('https://nostur.com/')"
        src="/screenshots/nostur.png"
        title="the Nostur client"
      />
    </section>

    <!-- Integration Subtitle -->
    <section class="mx-auto my-4 text-center mb-16 max-w-2xl scroll-reveal">
      <span
        class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3"
      >
        All Kinds of Stuff
      </span>
      <h2 class="text-2xl md:text-3xl font-bold mb-2 mx-1">
        Like the internet itself: open and chaotic
      </h2>
      <p class="text-primary-lighter dark:text-gray-300 text-base mx-4">
        Nostr embraces the chaos of the early internet—multiple kinds of data, diverse forms of user
        interaction and different clients providing their own perspectives over the same underlying
        information.
      </p>
    </section>

    <!-- Innovation Card -->
    <section class="px-6 max-w-5xl mx-auto mb-24 scroll-reveal">
      <div class="flex flex-col md:flex-row justify-between gap-8 items-center" data-swap="cards">
        <div class="flex items-start gap-3">
          <div
            class="w-8 h-8 bg-grayish dark:bg-gray-700 rounded-full flex items-center justify-center"
          >
            <span class="text-xs font-medium material-symbols-outlined">rebase</span>
          </div>
          <div>
            <h3 class="font-semibold text-lg mb-1">Many clients, many servers</h3>
            <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-md">
              The client is the app that is running on your computer or phone, the server is
              whatever is running on a cloud somewhere with a domain name. In centralized platforms
              and other protocols, one client talks to a single server. In Nostr clients connect to
              many.
            </p>
          </div>
        </div>
        <a
          href="https://newsletter.squishy.computer/p/natures-many-attempts-to-evolve-a"
          target="_blank"
          class="inline-flex items-center bg-secondary dark:bg-dotcom-light text-white dark:text-dotcom-dark font-medium px-8 md:px-4 py-2 rounded-full text-sm transition hover:opacity-90"
        >
          Learn how Nostr is different
          <span class="ml-1 text-lg">›</span>
        </a>
      </div>
    </section>

    <!-- Features Grid -->
    <section class="px-6 max-w-6xl mx-auto mb-24">
      <div class="grid md:grid-cols-3 gap-10 text-center">
        <div class="flex flex-col items-center scroll-reveal-stagger">
          <img src="/robots/gmnotes.png" class="h-52 mb-4 rounded" />
          <h3 class="font-semibold mb-2">Cryptographically signed notes</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-lg">
            Nostr's single unit of information is a cryptographically signed note, these are created
            by users in their client software and published to one or more relays.
          </p>
        </div>
        <div class="flex flex-col items-center scroll-reveal-stagger">
          <img src="/robots/client.png" class="h-52 mb-4 rounded" />
          <h3 class="font-semibold mb-2">Smart clients as user agents</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-lg">
            Clients are smart and act as agents for the users who install them. They decide which
            relays to connect to and when and what data to request according to the circumstance and
            user preferences.
          </p>
        </div>
        <div class="flex flex-col items-center scroll-reveal-stagger">
          <img src="/robots/relayflasks.png" class="h-52 mb-4 rounded" />
          <h3 class="font-semibold mb-2">Relays as distribution centres</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-lg">
            These are the servers that notes are published to and read from. They cannot change the
            contents of notes (that would invalidate the signature), but they can decide what to
            store and for how long.
          </p>
        </div>
      </div>
    </section>

    <!-- Cryptography Card -->
    <section class="md:hidden px-6 max-w-5xl mx-auto mb-24 scroll-reveal">
      <div class="flex flex-col md:flex-row justify-between gap-8 items-center" data-swap="cards">
        <div class="flex items-start gap-3">
          <div
            class="w-8 h-8 bg-grayish dark:bg-gray-700 rounded-full flex items-center justify-center"
          >
            <span class="text-xs font-medium material-symbols-outlined">signature</span>
          </div>
          <div>
            <h3 class="font-semibold text-lg mb-1">A new paradigm for communication</h3>
            <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-md">
              In Nostr, every user is represented by a secret number called a "key" and every
              message carries a digital "signature" that proves its authorship authorship and
              authenticity without the need for any authority to say so. This foundation of trust
              enables the decentralized broadcasting of information.
            </p>
          </div>
        </div>
        <a
          href="https://www.youtube.com/watch?v=GLluXpTRbqs&t=169s"
          target="_blank"
          class="inline-flex items-center bg-secondary dark:bg-dotcom-light text-white dark:text-dotcom-dark font-medium px-8 md:px-4 py-2 rounded-full text-sm transition hover:opacity-90"
        >
          Watch a human-friendly explanation
          <span class="ml-1 text-lg">›</span>
        </a>
      </div>
    </section>

    <!-- Pro-censorship Section -->
    <section class="px-6 max-w-6xl mx-auto mb-24 scroll-reveal">
      <div class="grid md:grid-cols-2 gap-10 items-center">
        <img
          :src="isDark ? '/robots/relayselection-dark.png' : '/robots/relayselection.png'"
          class="mb-4 mx-auto h-100 md:h-auto md:order-2"
        />
        <div>
          <span
            class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3"
          >
            <span class="material-symbols-outlined mr-1">shield</span> Pro-censorship
          </span>
          <h2 class="text-2xl md:text-3xl font-bold mb-4">
            The protocol is ownerless, relays are not
          </h2>
          <p class="text-primary-lighter dark:text-gray-300 mb-4 text-sm">
            Nostr doesn't subscribe to political ideals of "free speech" — it simply recognizes that
            different people have different morals and preferences and each server, being privately
            owned, can follow their own criteria for rejecting content as they please and users are
            free to choose what to read and from where.
          </p>
          <div class="flex flex-col sm:flex-row gap-4 mb-4">
            <a
              href="https://njump.me/naddr1qqfxzttkd9ekjmmw94nx7u3ddehhxarjqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7q3qjlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qxpqqqp65w0nuxzl#:~:text=Instead,%20relays%20should%20differentiate,%20both%20in%20terms%20of%20function%20and%20membership.%20In%20the%20future%20(and%20even%20now)%20there%20will%20be%20closed%20archival%20relays%20that%20scrape%20the%20network%20and%20provide%20a%20backup%20of%20user%20data%20for%20a%20fee;%20public-read,%20private-write%20relays%20that%20allow%20members%20to%20participate%20in%20an%20exclusive%20group%20with%20greater%20reach;%20private-read,%20private-write%20closed%20community%20relays;%20public%20&#34;town%20square&#34;%20relays,%20paid%20relays%20that%20provide%20indexes,%20full-text%20search,%20or%20content%20recommendations%20for%20the%20wider%20network%20(or%20a%20relevant%20subset%20of%20it);%20and%20relays%20that%20provide%20oracles%20for%20data%20external%20to%20nostr."
              class="inline-flex items-center border border-secondary dark:border-dotcom-light text-primary dark:text-white text-sm font-medium px-8 md:px-4 py-2 rounded-full transition hover:bg-grayish dark:hover:bg-gray-700"
              target="_blank"
            >
              Read about relay differentiation
            </a>
          </div>
          <div class="flex flex-col sm:flex-row gap-6 text-sm">
            <div class="text-xs">
              <div class="text-primary dark:text-white font-semibold flex flex-col">
                <div
                  class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2"
                >
                  handshake
                </div>
                Freedom of association
              </div>
              <p class="my-2 text-xs text-primary-lighter dark:text-gray-300">
                When the network effect is not tied to a single organization a group of users cannot
                harm others.
              </p>
              <a
                href="https://www.youtube.com/watch?v=K5oXaW1EqbE"
                class="inline-flex items-center text-primary dark:text-white font-medium"
                target="_blank"
              >
                Watch <span class="ml-1">›</span>
              </a>
            </div>
            <div class="text-xs">
              <div class="text-primary dark:text-white font-semibold flex flex-col">
                <div
                  class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2"
                >
                  landscape_2
                </div>
                Your own piece of Nostr
              </div>
              <p class="mb-2 text-xs text-primary-lighter dark:text-gray-300">
                If you are a programmer or know how to run servers it is trivial to run your own
                relay with your own rules.
              </p>
              <a
                href="https://khatru.nostr.technology"
                class="inline-flex items-center text-primary dark:text-white font-medium"
                target="_blank"
              >
                Write code <span class="ml-1">›</span>
              </a>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- Subprotocols Section -->
    <section class="px-6 max-w-6xl mx-auto mb-24 scroll-reveal">
      <div class="grid md:grid-cols-2 gap-10 items-center">
        <img
          :src="isDark ? '/robots/feed-dark.png' : '/robots/feed.png'"
          class="mx-auto h-100 md:h-auto mb-4"
        />
        <div>
          <span
            class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary dark:text-white text-xs font-medium px-3 py-1 rounded-full mb-3"
          >
            <span class="material-symbols-outlined mr-1">lightbulb_2</span> New Ideas
          </span>
          <h2 class="text-2xl md:text-3xl font-bold mb-4">Exploring the commons</h2>
          <p class="text-primary-lighter dark:text-gray-300 mb-4 text-sm">
            Besides being a natural medium for a Twitter-like microblogging social network, Nostr
            can also be used for other purposes. And not only similar things like sharing
            <i>videos</i>, longform <i>articles</i>, <i>pictures</i> or <i>voice notes</i>. There
            are initiatives on Nostr for the development of sub-protocols that power
            <b>closed groups</b>, <b>decentralized wikipedia</b>, <b>couchsurfing</b>,
            <b>marketplaces</b> or <b>web annotations</b>; as well as protocols that don't use Nostr
            for the core data but as a coordination and discovery mechanism, such as
            <b>decentralized code collaboration using git</b>, <b>file hosting</b>,
            <b>torrent sharing</b> and <b>video livestreaming</b>.
          </p>
          <a
            href="https://github.com/nostr-protocol/nips"
            target="_blank"
            class="inline-flex items-center border border-secondary dark:border-dotcom-light text-primary dark:text-white text-sm font-medium px-8 md:px-4 py-2 rounded-full transition hover:bg-grayish dark:hover:bg-gray-700"
          >
            Browse the NIPs
          </a>
        </div>
      </div>
    </section>

    <!-- Under Construction section -->
    <section class="px-6 max-w-6xl mx-auto mb-32 scroll-reveal">
      <div class="grid md:grid-cols-2 gap-10 items-center">
        <img
          :src="isDark ? '/robots/underconstruction-dark.png' : '/robots/underconstruction.png'"
          class="mx-auto h-100 md:h-auto mb-4 md:order-2"
        />
        <div>
          <span
            class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3"
          >
            <span class="material-symbols-outlined mr-1">grass</span> Ecosystem
          </span>
          <h2 class="text-2xl md:text-3xl font-bold mb-4">Still under construction</h2>
          <p class="text-primary-lighter dark:text-gray-300 mb-4 text-sm">
            Nostr is an idea with a lot of open-source software around it and a large userbase, but
            not a finished, polished product that you can buy without stress. We're still pretty
            much in the phase where new programmers and early adopters are needed to help us refine
            the protocol flows and the user experience.
          </p>
          <div class="flex flex-col sm:flex-row gap-4 mb-4">
            <a
              href="https://github.com/topics/nostr?o=desc&s=updated"
              class="inline-flex items-center border border-secondary dark:border-dotcom-light text-primary dark:text-white text-sm font-medium px-8 md:px-4 py-2 rounded-full transition hover:bg-grayish dark:hover:bg-gray-700"
              target="_blank"
            >
              List of repositories on GitHub
            </a>
          </div>

          <div class="grid sm:grid-cols-2 gap-6 text-sm">
            <div class="text-xs">
              <div class="text-primary dark:text-white font-semibold flex flex-col">
                <div
                  class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2"
                >
                  comment
                </div>
                Microblogging
              </div>
              <p class="my-2 text-xs text-primary-lighter dark:text-gray-300">
                The so-called "outbox model" is the canonical way of implementing a
                censorship-resistant client, but its parameters are fluid.
              </p>
              <a
                href="https://github.com/coracle-social/how-to-nostr/blob/master/04-relays-are-repositories.md#the-outbox-model-and-friends"
                class="inline-flex items-center text-primary dark:text-white font-medium"
                target="_blank"
              >
                Learn about it <span class="ml-1">›</span>
              </a>
            </div>

            <div class="text-xs">
              <div class="text-primary dark:text-white font-semibold flex flex-col">
                <div
                  class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2"
                >
                  hub
                </div>
                Relay-based groups
              </div>
              <p class="my-2 text-xs text-primary-lighter dark:text-gray-300">
                NIP-29 describes a way to do closed groups for forums or chat that can be very
                efficient by relying on a relay but are still censorship-resistant.
              </p>
              <a
                href="https://njump.me/naddr1qvzqqqr4gupzp978pfzrv6n9xhq5tvenl9e74pklmskh4xw6vxxyp3j8qkke3cezqqxnzde5xyersd33xscrwwfh5ekns6"
                class="inline-flex items-center text-primary dark:text-white font-medium"
                target="_blank"
              >
                Read the guide <span class="ml-1">›</span>
              </a>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- How Nostr Works -->
    <section class="px-6 max-w-6xl mx-auto mb-24 text-center scroll-reveal">
      <span
        class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3"
      >
        <span class="material-symbols-outlined mr-1">account_circle</span>
        Following
      </span>
      <h2 class="text-2xl md:text-3xl font-bold mb-2">How Nostr works</h2>
      <p class="text-primary-lighter dark:text-gray-300 max-w-xl mx-auto text-sm mb-10">
        Nostr enables true freedom by allowing users to stay connected to their audience even in
        adverse scenarios.
      </p>

      <div class="grid grid-cols-1 md:grid-cols-3 gap-6 text-left">
        <!-- Item 1 -->
        <div
          class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 md:col-span-2 scroll-reveal-stagger"
        >
          <img
            :src="isDark ? '/robots/sendmenotes-dark.png' : '/robots/sendmenotes.png'"
            class="mb-4 sm:h-70 md:h-auto block mx-auto"
          />
          <h3 class="font-semibold mb-2">User chooses their outbox relays</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300">
            Patricia publishes a special event announcing which servers she will use as her "outbox
            relay" for publishing notes. She then starts sending all her posts to these chosen
            relays, creating a predictable place where others can find her content.
          </p>
          <div class="text-sm text-primary-lighter dark:text-gray-300 mt-2">
            Because servers are interchangeable any will suffice.
          </div>
        </div>

        <!-- Item 2 -->
        <div
          class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger"
        >
          <img
            :src="isDark ? '/robots/shakeread-dark.png' : '/robots/shakeread.png'"
            class="mb-4 h-70 md:h-auto block mx-auto"
          />
          <h3 class="font-semibold mb-2">Someone starts following</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300">
            When Florian wants to read Patricia's posts, his client looks up her announcement and
            connects directly to her announced outbox relays.
          </p>
          <p class="text-sm text-primary-lighter dark:text-gray-300 mt-2">
            This targeted approach is simple and efficient.
          </p>
        </div>

        <!-- Item 3 -->
        <div
          class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger"
        >
          <img src="/robots/relays.png" class="mb-4 h-70 block mx-auto" />
          <h3 class="font-semibold mb-2">Users can switch relays when needed</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300">
            If Patricia's current relay bans her or shuts down, she can easily switch to different
            relays — perhaps some run by friends, a paid service, or her own server.
          </p>
          <p class="mt-2 text-sm text-primary-lighter dark:text-gray-300">
            She simply publishes a new announcement and continues to post without losing her
            audience.
          </p>
        </div>

        <!-- Item 4 -->
        <div
          class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger"
        >
          <img src="/robots/clients.png" class="mb-4 h-70 block mx-auto" />
          <h3 class="font-semibold mb-2">Clients track relay changes</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300">
            Florian's client continuously monitors for updates to Patricia's relay list.
          </p>
          <p class="text-sm text-primary-lighter dark:text-gray-300 mt-2">
            When she switches relays, his client eventually starts querying her new locations,
            ensuring he never misses her posts even as the network topology changes.
          </p>
        </div>

        <!-- Item 5 -->
        <div
          class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger"
        >
          <img src="/robots/collection.png" class="mb-4 h-70 block mx-auto" />
          <h3 class="font-semibold mb-2">Smart clients manage everything</h3>
          <p class="text-sm text-primary-lighter dark:text-gray-300">
            From the publisher side to the follower side clients behave smartly, keeping a local
            state and reacting to new information in order to ensure that the flow of information
            continues.
          </p>
          <p class="mt-2 text-sm text-primary-lighter dark:text-gray-300">
            After all, these notes are important, it would be sad to miss too many of them.
          </p>
        </div>
      </div>

      <div class="mt-8">
        <a
          href="https://how-nostr-works.pages.dev/#/outbox"
          target="_blank"
          class="text-sm font-medium text-primary dark:text-white inline-flex items-center"
        >
          See a visual interactive explanation <span class="ml-1">›</span>
        </a>
      </div>
    </section>

    <!-- FAQ Heading -->
    <section class="text-center px-6 mb-16 scroll-reveal">
      <span
        class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3"
      >
        <span class="material-symbols-outlined mr-1">contact_support</span>
        FAQ
      </span>
      <h2 class="text-2xl md:text-3xl font-bold mb-2">I've got some questions!</h2>
      <p class="text-primary-lighter dark:text-gray-300 text-base max-w-xl mx-auto">
        It may sound like Nostr is very good, but what about these hard issues?
      </p>
    </section>

    <!-- FAQ Items -->
    <section class="px-6 max-w-3xl mx-auto mb-32">
      <div class="space-y-4 text-sm">
        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            What is a "protocol"?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              A protocol is like a common language that multiple different software can use to talk
              to each other, it's like <b>e-mail</b>, <b>HTML</b> or <b>HTTP</b>.
            </p>
            <p>
              When we say "protocol" we mean that there is no need to use a specific app in order to
              be in Nostr: there are many apps that talk the same language and can be used (mostly)
              interchangeably — and each has its own take on how to do and display things.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            How does Nostr handle spam and unwanted content?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              In the default feed you never see any spam, because clients will only fetch
              information from people that <i>you</i> follow. In that sense no one can "push" spam
              into you.
            </p>
            <p>
              It's trickier when you want to see, for example, replies to your posts, in that case a
              client might be programmed to fetch anything that <i>claims</i> to be a reply
              <i>from anyone</i>, which might include spam.
            </p>
            <p>
              The way we can deal with it on Nostr is by restricting our area of contact with the
              spam: for example, some clients may easily decide to only display replies that come
              from people followed by people you follow. More refined strategies involve announcing
              and then only reading notes from relays known to be "safe" according to your criteria
              (could be relays that require payment, relays that do screening for humans, relays
              that only accept members of certain communities or political affiliations etc).
            </p>
            <p>
              There are no perfect solutions. But these do not exist anywhere, centralized platforms
              are also full of spam. Nostr at least isn't naïve and tries to build resiliency from
              the start.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            Will Nostr scale effectively with massive user adoption?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              Yes, Nostr is just a basic client-server architecture. And the fact that users can
              naturally spread among hundreds of different relays while clients can query dozens of
              relays that they're interested in at the same time means the network has a natural
              load balancer (which doesn't prevent a single relay from having its own internal load
              balancer either).
            </p>
            <p>
              Another (almost the opposite) concern that may be raised is with problems arising from
              clients having to connect to too many relays if the profiles being followed for
              whatever reason decide to spread way too much, but this shouldn't be a problem either
              because people tend to follow many accounts with similar content and these will tend
              to share relays. Still, if it happens, it's cheap for native apps to open many
              hundreds of WebSocket connections simultaneously (as they will be getting very few
              data in each of those). For web apps that isn't so hard, but we can still go up to a
              few hundreds without big problems. Regardless of any of that, in any complete enough
              app that wants to display a "following feed" it's already necessary to store events in
              a local database, and that will make all these issues easy to deal with as you can do
              the event requests in batches instead of all at once.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            What protections does Nostr offer against online harassment?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              Harassment is similar to spam in the sense that anyone can still create the undesired
              content and publish to the relays that accept them. All the techniques mentioned in
              avoiding spam can also be applied in this case, but if we're talking about specific
              individuals with a permanent identity and not only an army of bots in this case the
              problem becomes easier, as those individuals can just be blocked by their target and
              their content will vanish. Presumably friends of such target will also block, and
              creative solutions involving shared blocklists can be created such that some people
              don't even have to click the block button directly.
            </p>
            <p>
              Other approaches involving, for example, relays with restricted read (that can emulate
              "protected account"/"only friends" features seen in centralized platforms) can further
              improve this.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            Why not just use Mastodon/Fediverse?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              There are many problems with Mastodon, mostly due to the fact that it doesn't rely on
              any cryptography. Because it cannot do the multi-master approach of Nostr due to lack
              of cryptography, identities are assumed to be "owned" by the server, which is fully
              trusted by its tenants. Mastodon server owners can do all the harm centralized
              platforms can do to their underlings, which are completely helpless in case of
              misbehavior or even in the normal case where a server owner loses their server or
              decides to shut down for whatever reason.
            </p>
            <p>
              Worse than that, for many of its purported features, such as blocking or direct
              messages, users have to also trust owners of the other servers.
            </p>
            <p>
              There are also problems with reliance on the DNS system, but we don't have to talk
              about those.
            </p>
            <p>
              The most interesting feature of Mastodon is that by its nature it creates communities
              with shared values that grow in each of its servers. Or, should I say, that should be
              a feature if it actually worked like that. In fact these are not really communities,
              but a mashup of users that may share some interests among each other, but also have
              other interests and those other interests end up polluting the supposed "community"
              with things that do not interest the other users.
            </p>
            <p>
              Nostr, on the other hand, can create real communities around relays, specifically
              because users don't have to fully belong to those relays, but can go to them only for
              some of their needs and go to other relays for other needs.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            Why not just use Bluesky/ATProto?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>Bluesky has many problems, the two most pronounced are:</p>
            <ol class="list-inside list-disc" role="list">
              <li>
                Identity centralization: all accounts belong to <b>PLC</b>, a database ran by a
                central entity that can censor at will — or, alternatively, they can belong to a DNS
                domain, which is cumbersome, also censorable, risky and is not expected to be used
                by many anyway;
              </li>
              <li>
                Data centralization: because the <code>Relay-AppView-Client</code> flow assumes only
                one canonical source of data at each step (unlike Nostr multi-master architecture)
                that source is always a server that has power to censor, shadowban, reorder data and
                so on.
              </li>
            </ol>
            <p>
              <code>Clients</code> are assumed to be dumb and trust the <code>AppView</code>, and
              here you have room for all sorts of undesired shenanigans. Then AppViews also assume
              to source their data from a single <code>Relay</code>, and here you have room for the
              same effect.
            </p>
            <p>
              You could argue that Bluesky <code>Clients</code> could become smart and start
              sourcing data from multiple <code>AppViews</code>, or from multiple Relays, or that
              the <code>AppViews</code> could rely on multiple <code>Relays</code>, or that the
              <code>Clients</code> could talk directly to the <code>PDSes</code> — and all of that
              is possible and would indeed bring solutions, but notice that if those things started
              happening Bluesky would end up becoming Nostr, except with more steps.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            Are economic incentives aligned to keep relays operational?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              Yes,
              <a
                target="_blank"
                class="underline hover:brightness-[80%]"
                href="https://njump.me/nevent1qqsxstdgkge3k9mtezv4z4lpp88p3lnqta9k0k6n8hex0a4zv62pdmqzyqalp33lewf5vdq847t6te0wvnags0gs0mu72kz8938tn24wlfze6pfalk0"
                >this clip</a
              >
              answers it well.
            </p>
            <p>
              But basically the answer is the same as the question about scale: if users can go to
              whatever relay they want we'll see relays ran by all sorts of people and entities.
              Running servers is very cheap, and a relay can run on a $5/mo server and house at
              least a few thousand users. It's not hard to imagine relays ran by communities,
              individuals who just want to be useful to others, big organizations wanting to gain
              good will with some parts of the public, but also companies, client makers, and, of
              course, dedicated entities who sell relay hosting for very cheap.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            If content is spread across multiple relays how can I be sure I'm seeing everything?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              It's not a feature of the world at large to be able to see or hear everything that is
              happening everywhere at all times. Nostr inherits that property from the world, making
              it so that you can only see what you focus your attention on (and you're allowed to
              see by the relay that hosts that information).
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            How does search work?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              It's only possible to search on what you have seen, so search engines will always have
              to crawl some parts of the network they chose to and index those to enable public
              search. The word "chose" is employed because, as we know, there can't be a "global"
              view of the network (and no one would want such a thing anyway as it would be full of
              spam), so indexers have to choose. This is not different from Google deciding what
              websites to index.
            </p>
            <p>
              On the other hand, it's surprisingly doable for clients to store all the posts from
              people you follow, or all the posts you have seen or interacted with over time (since
              it's just text, a huge amount of notes can fit in the same space that would otherwise
              be required to store a single photo, for example) then provide local search over that.
              That kind of search will be sufficient for most of the cases you would reach out for a
              search bar in a centralized platform (which is to search for things that you have seen
              before), and perhaps even more useful since it would naturally filter out all the
              unrelated garbage.
            </p>
            <p>
              Last, niche or community-oriented relays can also provide very useful search
              capabilities by just indexing the notes they have stored locally, already filtered and
              scoped to that relay's topic or cohort (imagine searching over a Discord, Slack or
              Telegram group, for example).
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            How can I discover new content from people I don't already follow if there are no
            algorithms?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              The most basic way to do that is by following the natural habits used by most
              centralized social platforms users since a long time ago: by looking at the people you
              follow and whom they're interacting with.
            </p>
            <p>
              But also it's not true that Nostr doesn't have algorithms. Nostr can have algorithms
              of all kinds: manual, automatic, AI-powered or rule-based. Some of these algorithms
              can be run entirely locally on clients (for example, surfacing posts from the times
              when you were not online, or from people that make fewer posts), while other
              algorithms can be provided by all sorts of relays, either by naturally surfacing posts
              from a community of people you don't follow or by dedicated relays that have the
              stated purpose of curating content desirable for a target audience or even by
              targeting specific users.
            </p>
          </div>
        </details>

        <!-- FAQ Item -->
        <details
          class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger"
        >
          <summary class="flex justify-between w-full font-bold cursor-pointer">
            Is Nostr related to Bitcoin?
          </summary>
          <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2">
            <p>
              Nostr uses the same cryptographic principles of Bitcoin and was kickstarted mostly by
              a community of Bitcoiners, so it has disproportionately attracted the attention of
              Bitcoiners at the start, but aside from that it doesn't have any relationship with
              Bitcoin. It doesn't depend on Bitcoin for anything and you don't have to know or have
              or care about any Bitcoin in order to use Nostr.
            </p>
            <p>
              What about "zaps"? Zaps are a standard for tipping Nostr content using Bitcoin that is
              implemented by some Nostr clients, but it's fully and completely optional and if you
              don't care about Bitcoin you don't have to bother about it.
            </p>
          </div>
        </details>
      </div>
    </section>

    <div id="/.com-services" class="-translate-y-8"></div>

    <!-- .com Services -->
    <section class="px-6 max-w-5xl mx-auto mb-24 font-lnbits rounded-xl scroll-reveal">
      <div class="rounded-xl p-10 bg-dotcom-dark/85 dark:bg-secondary/25 shadow-lg">
        <h2 class="text-xl md:text-2xl font-bold mb-6 text-dotcom-light">
          <a
            href="https://my.nostr.com/"
            target="_blank"
            class="inline-block border-dotcom-light border-b-4 hover:brightness-[150%] transition"
            >nostr.com</a
          >
          paid services
        </h2>
        <p class="text-white text-sm mb-2">
          Remember when we said Nostr didn't have any owners or organizations that controlled it?
          This is also not an official website of the protocol. It's ran by
          <a
            href="https://lnbits.com/"
            target="_blank"
            class="border-b-2 border-transparent hover:border-lnbits-light hover:brightness-[250%] transition text-lnbits-light font-bold text-lg inline-block"
            >LNbits</a
          >
          and we're proud supporters, pioneers and enthusiasts of Nostr.
        </p>
        <p class="text-white text-sm mb-6">And we're selling stuff!</p>
        <div class="flex flex-col sm:flex-row items-center gap-3">
          <a
            href="https://my.nostr.com/"
            class="bg-dotcom-light/90 text-dotcom-dark font-medium px-5 py-2 rounded-full transition hover:bg-dotcom-light"
            target="_blank"
          >
            Buy a @nostr.com username
          </a>
          <a
            href="https://shop.lnbits.com/product-category/nostr"
            class="text-sm font-medium text-dotcom-light transition hover:underline"
            target="_blank"
          >
            Shop physical tools and Nostr merch
          </a>
        </div>
      </div>
    </section>

    <!-- Quotations -->
    <section class="px-6 max-w-6xl mx-auto mb-24 scroll-reveal">
      <div class="text-center mb-12">
        <span
          class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary dark:text-white text-xs font-medium px-3 py-1 rounded-full mb-3"
        >
          <span class="material-symbols-outlined mr-1">speaker_notes</span>
          Opinion
        </span>
        <h2 class="text-2xl md:text-3xl font-bold mb-2">What people are saying</h2>
        <p class="text-primary-lighter dark:text-gray-300 text-base max-w-xl mx-auto">
          Quotes from those who know better and decided to like Nostr.
        </p>
      </div>

      <div class="grid md:grid-cols-3 gap-8">
        <div
          class="rounded-xl p-6 shadow-lg border-l-4 border-secondary dark:border-dotcom-light flex flex-col justify-between bg-white dark:bg-primary-lighter scroll-reveal-stagger"
        >
          <div class="text-4xl text-secondary dark:text-dotcom-light mb-4">"</div>
          <blockquote class="text-primary-lighter dark:text-gray-300 leading-relaxed mb-4">
            No one owns Nostr, no one can own Nostr, it's an open-source protocol. No one can build
            a fence to stop the flow of information.
          </blockquote>
          <cite class="text-xs text-grayish dark:text-gray-400 font-medium">
            —
            <a
              href="https://www.youtube.com/watch?v=MaxXvcr181c"
              target="_blank"
              class="text-secondary dark:text-dotcom-light hover:underline"
              >Uncle Bob</a
            >
          </cite>
        </div>

        <div
          class="rounded-xl p-6 shadow-lg border-l-4 border-secondary dark:border-dotcom-light flex flex-col justify-between bg-white dark:bg-primary-lighter scroll-reveal-stagger"
        >
          <div class="text-4xl text-secondary dark:text-dotcom-light mb-4">"</div>
          <blockquote class="text-primary-lighter dark:text-gray-300 leading-relaxed mb-4">
            Nostr is an open protocol.
            <div class="mt-2">
              If a platform is a silo, a protocol is a river: no one owns it, and everyone is free
              to swim.
            </div>
          </blockquote>
          <cite class="text-xs text-grayish dark:text-gray-400 font-medium">
            —
            <a
              href="https://x.com/Snowden/status/1620789340199882752"
              target="_blank"
              class="text-secondary dark:text-dotcom-light hover:underline"
              >Edward Snowden</a
            >
          </cite>
        </div>

        <div
          class="rounded-xl p-6 shadow-lg border-l-4 border-secondary dark:border-dotcom-light flex flex-col justify-between bg-white dark:bg-primary-lighter scroll-reveal-stagger"
        >
          <div class="text-4xl text-secondary dark:text-dotcom-light mb-4">"</div>
          <blockquote class="text-primary-lighter dark:text-gray-300 leading-relaxed mb-4">
            I want to claim that Nostr has discovered a new fundamental architecture for distributed
            protocols. Not federated, not P2P.
          </blockquote>
          <cite class="text-xs text-grayish dark:text-gray-400 font-medium">
            —
            <a
              href="https://newsletter.squishy.computer/p/natures-many-attempts-to-evolve-a"
              target="_blank"
              class="text-secondary dark:text-dotcom-light hover:underline"
              >Gordon Brander</a
            >
          </cite>
        </div>
      </div>
    </section>

    <!-- Footer -->
    <footer class="px-6 max-w-6xl mx-auto mt-20 text-sm text-primary-lighter dark:text-gray-300">
      <div class="flex justify-between gap-10 mb-10 mx-4">
        <div>
          <span class="font-bold text-primary dark:text-white text-xl">nostr</span>
        </div>
        <div>
          <h4 class="text-primary dark:text-white font-semibold mb-2">Resources</h4>
          <ul class="space-y-1">
            <li>
              <a @click="showModal()" class="cursor-pointer hover:underline"></a>
            </li>
            <li>
              <a target="_blank" href="https://nostrapps.com" class="hover:underline"
                >Apps Directory</a
              >
            </li>
            <li>
              <a
                target="_blank"
                href="https://github.com/coracle-social/how-to-nostr/tree/master"
                class="hover:underline"
                >The Book</a
              >
            </li>
          </ul>
        </div>
      </div>

      <div
        class="border-t border-secondary dark:border-dotcom-light py-2 flex justify-between items-center text-xs"
      >
        <p>
          Made with <span class="text-red-500">❤️</span> by the
          <a
            href="https://lnbits.com/"
            target="_blank"
            class="hover:underline text-lnbits-dark dark:text-lnbits-light dark:font-semibold"
            >LNbits</a
          >
          team.
        </p>
        <div class="flex space-x-4 mt-2 md:mt-0">
          <a
            href="https://npub.world/npub10efcj7x65z2ak6vd69xr8f2hvqwuaqrhlygl3yqa4y63hfvc02mqwzaeh3"
            target="_blank"
            class="hover:font-bold hover:text-lnbits-dark material-symbols-outlined"
            >raven</a
          >
        </div>
      </div>
    </footer>

    <script>
      // scroll reveal animation
      document.addEventListener("DOMContentLoaded", initScrollReveal)
      function initScrollReveal() {
        const observerOptions = {
          threshold: 0.1,
          rootMargin: "0px 0px -50px 0px"
        }

        const observer = new IntersectionObserver(entries => {
          entries.forEach(entry => {
            if (entry.isIntersecting) {
              entry.target.classList.add("revealed")
            }
          })
        }, observerOptions)

        // observe all elements with scroll reveal classes
        document
          .querySelectorAll(".scroll-reveal, .scroll-reveal-slow, .scroll-reveal-stagger")
          .forEach(el => {
            observer.observe(el)
          })
      }
    </script>

    <script>
      // swap elements that have the same data-swap attribute, with 50% chance
      const swappers = {}
      document.querySelectorAll("[data-swap]").forEach(el => {
        let id = el.dataset.swap

        if (swappers[id]) {
          if (Math.random() < 0.5) {
            const parent1 = swappers[id].parentNode
            el.parentNode.appendChild(swappers[id])
            parent1.appendChild(el)
          }
          delete swappers[id]
        } else {
          swappers[id] = el
        }
      })
    </script>

    <script>
      function darkMode() {
        return {
          isDark: false,

          init() {
            const systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches
            const savedTheme = localStorage.getItem("theme")
            this.isDark = savedTheme ? savedTheme === "dark" : systemPrefersDark
          },

          toggle() {
            this.isDark = !this.isDark
            localStorage.setItem("theme", this.isDark ? "dark" : "light")
          }
        }
      }
    </script>

    <script>
      function modalToggler() {
        return {
          showingModal: false,

          async showModal() {
            this.showingModal = true
            document.body.classList.add("overflow-hidden")

            const modal = document.getElementById("modal")
            if (modal.children.length === 0) {
              const { renderModal } = await import("./main.js")
              renderModal(modal, () => {
                this.hideModal()
              })
            }
          },

          hideModal() {
            this.showingModal = false
            document.body.classList.remove("overflow-hidden")
          }
        }
      }
    </script>

    <!-- Key Generation Modal -->
    <div
      class="fixed flex items-center justify-center inset-0 w-full transition-opacity bg-grayish/80 items-center justify-center min-h-screen sm:h-fit z-40"
      x-show="showingModal"
      id="modal"
      x-transition:enter="transition ease-out duration-300"
      x-transition:enter-start="opacity-0"
      x-transition:enter-end="opacity-100"
      x-transition:leave="transition ease-in duration-200"
      x-transition:leave-start="opacity-100"
      x-transition:leave-end="opacity-0"
      @click="if ($event.target === $event.currentTarget) hideModal()"
    ></div>
  <script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fcb2a67d0a8e4c89af3e1e3492b44658","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fcb2a67d0a8e4c89af3e1e3492b44658","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>

Resolver

Resolver ASN
AS25139
Resolver IP
197.249.0.241
Resolver Network Name
TVCABO - Comunicacoes Multimedia, Lda
Report ID
20250801T023137Z_webconnectivity_MZ_25139_n1_e4UZkUnzszFm2Yj4
Platform
ios
Software Name
ooniprobe-ios-unattended (5.1.0)
Measurement Engine
ooniprobe-engine (3.26.0)

Raw Measurement Data

Loading