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.
172 lines
7.8 KiB
HTML
172 lines
7.8 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>hermes.x — message anyone by their .bch name</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.">
|
|
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
|
|
<link rel="mask-icon" href="assets/favicon.svg" color="#38BDF8">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:site_name" content="hermes.x">
|
|
<meta property="og:title" content="hermes.x — message anyone by their .bch name">
|
|
<meta property="og:description" content="End-to-end encrypted DMs over Nostr, addressed by your .bch name. No email, no phone, no server that can delete your account.">
|
|
<meta property="og:url" content="https://hermes.x/">
|
|
<meta property="og:image" content="https://hermes.x/assets/mark.svg">
|
|
<meta name="twitter:card" content="summary">
|
|
<meta name="twitter:title" content="hermes.x — message anyone by their .bch name">
|
|
<meta name="twitter:description" content="Sealed-sender DMs over Nostr, addressed by .bch name.">
|
|
<link rel="stylesheet" href="assets/shared.css">
|
|
</head>
|
|
<body>
|
|
|
|
<nav class="topnav">
|
|
<a class="brand" href="./">
|
|
<svg viewBox="0 0 64 64" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="5" 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 36 L-4 36"/></g></svg>
|
|
hermes<span class="x">.x</span>
|
|
</a>
|
|
<a href="./" class="here">Overview</a>
|
|
<a href="messenger/">Messenger</a>
|
|
<a href="branding/">Branding</a>
|
|
<a href="https://theseus.x/" class="get">Get Theseus</a>
|
|
</nav>
|
|
|
|
<header class="hero">
|
|
<div class="mark" aria-hidden="true">
|
|
<svg viewBox="0 0 64 64"><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>Message by name<span class="x">.</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.
|
|
Your name owns your key. No email, no phone number, no company, no server
|
|
that can delete your account.</p>
|
|
<div class="cta">
|
|
<a class="btn primary" href="messenger/">Open Messenger</a>
|
|
<a class="btn ghost" href="https://theseus.x/">Get Theseus (desktop)</a>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="wrap narrow">
|
|
|
|
<section class="plain">
|
|
<h2>What ships today</h2>
|
|
<p class="lede">Hermes is live inside the Theseus desktop browser. Web
|
|
messenger and Android follow.</p>
|
|
<div class="grid">
|
|
<div class="card">
|
|
<h3>Threaded chat <span class="src ok">live</span></h3>
|
|
<p>Contact list on the left (search + unread badges), selected
|
|
conversation on the right, inline reply. Enter to send.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Send by name <span class="src ok">live</span></h3>
|
|
<p>Type <code class="inline">alice.bch</code>. The client resolves the
|
|
name on-chain, wraps NIP-17 to the recipient's Nostr key, publishes
|
|
to their declared relays. Sealed-sender — the relay never sees who
|
|
sent what to whom.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Address book <span class="src ok">live</span></h3>
|
|
<p>Local contact list — add names, nicknames, import vCards. Nothing
|
|
uploaded; the book is on your device.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>History on your device <span class="src ok">live</span></h3>
|
|
<p>Messages persist to disk per identity. Close and reopen the panel —
|
|
your threads are still there, unread marks included.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Web Messenger <span class="src next">next</span></h3>
|
|
<p><a href="messenger/">hermes.x/messenger</a> — browser-side messenger
|
|
for anyone without the desktop app. Same crypto, same identity.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Mobile (Ariadne) <span class="src plan">planned</span></h3>
|
|
<p>Inside the Ariadne Android app: same wallet seed, same Nostr identity,
|
|
zero extra onboarding.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<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
|
|
Bitcoin Cash names exist to escape.</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 on the chain, publish your Nostr pubkey as an
|
|
<code class="inline">np</code> record. The key is derived from the
|
|
same wallet seed as the name, 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.</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>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.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Relays are Nostr's soft spot</h3>
|
|
<p>A message lives only while some relay keeps it. We run one relay +
|
|
write to a handful of public relays for reach and redundancy.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="plain" style="text-align:center">
|
|
<h2>Try it</h2>
|
|
<p class="lede" style="margin-left:auto;margin-right:auto">
|
|
Open the web messenger right here, or install Theseus for the full
|
|
experience (persistent history, sidebar entry, keyboard shortcut).</p>
|
|
<div class="cta">
|
|
<a class="btn primary" href="messenger/">Open Messenger</a>
|
|
<a class="btn ghost" href="https://theseus.x/">Get Theseus</a>
|
|
<a class="btn ghost" href="branding/">Brand kit</a>
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|
|
|
|
<footer>
|
|
<div>hermes.x — a <a href="https://silentmode.st/">Silent Mode</a> project.</div>
|
|
<div class="fine">Named for the messenger of the gods. Ermis in modern Greek.</div>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|