Hermes: Ermis shortcut (Ctrl+Shift+E), sidebar add-on, vCard import, brand kit
Shortcut: Ctrl+Shift+M -> Ctrl+Shift+E. Chrome owns Ctrl+Shift+M as
'switch profile' and E matches the Greek spelling (Ermis).
Sidebar discoverability: new bundled add-on at bundled-addons/hermes/
registers a left-strip icon + launcher panel. The panel is a thin chrome
(mark + 'Open Messages' + shortcut hint) that forwards clicks through
api.onMessage -> ipcMain.emit('hermes-open-request') -> openHermesWindow.
All real messaging code stays in main.js — add-on is purely for discovery.
Address book: opt-in vCard (.vcf) import. Dialog in the Add Contact modal
lets the user pick a file; main.js parses BEGIN:VCARD blocks for X-BNS-NAME
/ X-NOSTR-NPUB / X-NOSTR-PUBKEY plus .bch names and npubs mentioned in
NOTE fields. Candidates are previewed per-contact with checkboxes; nothing
is added until the user confirms. Non-matching vCards are returned too (so
the user can still add manually) rather than silently dropped. Nothing is
uploaded; parsing is local.
site/hermes: status badge flipped from 'designed - not yet built' to
'MVP - desktop'. New 'What ships today' grid covers threaded chat, send by
name, address book, local history (all live) and mobile + Tor (next /
planned). Hero carries the new Ctrl+Shift+E shortcut and a link to
/hermes/branding.
site/hermes/branding: new page. Mark SVG (winged envelope, two variants
for 16-20px and 24-160px display sizes), palette (reuses Silent Mode
tokens + an amber accent that's distinctly warm-yellow, not Hermes-orange
— so it never collides with Hermès the fashion house), name explanation
(English Hermes / Greek Ermis), voice notes, do/don't table, MPL-2.0
attribution.
Hermes/MOBILE-RECOMMENDATION.md: analysis of three mobile paths (inside
Ariadne / standalone / hybrid). Recommendation is Option 1: ship as a
screen inside Ariadne. Reuses the wallet seed, aligns with the design
doc's 'one seed many purposes' architecture, lowest total cost.
This commit is contained in:
parent
6d7ce365d4
commit
81082c0c4e
4 changed files with 269 additions and 1 deletions
188
hermes/branding/index.html
Normal file
188
hermes/branding/index.html
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Hermes — brand — Silent Mode</title>
|
||||
<meta name="description" content="Hermes brand kit: mark, palette, name, tone. Not Hermès the fashion house; Hermes the messenger god.">
|
||||
<link rel="stylesheet" href="../../shared.css">
|
||||
<style>
|
||||
.mark-xl{color:var(--acid); line-height:0}
|
||||
.mark-xl svg{width:160px; height:160px}
|
||||
.mark-row{display:flex; gap:28px; align-items:center; flex-wrap:wrap; margin:1rem 0 2rem}
|
||||
.mark-row .cell{display:flex; flex-direction:column; align-items:center; gap:8px; padding:16px; background:var(--panel); border:1px solid var(--line); border-radius:12px}
|
||||
.mark-row .cell small{color:var(--mut); font-size:11px}
|
||||
.mark-row .cell svg{display:block}
|
||||
.mark-16{color:var(--ink); line-height:0}
|
||||
.mark-16 svg{width:16px; height:16px}
|
||||
.mark-32{color:var(--ink); line-height:0}
|
||||
.mark-32 svg{width:32px; height:32px}
|
||||
.mark-64{color:var(--acid); line-height:0}
|
||||
.mark-64 svg{width:64px; height:64px}
|
||||
.mark-neg{color:#0a0d13; line-height:0; padding:14px 18px; border-radius:12px; background:var(--acid)}
|
||||
.mark-neg svg{width:48px; height:48px}
|
||||
|
||||
.swatches{display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:12px; margin:1rem 0 2rem}
|
||||
.sw{background:var(--panel); border:1px solid var(--line); border-radius:12px; overflow:hidden}
|
||||
.sw .block{height:70px}
|
||||
.sw .meta{padding:10px 12px; font-size:12px; color:var(--mut)}
|
||||
.sw .meta b{display:block; color:var(--ink); font-size:13px; font-weight:600; margin-bottom:2px}
|
||||
.sw .meta code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
|
||||
|
||||
.tbl{width:100%; border-collapse:collapse; margin:1rem 0 2rem; font-size:14px}
|
||||
.tbl th, .tbl td{text-align:left; padding:10px 12px; border-bottom:1px solid var(--line); vertical-align:top}
|
||||
.tbl th{color:var(--mut); font-weight:500; font-size:12px; text-transform:uppercase; letter-spacing:.4px}
|
||||
.tbl td.y{color:var(--ok)} .tbl td.n{color:var(--err)}
|
||||
|
||||
.dl-row{display:flex; gap:10px; flex-wrap:wrap; margin:1rem 0}
|
||||
.dl-row a{display:inline-flex; align-items:center; gap:8px; text-decoration:none; padding:10px 14px; border-radius:999px; background:var(--panel); color:var(--ink); border:1px solid var(--line); font-size:13px}
|
||||
.dl-row a:hover{background:var(--panel2); border-color:var(--line2)}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="topnav">
|
||||
<a class="brand" href="../../">⛓️ Silent <span class="g">Mode</span></a>
|
||||
<a href="../../tools/">Tools</a>
|
||||
<a href="../../prometheus/">Prometheus</a>
|
||||
<a href="../../sirius/">Sirius.X</a>
|
||||
<a href="../../helios/">Helios</a>
|
||||
<a href="../" class="here">Hermes</a>
|
||||
</nav>
|
||||
|
||||
<header class="hero">
|
||||
<div class="mark mark-xl" aria-hidden="true"><object data="mark.svg" type="image/svg+xml" width="160" height="160">Hermes</object></div>
|
||||
<h1>Hermes <span class="pill p-brand" style="vertical-align:middle;font-size:12px;margin-left:.6rem;background:rgba(214,255,61,.12);color:var(--acid);padding:2px 8px;border-radius:999px">brand</span></h1>
|
||||
<p class="tag">Mark, palette, name, tone. One page so client builds, add-on
|
||||
chrome, screenshots and third-party press stay consistent without a
|
||||
design review.</p>
|
||||
</header>
|
||||
|
||||
<div class="wrap narrow">
|
||||
|
||||
<section class="plain">
|
||||
<h2>The name</h2>
|
||||
<p>In English the product is <b>Hermes</b> — after the Greek god of messengers,
|
||||
travellers, and crossings. In modern Greek the same name is <b>Ermis</b>
|
||||
(Ἑρμῆς). Both pronunciations are correct; written form is always Hermes
|
||||
outside Greek contexts.</p>
|
||||
<p>The keyboard shortcut inside Theseus is <code class="inline">Ctrl+Shift+E</code> —
|
||||
E for Ermis, and off the collision path with Chrome's own Ctrl+Shift+M
|
||||
("switch profile").</p>
|
||||
<div class="note warn" style="margin-top:1rem"><b>Not Hermès.</b> The French
|
||||
fashion house owns the mental model for the word with the grave accent and
|
||||
the orange. We spell it <b>Hermes</b> (no accent) and we do not use that
|
||||
orange. If a visitor confuses the two, the mark alone should set them
|
||||
straight.</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>The mark</h2>
|
||||
<p class="lede">A winged envelope. Reads as "messenger" at a glance, works
|
||||
monochrome, scales from 16 px (sidebar icon) to 160 px (hero) without
|
||||
legibility loss. SVG uses <code class="inline">currentColor</code> so it
|
||||
inherits whatever text colour it sits in.</p>
|
||||
|
||||
<div class="mark-row">
|
||||
<div class="cell">
|
||||
<div class="mark-16"><object data="mark-stroke.svg" type="image/svg+xml" width="16" height="16"></object></div>
|
||||
<small>16 px — simplified stroke variant</small>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class="mark-32"><object data="mark.svg" type="image/svg+xml" width="32" height="32"></object></div>
|
||||
<small>32 px — standard</small>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class="mark-64"><object data="mark.svg" type="image/svg+xml" width="64" height="64"></object></div>
|
||||
<small>64 px — on panel</small>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class="mark-neg"><object data="mark.svg" type="image/svg+xml" width="48" height="48"></object></div>
|
||||
<small>on acid green</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dl-row">
|
||||
<a href="mark.svg" download>⬇️ mark.svg (standard, 3 feathers per wing)</a>
|
||||
<a href="mark-stroke.svg" download>⬇️ mark-stroke.svg (16–20 px variant)</a>
|
||||
</div>
|
||||
|
||||
<table class="tbl">
|
||||
<thead><tr><th>Do</th><th>Don't</th></tr></thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="y">Keep the envelope horizontal, wings symmetrical.</td>
|
||||
<td class="n">Rotate, mirror or detach the wings.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="y">Let the mark inherit text colour (currentColor).</td>
|
||||
<td class="n">Hard-code a colour inside the SVG; it limits reuse.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="y">Use the stroke variant below 24 px display size.</td>
|
||||
<td class="n">Scale the standard mark below 20 px — feathers merge.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="y">Pair with the wordmark "Hermes" when context is unclear.</td>
|
||||
<td class="n">Pair with the Hermès logotype or any horsey mascot.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Palette</h2>
|
||||
<p class="lede">Hermes rides on Silent Mode's colour system — same acid green,
|
||||
same deep panels — so it never looks like a separate app glued on.
|
||||
One extra accent, warm amber, is reserved for Hermes-specific moments
|
||||
(unread badge, "winged sandals" nod). <b>Not</b> Hermès orange.</p>
|
||||
|
||||
<div class="swatches">
|
||||
<div class="sw"><div class="block" style="background:#0b0e14"></div><div class="meta"><b>bg</b><code>#0b0e14</code> — primary surface</div></div>
|
||||
<div class="sw"><div class="block" style="background:#141a24"></div><div class="meta"><b>panel</b><code>#141a24</code> — cards, sidebar</div></div>
|
||||
<div class="sw"><div class="block" style="background:#d6ff3d"></div><div class="meta"><b>acid</b><code>#d6ff3d</code> — primary action</div></div>
|
||||
<div class="sw"><div class="block" style="background:#f4c430"></div><div class="meta"><b>amber</b><code>#f4c430</code> — Hermes accent, unread</div></div>
|
||||
<div class="sw"><div class="block" style="background:#e7eaf1"></div><div class="meta"><b>ink</b><code>#e7eaf1</code> — body text</div></div>
|
||||
<div class="sw"><div class="block" style="background:#8b98a9"></div><div class="meta"><b>mut</b><code>#8b98a9</code> — muted text</div></div>
|
||||
</div>
|
||||
|
||||
<div class="note"><b>Hermès-collision check.</b> Hermès corporate orange is
|
||||
<code class="inline">#FF6D00</code>-ish. Our amber is <code class="inline">#f4c430</code>:
|
||||
yellower hue, lower saturation. Side by side they are clearly different;
|
||||
on their own, the amber reads as warm highlight, not luxury-brand orange.</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Voice</h2>
|
||||
<ul class="steps">
|
||||
<li><b>Blunt about limits.</b> "Relays still see recipient and timing" is the
|
||||
tone, not "fully anonymous messaging". Say what the design does and does
|
||||
not solve.</li>
|
||||
<li><b>No evangelism about Nostr.</b> Nostr is the transport, not the
|
||||
product. Mention it where it matters (relays, pubkeys, NIP-17) and don't
|
||||
elsewhere.</li>
|
||||
<li><b>"Message by name"</b> is the one-line pitch. Everything else is
|
||||
supporting detail.</li>
|
||||
<li><b>Lowercase</b> for product nouns in body copy (hermes, messages
|
||||
panel). Capital <b>Hermes</b> for titles and the first mention per page.</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Attribution + reuse</h2>
|
||||
<p>Mark + palette are MPL-2.0 along with the rest of the Hermes client
|
||||
source. Use for reviews, press, interoperability docs and the client's own
|
||||
chrome. Don't apply to products not actually Hermes (that includes forks
|
||||
with different protocols or trust models).</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div>Silent Mode — a Deviant project.</div>
|
||||
<div class="fine">Named for the messenger of the gods. Ermis in modern Greek.
|
||||
Spelled Hermes in English.</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
14
hermes/branding/mark-stroke.svg
Normal file
14
hermes/branding/mark-stroke.svg
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Hermes">
|
||||
<title>Hermes</title>
|
||||
<!-- Monochrome stroke variant for tiny sizes (16px / 20px sidebar icons).
|
||||
Thicker strokes, fewer wing feathers so each stroke stays >=1 pixel
|
||||
at display size. -->
|
||||
<g fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="20" y="23" width="24" height="18" rx="2"/>
|
||||
<path d="M20 25 L32 35 L44 25"/>
|
||||
<path d="M20 30 L7 27"/>
|
||||
<path d="M20 34 L8 36"/>
|
||||
<path d="M44 30 L57 27"/>
|
||||
<path d="M44 34 L56 36"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 625 B |
20
hermes/branding/mark.svg
Normal file
20
hermes/branding/mark.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Hermes">
|
||||
<title>Hermes</title>
|
||||
<!-- A winged envelope: messenger-god motif, legible at 16px, mono so it
|
||||
inherits text colour via currentColor. Not Hermès-orange on purpose
|
||||
(the French fashion house owns that mental model). -->
|
||||
<g fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
|
||||
<!-- envelope body -->
|
||||
<rect x="20" y="23" width="24" height="18" rx="2"/>
|
||||
<!-- flap / fold line -->
|
||||
<path d="M20 25 L32 35 L44 25"/>
|
||||
<!-- left wing: three tapered feathers trailing back -->
|
||||
<path d="M20 28 L7 23"/>
|
||||
<path d="M20 32 L6 32"/>
|
||||
<path d="M20 36 L9 39"/>
|
||||
<!-- right wing: mirror -->
|
||||
<path d="M44 28 L57 23"/>
|
||||
<path d="M44 32 L58 32"/>
|
||||
<path d="M44 36 L55 39"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 867 B |
|
|
@ -32,15 +32,61 @@
|
|||
|
||||
<header class="hero">
|
||||
<div class="mark">⛓️✉️</div>
|
||||
<h1>Hermes <span class="pill p-designed" style="vertical-align:middle;font-size:12px;margin-left:.6rem">designed · not yet built</span></h1>
|
||||
<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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue