site/hermes/index.html
Local Dev a67e930ea3 hermes: use the user's own mark.webp as the icon, drop the SVG attempts
User-authored artwork wins. mark.webp is the main icon; two sibling variants
(mark-wings-both.webp, mark-variant.webp) ship alongside for brand uses.

- bundled-addons/hermes/addon.json: version 0.2.2, icon/panels[0].icon are
  now data:image/webp;base64,... from the main mark.
- bundled-addons/hermes/assets/mark.webp: served by the host via the panel
  page's relative path (seedBundledAddons' fs.cpSync recursive carries it).
- bundled-addons/hermes/panel.html: both top-bar and signin inline SVGs
  become <img src="assets/mark.webp"> at 24 and 72 px.
- site/hermes/index.html: hero SVG → <img> at 120 px.
- site/hermes/branding/{index.html,mark.webp,mark-wings-both.webp,mark-variant.webp}:
  branding kit now carries the three webp files; the inline hero SVG uses
  the main one.
- site-hermes-x/{index,branding,messenger}/index.html: same SVG → <img>
  swap with the appropriate assets/ relative path.
- site-hermes-x/assets/mark{,-wings-both,-variant}.webp: sibling of the
  existing favicon.svg and mark SVGs (kept for backward refs that still
  point at them).

Legacy mark.svg + mark-stroke.svg + favicon.svg stay in place for any
external references; nothing in-repo points at them for the primary icon
slots anymore. favicons still point at the SVG files — safe to leave;
flipping those to webp is a one-liner if you want it.
2026-10-21 21:32:14 +03:00

217 lines
11 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hermes — messaging by name — Silent Mode</title>
<meta name="description" content="Hermes: end-to-end encrypted messaging where your Bitcoin Cash name is your identity. NIP-17 sealed DMs over Nostr, no email, no phone number, no company account.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Silent Mode">
<meta property="og:title" content="Hermes — messaging by name — Silent Mode">
<meta property="og:description" content="Hermes: end-to-end encrypted messaging where your Bitcoin Cash name is your identity. NIP-17 sealed DMs over Nostr, no email, no phone number, no company account.">
<meta property="og:url" content="https://silentmode.st/hermes">
<meta property="og:image" content="https://silentmode.st/brand/og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<link rel="stylesheet" href="shared.css?v=20260910">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
</head>
<body>
<nav class="topnav">
<a class="brand" href="./"><svg class="logo" viewBox="0 0 32 20" aria-hidden="true"><rect class="l1" x="1.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/><rect class="l2" x="13.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/></svg>Silent <span class="g">Mode</span></a>
<a href="theseus">Theseus</a>
<a href="prometheus">Prometheus</a>
<a href="sirius">Sirius</a>
<a href="hephaestus">Hephaestus</a>
<a href="helios">Helios</a>
<a href="hermes" class="here">Hermes</a>
<a href="tools">Tools</a>
</nav>
<header class="hero">
<div class="mark" style="line-height:0; display:inline-flex">
<img src="branding/mark.webp" alt="Hermes" width="120" height="120" style="display:block">
</div>
<h1>Hermes <span class="pill p-shipped" style="vertical-align:middle;font-size:12px;margin-left:.6rem;background:rgba(79,209,165,.12);color:#4fd1a5;padding:2px 10px;border-radius:999px">MVP · desktop</span></h1>
<p class="tag">End-to-end encrypted DMs over Nostr, addressed by your
on-chain registered name instead of a public-key string. Same wallet
is your identity — no email, no phone number, no company, no server that can delete
your account.</p>
<p class="tag" style="font-size:.95rem;margin-top:.8rem">
Lives inside <a href="theseus"><b>Theseus</b></a>: open with the Hermes icon in the
left sidebar, or <kbd style="background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:4px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:12px">Ctrl</kbd>+<kbd style="background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:4px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:12px">Shift</kbd>+<kbd style="background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:4px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:12px">E</kbd>
(E as in <i>Ermis</i>, the Greek spelling). Brand kit at
<a href="hermes/branding"><code class="inline">/hermes/branding</code></a>.
</p>
<p style="margin:1.4rem 0 0;color:var(--dim);font-size:13px">
<b style="color:var(--mut)">Hermes.X</b> is the messenger's sovereign site, served from its own on-chain name.
Mirror: <a href="/hermes-x/">silentmode.st/hermes-x/</a> ·
gateway: <a href="https://navigate.st/bns/hermes.x/">navigate.st/bns/hermes.x/</a> ·
native with a resolver: <a href="https://hermes.x/"><code class="inline">https://hermes.x/</code></a>
</p>
</header>
<div class="wrap narrow">
<section class="plain">
<h2>What ships today</h2>
<p class="lede">The desktop MVP is live inside Theseus. Core messaging works
end to end; polish and mobile follow.</p>
<div class="grid">
<div class="card">
<h3>Threaded chat <span class="src s-chain">live</span></h3>
<p>Contact list on the left (search + unread badges), selected conversation
on the right with bubbles + inline reply. Enter to send, Shift-Enter for
newline.</p>
</div>
<div class="card">
<h3>Send &amp; receive by name <span class="src s-chain">live</span></h3>
<p>Type <code class="inline">alice.x</code> — the client resolves on-chain,
wraps NIP-17, publishes to the recipient's declared relays. Sealed-sender:
the relay never sees who sent what to whom.</p>
</div>
<div class="card">
<h3>Address book <span class="src s-chain">live</span></h3>
<p>Named contacts stored locally. Optional vCard import for existing
address books — opt-in, nothing uploaded, you preview who gets added.</p>
</div>
<div class="card">
<h3>History on your device <span class="src s-chain">live</span></h3>
<p>Messages persist to disk (per identity) so close-reopen keeps your
threads. Unread marks survive restarts.</p>
</div>
<div class="card">
<h3>Mobile <span class="src s-chain">next</span></h3>
<p>Shipping inside Ariadne mobile (same wallet seed, same Nostr identity,
zero extra onboarding).</p>
</div>
<div class="card">
<h3>Tor transport <span class="src s-chain">planned</span></h3>
<p>Relay traffic over the Tor exit Theseus already runs, so even connection
IP leaves the relay.</p>
</div>
</div>
</section>
<section class="plain">
<h2>The one idea that makes this different</h2>
<p class="lede">Every existing Nostr client has the same wart: identity is
<code class="inline">npub1q8s7f3k…</code> gibberish. The human-name fix — NIP-05 —
resolves <code class="inline">alice@example.com</code> through a DNS domain and a
web server. That is exactly the ICANN + server chain Silent Mode exists to escape.
Decentralized messaging bolted onto centralized identity.</p>
<div class="note"><b>The Hermes pitch.</b><br>
<code class="inline">alice.x</code> publishes her Nostr pubkey as an on-chain
record. Her name certificate <i>is</i> her verified, seizure-resistant identity.
Message anyone by their on-chain registered name — no phone number, no
email, no ICANN, no company, no server that can delete your account.</div>
</section>
<section>
<h2>How it works</h2>
<ol class="steps">
<li><b>Your name owns your key.</b>
<span>Register any name you like on the chain (or reuse one you already own),
publish your Nostr pubkey to it as a new <code class="inline">np</code> record.
The key is derived from the same wallet seed as the name itself, so one seed
backs both.</span></li>
<li><b>Find people by name.</b>
<span>Type <code class="inline">bob.x</code>. The client resolves it against
the chain, pulls <code class="inline">np</code> (Nostr pubkey) and
<code class="inline">nr</code> (preferred relays). No directory server involved.</span></li>
<li><b>Send the message sealed.</b>
<span>NIP-17 gift-wrapped DMs — the relay sees neither sender nor content, only
that a wrap addressed to some pubkey exists. Route over Tor to also hide your
IP; Theseus already can.</span></li>
<li><b>The name shows, not the pubkey.</b>
<span>Incoming messages reverse-resolve pubkey → name where possible, so your
chat list looks like a normal chat list — not a wall of hex.</span></li>
</ol>
</section>
<section>
<h2>Where it will live</h2>
<div class="grid">
<div class="card">
<h3>In Theseus <span class="src s-chain">desktop</span></h3>
<p>A Messages panel inside the browser you already have. Routes relay traffic over
Tor. Reuses the built-in wallet's seed as the messaging identity.</p>
</div>
<div class="card">
<h3>In Ariadne mobile <span class="src s-chain">phone</span></h3>
<p>A Messages screen in the existing Android app. Same seed, same identity — you
can message from either device without a linked-account handshake.</p>
</div>
</div>
</section>
<section>
<h2>Where your history lives</h2>
<p class="lede">Three modes, one toggle. The default assumes no cloud at all — every
later option is opt-in, and none of them let anyone but you read your messages.</p>
<div class="grid">
<div class="card">
<h3>Local only <span class="src s-chain">default</span></h3>
<p>The client keeps your message history on the device. Nothing else knows it
exists. Same seed on Theseus and Ariadne gives you two-device redundancy for
free — lose one, restore from the other. Lose both, history is gone. Signal's
model, on purpose.</p>
</div>
<div class="card">
<h3>Silent Mode cloud backup <span class="src s-chain">opt-in</span></h3>
<p>Toggle on and the client encrypts your message history with a key derived
from your wallet seed, then backs it up to decentralized cloud storage on
the Sia network. Only you can read it. <b>Text messages only</b> — no
pictures, no video, no attachments.</p>
</div>
<div class="card">
<h3>Your own Sia account <span class="src s-chain">advanced</span></h3>
<p>Prefer to own the storage yourself? Hermes sets up your own Sia account
and routes your backups there instead. Same encryption from your wallet
seed — and this time media backup is on the table too.</p>
</div>
</div>
</section>
<section>
<h2>Honest boundaries</h2>
<div class="grid">
<div class="card">
<h3>Messaging, not email</h3>
<p>No Gmail interop — by design. A separate anonymous-mailbox product covers
"sign up on services without leaking a real address."</p>
</div>
<div class="card">
<h3>Metadata resistance is good, not perfect</h3>
<p>NIP-17 hides sender and content from relays. Relays still see the recipient
pubkey, timing, and your connection IP unless you route over Tor. The UI will
tell you when it's on.</p>
</div>
<div class="card">
<h3>Relays are Nostr's soft spot</h3>
<p>A message lives only while some relay keeps it. Silent Mode runs one relay on
the same anonymous VPS as the gateway, and writes to a few public relays for
reach and redundancy.</p>
</div>
</div>
</section>
<div class="note warn"><b>Status: designed, not built.</b> The full protocol design is
in <a href="https://github.com/deviant"><code class="inline">Hermes/DESIGN-hermes.md</code></a>
(mirror). Nothing to install yet — this page exists to say what is coming, and to
make it possible to ask for updates in the messaging panel of a future Theseus or
Ariadne build.</div>
</div>
<footer>
<div>Silent Mode — a Deviant project.</div>
<div class="fine">Named for the messenger of the gods. Not yet built. Contents subject
to change until the first client ships.</div>
</footer>
</body>
</html>