The sidebar panel used to be a launcher that opened the standalone Messages window; now it IS the messenger — signin screen with "Open with Theseus ID" (derives the Nostr key from the unlocked vault seed) or "Open an existing account" (12/24-word mnemonic fallback), then a contacts + thread view with a narrow-width single-column fallback. The ⧉ button still pops the standalone window out, so the Ctrl+Shift+E flow keeps working. - main.js: expose a global._hermesAPI with status/canUseVault/init/inbox/ send/markThreadRead/contacts* so the addon can proxy panel calls without granting it ipcRenderer or crossing the HERMES_ONLY sender gate. hermesEmit also fans out on an in-process __hermes_bus so the panel gets live inbox/status pushes decoupled from hermesWin's lifetime. - bundled-addons/hermes/index.js: proxies each allow-listed method onto global._hermesAPI, forwards bus events to api.emit for the panel. - panel.html: signin + app screens, mobile-style single column under 540px. - Mark updated to the spread-wings variant: envelope sized up (34×22), three tapered trails extending outside the viewBox so the wings don't bunch at the back of the envelope at any size. Applied to the addon icon (manifest base64), the panel header, both /hermes sites, and site-hermes-x's favicon + mark SVGs.
219 lines
11 KiB
HTML
219 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="color:var(--acid); line-height:0; display:inline-flex">
|
|
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" width="80" height="80" aria-label="Hermes">
|
|
<g fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(-20 32 32)">
|
|
<rect x="18" y="24" width="34" height="22" rx="1.5"/>
|
|
<path d="M18 25 L35 39 L52 25"/>
|
|
<path d="M18 28 L-4 24"/>
|
|
<path d="M18 36 L-6 36"/>
|
|
<path d="M18 44 L0 46"/>
|
|
</g>
|
|
</svg>
|
|
</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
|
|
<code class="inline">.bch</code> 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>
|
|
</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 & receive by name <span class="src s-chain">live</span></h3>
|
|
<p>Type <code class="inline">alice.bch</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.bch</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 <code class="inline">.bch</code> 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.bch</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>
|