feat(sirius-x): Sirius.X brand rebrand, banner star-divider, WC on portal

Three things from one review pass:

1. Rebrand text 'sirius.x' -> 'Sirius.X' as the brand style across all
   sirius.x pages (titles, meta, nav wordmark, headings, prose, footer).
   Also flipped the pantheon headings to Title.X form: Silentmode.X,
   Sirius.X, Theseus.X, Hephaestus.X, Prometheus.X, Helios.X, Hermes.X.
   Domain literals, URLs, and code samples stay lowercase (sirius.x is
   the actual on-chain name; only prose changes). Logo/avatar SVG
   wordmarks and aria-labels updated to match.

2. Banner (brand/banner.svg) redesigned around a centered layout:
   'Sirius.X' wordmark above, the star's horizontal arm extended
   edge-to-edge as a divider line, tagline lines below. Left tip at
   (0,315), right tip at (1200,315) so the arm crosses the full 1200px
   banner width; vertical body compact around center. Old layout had
   the star crammed into the right half and the wordmark on the left.

3. WizardConnect wired up on portal.html:
   - The 'Connect wallet' button now opens a real WC session via
     wizardconnect.js, shows the WIZ:// URI (copyable) and waits for
     the wallet to approve.
   - Successful connection builds a wallet-shaped wrapper with
     source: 'wc' and a WC session for signing; siriusProfile now
     carries the source so the nav dropdown can differentiate.
   - Record editor dispatches to setRecordsWithExternalWallet when
     source === 'wc' (bundle already ships the adapter), else stays
     on setRecordsWithBuiltInWallet.
   - TLD Register submit is gated off for WC users with a tooltip —
     no external-wallet variant of registerTld is exported yet, so
     TLD mint still needs a built-in wallet.
   - Sign-out disconnects the WC session before dropping the wallet.
   - toTokenAddress used to derive the tokenAddress for WC users so
     the 'Signed in' card shows both forms.
This commit is contained in:
Local Dev 2026-09-07 01:35:35 +02:00
parent 36e0ab7593
commit 6dd8b141d4
13 changed files with 1083 additions and 957 deletions

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Admin — sirius.x</title>
<title>Admin — Sirius.X</title>
<meta name="description" content="Sirius.x operator admin — mint TLDs, manage the registry, verify chain health. Operator-key gated.">
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">
<link rel="mask-icon" href="../assets/favicon.svg" color="#d6ff3d">
@ -80,7 +80,7 @@
<body>
<nav class="topnav">
<a class="brand" href="../"><span class="g">sirius.x</span></a>
<a class="brand" href="../"><span class="g">Sirius.X</span></a>
<a href="../#try">Try it</a>
<a href="../docs/">📚 Docs</a>
<a href="../theseus/">🧭 Theseus</a>

View file

@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<!-- sirius.x — brightest-star favicon. Rounded dark square + 4-point sparkle
<!-- Sirius.X — brightest-star favicon. Rounded dark square + 4-point sparkle
in the Silent Mode acid green so it reads clearly at 16x16 tab-icon size
while staying legible against both light and dark browser chromes. -->
<rect width="64" height="64" rx="12" fill="#0b0e14"/>

Before

Width:  |  Height:  |  Size: 473 B

After

Width:  |  Height:  |  Size: 473 B

View file

@ -1,8 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 64" role="img" aria-label="sirius.x">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 64" role="img" aria-label="Sirius.X">
<path d="M32 12 L35.3 30.7 L54 34 L35.3 37.3 L32 56 L28.7 37.3 L10 34 L28.7 30.7 Z"
fill="#d6ff3d"/>
<text x="72" y="42" font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="28" font-weight="600" fill="#e7eaf1" letter-spacing=".5">
sirius<tspan fill="#d6ff3d">.x</tspan>
Sirius<tspan fill="#d6ff3d">.X</tspan>
</text>
</svg>

Before

Width:  |  Height:  |  Size: 434 B

After

Width:  |  Height:  |  Size: 434 B

View file

@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="sirius.x avatar">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="Sirius.X avatar">
<!-- Square profile-picture avatar. Full-bleed dark background, single star
centered and enlarged so it reads at 24px in a social feed. Corners are
square (not rounded) so the platform can apply its own mask (Twitter,

Before

Width:  |  Height:  |  Size: 579 B

After

Width:  |  Height:  |  Size: 579 B

View file

@ -1,37 +1,38 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" role="img" aria-label="sirius.x banner">
<!-- 1200x630 = the OpenGraph / Twitter Card canonical size. Left half is the
wordmark + tagline; right half is a large decorative star that survives
aggressive cropping (Facebook, Slack and Discord all crop differently). -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" role="img" aria-label="Sirius.X banner">
<!-- 1200x630 = the OpenGraph / Twitter Card canonical size. Centered
layout: "Sirius.X" wordmark above; a horizontal divider that is the
star's own horizontal arm, extended edge-to-edge; tagline below. -->
<defs>
<radialGradient id="glow" cx="70%" cy="50%" r="55%">
<radialGradient id="glow" cx="50%" cy="55%" r="65%">
<stop offset="0%" stop-color="#16202e"/>
<stop offset="100%" stop-color="#0b0e14"/>
</radialGradient>
</defs>
<rect width="1200" height="630" fill="url(#glow)"/>
<!-- decorative giant star, right side -->
<g opacity="0.95">
<!-- 4-point star. The inner "waist" rectangle sits at x∈[885..915], y∈[300..330]:
30x30, so vertical and horizontal arms taper at the same rate. An earlier
100x30 waist made the vertical arms look bloated — see #brand review. -->
<path d="M900 90 L915 300 L1160 315 L915 330 L900 540 L885 330 L640 315 L885 300 Z"
fill="#d6ff3d"/>
</g>
<!-- The horizontal divider IS the star's horizontal arm. Left tip at (0,315),
right tip at (1200,315), so the arm crosses the full banner width. The
vertical arm is short and centered (top 230, bottom 400) so the star
body reads as a compact 4-point mark sitting on the divider line. -->
<path d="M600 230 L620 310 L1200 315 L620 320 L600 400 L580 320 L0 315 L580 310 Z"
fill="#d6ff3d"/>
<!-- wordmark, left column -->
<g transform="translate(80, 250)">
<text font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="110" font-weight="700" fill="#e7eaf1" letter-spacing="-1">
sirius<tspan fill="#d6ff3d">.x</tspan>
</text>
<text y="70" font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="30" font-weight="400" fill="#8b98a9">
The home for names on Bitcoin Cash.
</text>
<text y="115" font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="18" font-weight="500" fill="#5e6678" letter-spacing="1.5">
REGISTER · RESOLVE · VERIFY
</text>
</g>
<!-- Wordmark, centered above the divider -->
<text x="600" y="185" text-anchor="middle"
font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="120" font-weight="700" fill="#e7eaf1" letter-spacing="-1">
Sirius<tspan fill="#d6ff3d">.X</tspan>
</text>
<!-- Tagline, centered below the divider -->
<text x="600" y="475" text-anchor="middle"
font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="34" font-weight="400" fill="#8b98a9">
The home for names on Bitcoin Cash.
</text>
<text x="600" y="525" text-anchor="middle"
font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="20" font-weight="500" fill="#5e6678" letter-spacing="4">
REGISTER · RESOLVE · VERIFY
</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Brand — sirius.x</title>
<meta name="description" content="sirius.x brand kit — logo, wordmark, avatar, banner, favicon, colour palette, and usage guidance. All assets served as SVG so they stay crisp at any size.">
<title>Brand — Sirius.X</title>
<meta name="description" content="Sirius.X brand kit — logo, wordmark, avatar, banner, favicon, colour palette, and usage guidance. All assets served as SVG so they stay crisp at any size.">
<link rel="icon" href="./favicon.svg" type="image/svg+xml">
<link rel="mask-icon" href="./favicon.svg" color="#d6ff3d">
<meta property="og:type" content="website">
<meta property="og:site_name" content="sirius.x">
<meta property="og:title" content="sirius.x brand kit">
<meta property="og:site_name" content="Sirius.X">
<meta property="og:title" content="Sirius.X brand kit">
<meta property="og:description" content="Logo, wordmark, avatar, banner, favicon, colour palette. All SVG, downloadable, MIT.">
<meta property="og:url" content="https://silentmode.st/sirius-x/brand/">
<meta property="og:image" content="https://silentmode.st/sirius-x/brand/banner.svg">
@ -76,7 +76,7 @@
<body>
<nav class="topnav">
<a class="brand" href="../"><span class="g">sirius.x</span></a>
<a class="brand" href="../"><span class="g">Sirius.X</span></a>
<a href="../#try">Try it</a>
<a href="../docs/">📚 Docs</a>
<a href="../theseus/">🧭 Theseus</a>
@ -89,7 +89,7 @@
<header class="hero">
<div class="mark">🎨</div>
<h1>sirius.x <span class="g">brand kit</span></h1>
<h1>Sirius.X <span class="g">brand kit</span></h1>
<p class="tag">Logo, wordmark, avatar, banner, favicon, and the colour palette. Every asset ships as
SVG so it stays crisp at any size and reads correctly in light and dark contexts. Free to reuse
with attribution.</p>
@ -99,7 +99,7 @@
<section>
<h2>Logo &amp; wordmark</h2>
<p class="lede">A 4-point sparkle star plus <b>sirius.x</b>, with the <code>.x</code> TLD picked out
<p class="lede">A 4-point sparkle star plus <b>Sirius.X</b>, with the <code>.x</code> TLD picked out
in acid green. The star alone works when you have no room for the wordmark; the full lockup is
the default choice everywhere else.</p>
<div class="grid">
@ -143,7 +143,7 @@
<div class="preview favicon"><img src="./favicon.svg" alt="sirius.x favicon"></div>
<h3>Favicon <span class="meta">SVG · 64×64, 12px radius</span></h3>
<p class="lede" style="margin-bottom:.6rem">Rounded browser-tab icon. Scales down to 16×16
cleanly; used on every sirius.x page.</p>
cleanly; used on every Sirius.X page.</p>
<div class="row">
<a class="btn acid" href="./favicon.svg" download>Download SVG</a>
<a class="btn" href="./favicon.svg" target="_blank">Open</a>
@ -169,7 +169,7 @@
<section>
<h2>Colour palette</h2>
<p class="lede">Silent Mode family colours. Dark chromes are the default; acid green is the
single accent that consistently signals "this is sirius.x".</p>
single accent that consistently signals "this is Sirius.X".</p>
<div class="swatches">
<div class="sw"><div class="chip" style="background:#d6ff3d"></div><div class="info"><b>Acid</b>#d6ff3d — accent, links, active nav</div></div>
<div class="sw"><div class="chip" style="background:#0b0e14"></div><div class="info"><b>Background</b>#0b0e14 — page canvas</div></div>
@ -192,7 +192,7 @@
<p style="margin:0;font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
font-size:36px;font-weight:600;letter-spacing:-.5px">The quick brown fox</p>
<p style="margin:.4rem 0 0;color:var(--mut);font-family:system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
font-size:16px">jumps over the lazy dog · 0123456789 · sirius.x</p>
font-size:16px">jumps over the lazy dog · 0123456789 · Sirius.X</p>
<div class="meta" style="margin-top:12px">system-ui, -apple-system, Segoe UI, Roboto, sans-serif</div>
</div>
<div class="note">The wordmark's <code>.x</code> is a <code>&lt;tspan fill="#d6ff3d"&gt;</code>
@ -202,12 +202,12 @@
<section>
<h2>Usage &amp; licence</h2>
<p class="lede">All assets are MIT. Reuse them for third-party tools that integrate with sirius.x
<p class="lede">All assets are MIT. Reuse them for third-party tools that integrate with Sirius.X
(wallets, indexers, explorers, blog posts about BCNR). Keep the star's proportions intact and
don't recolour the acid to a similar-but-different green — palette drift is what makes brands
look untrustworthy over time.</p>
<ul style="color:var(--mut);font-size:14px;padding-left:1.2rem">
<li><b style="color:var(--ink)">Do</b> use the mark to indicate "supports sirius.x" or "hosted on sirius.x".</li>
<li><b style="color:var(--ink)">Do</b> use the mark to indicate "supports Sirius.X" or "hosted on Sirius.X".</li>
<li><b style="color:var(--ink)">Do</b> shrink to the favicon at 16×16 — the SVG scales cleanly.</li>
<li><b style="color:var(--ink)">Don't</b> imply endorsement of a specific product without asking.</li>
<li><b style="color:var(--ink)">Don't</b> stretch, skew, or re-tint the star.</li>
@ -217,7 +217,7 @@
</div>
<footer>
Brand kit for sirius.x ·
Brand kit for Sirius.X ·
<a href="../">back to sirius.x</a> ·
<a href="https://silentmode.st/">silentmode.st</a>
</footer>

View file

@ -1,10 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 64" role="img" aria-label="sirius.x (monochrome)">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 64" role="img" aria-label="Sirius.X (monochrome)">
<!-- Single-fill variant for print, embossing, one-colour merch. currentColor
so the SVG inherits the surrounding text colour when inlined; pass
style="color: #d6ff3d" to force the acid green. -->
<g fill="currentColor">
<path d="M32 12 L35.3 30.7 L54 34 L35.3 37.3 L32 56 L28.7 37.3 L10 34 L28.7 30.7 Z"/>
<text x="72" y="42" font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="28" font-weight="600" letter-spacing=".5">sirius.x</text>
font-size="28" font-weight="600" letter-spacing=".5">Sirius.X</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 623 B

View file

@ -1,8 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 64" role="img" aria-label="sirius.x">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 64" role="img" aria-label="Sirius.X">
<path d="M32 12 L35.3 30.7 L54 34 L35.3 37.3 L32 56 L28.7 37.3 L10 34 L28.7 30.7 Z"
fill="#d6ff3d"/>
<text x="72" y="42" font-family="system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
font-size="28" font-weight="600" fill="#e7eaf1" letter-spacing=".5">
sirius<tspan fill="#d6ff3d">.x</tspan>
Sirius<tspan fill="#d6ff3d">.X</tspan>
</text>
</svg>

Before

Width:  |  Height:  |  Size: 434 B

After

Width:  |  Height:  |  Size: 434 B

View file

@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Docs — sirius.x</title>
<title>Docs — Sirius.X</title>
<meta name="description" content="How BCNR works: the TLD registry, name registration, records, resolver, and how to verify anything against the Bitcoin Cash chain.">
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">
<link rel="mask-icon" href="../assets/favicon.svg" color="#d6ff3d">
<meta property="og:type" content="website">
<meta property="og:site_name" content="sirius.x">
<meta property="og:title" content="sirius.x docs — how BCNR works">
<meta property="og:site_name" content="Sirius.X">
<meta property="og:title" content="Sirius.X docs — how BCNR works">
<meta property="og:description" content="The TLD registry, name registration, records, resolver, mainnet pricing, and how to verify anything against the chain.">
<meta property="og:url" content="https://silentmode.st/sirius-x/docs/">
<meta property="og:image" content="https://silentmode.st/sirius-x/brand/banner.svg">
@ -80,7 +80,7 @@
<body>
<nav class="topnav">
<a class="brand" href="../"><span class="g">sirius.x</span></a>
<a class="brand" href="../"><span class="g">Sirius.X</span></a>
<a href="../#try">Try it</a>
<a href="./" class="here">📚 Docs</a>
<a href="../theseus/">🧭 Theseus</a>
@ -93,7 +93,7 @@
<header class="hero">
<div class="mark">📚</div>
<h1>sirius.x <span class="g">docs</span></h1>
<h1>Sirius.X <span class="g">docs</span></h1>
<p class="tag">How the pieces fit together: the TLD registry, name registration, records that
tell the resolver where a site lives, the resolver itself, and how anyone can verify anything
against the chain.</p>
@ -208,7 +208,7 @@ node Argus/src/update.js myname.x '{"s3":"bns/myname/"}'</pre>
node Argus/src/update.js myname.x '{"ip":"1.2.3.4","tls":"&lt;sha256-of-leaf-cert&gt;"}'</pre>
<h3>Pattern C — Dual host (Sia primary, VPS mirror)</h3>
<p class="lede">What sirius.x itself uses. Sia is the chain-authoritative source (survives
<p class="lede">What Sirius.X itself uses. Sia is the chain-authoritative source (survives
if the VPS is down); the VPS serves the same content on <code>silentmode.st/&lt;path&gt;</code>
for users without a BCNR resolver installed. On the VPS side, extend the nginx vhost
serving <code>silentmode.st</code> with a new <code>location</code> block that aliases
@ -224,7 +224,7 @@ node Argus/src/update.js myname.x '{"ip":"1.2.3.4","tls":"&lt;sha256-of-leaf-cer
<code>https://myname.x/</code> via any BCNR resolver.</p>
<h3>The dual-host recipe, end to end</h3>
<p class="lede">This is the exact sequence sirius.x itself uses on every publish. The
<p class="lede">This is the exact sequence Sirius.X itself uses on every publish. The
chain record stays constant; only file contents change, so no per-publish UPD is
needed.</p>
<ol class="steps">
@ -423,7 +423,7 @@ process.exit(0);"</pre>
</div>
<footer>
Documentation for BCNR + the sirius.x stack ·
Documentation for BCNR + the Sirius.X stack ·
<a href="../">back to sirius.x</a> ·
<a href="https://silentmode.st/tlds/">TLD registry snapshot</a> ·
<a href="../register.html">register a name</a>

View file

@ -3,21 +3,21 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>sirius.x — the home for names on Bitcoin Cash</title>
<meta name="description" content="sirius.x is the operator-run entry point for BCNR: register a top-level domain, register a name under one, look up records, verify anything against the chain. Backed by Sia storage, mirrored on the operator's VPS, name published on the chain.">
<title>Sirius.X — the home for names on Bitcoin Cash</title>
<meta name="description" content="Sirius.X is the operator-run entry point for BCNR: register a top-level domain, register a name under one, look up records, verify anything against the chain. Backed by Sia storage, mirrored on the operator's VPS, name published on the chain.">
<!-- sirius.x branding: SVG favicon at 16/32/any size (the star + dark rounded
square scales cleanly); OpenGraph + Twitter Card so shared links preview
with the right title, description, and mark. -->
<link rel="icon" href="./assets/favicon.svg" type="image/svg+xml">
<link rel="mask-icon" href="./assets/favicon.svg" color="#d6ff3d">
<meta property="og:type" content="website">
<meta property="og:site_name" content="sirius.x">
<meta property="og:title" content="sirius.x — the home for names on Bitcoin Cash">
<meta property="og:site_name" content="Sirius.X">
<meta property="og:title" content="Sirius.X — the home for names on Bitcoin Cash">
<meta property="og:description" content="Register a top-level domain, register a name under one, look up records, verify anything against the chain. Backed by Sia + VPS + on-chain.">
<meta property="og:url" content="https://silentmode.st/sirius-x/">
<meta property="og:image" content="https://silentmode.st/sirius-x/brand/banner.svg">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="sirius.x — the home for names on Bitcoin Cash">
<meta name="twitter:title" content="Sirius.X — the home for names on Bitcoin Cash">
<meta name="twitter:description" content="Register a TLD or a name, look up records, verify against the chain. Your keys, your names.">
<style>
:root{
@ -91,7 +91,7 @@
<body>
<nav class="topnav">
<a class="brand" href="./"><span class="g">sirius.x</span></a>
<a class="brand" href="./"><span class="g">Sirius.X</span></a>
<a href="#try">Try it</a>
<a href="./docs/">📚 Docs</a>
<a href="./theseus/">🧭 Theseus</a>
@ -106,7 +106,7 @@
<header class="hero">
<div class="mark"></div>
<h1>Names on the <span class="g">chain</span>.</h1>
<p class="tag">sirius.x is the entry point for BCNR — Bitcoin Cash Name Registry.
<p class="tag">Sirius.X is the entry point for BCNR — Bitcoin Cash Name Registry.
Register a top-level domain, register a name under one, look up records,
verify anything against the chain. Backed by Sia storage, mirrored on the
operator's VPS, name published on chain — this page survives if any single
@ -122,7 +122,7 @@
<section id="try">
<h2>Try it</h2>
<p class="lede">Three things you can do right now. The registrar and TLD-registry UIs live at
silentmode.st today; sirius.x is the canonical home and will consolidate them here.</p>
silentmode.st today; Sirius.X is the canonical home and will consolidate them here.</p>
<div class="grid">
<div class="card">
<h3><span class="dot d-chain"></span> Register a name</h3>
@ -191,42 +191,42 @@
resolver, plus the silentmode.st gateway for browsers without one.</p>
<div class="grid">
<div class="card">
<h3><span class="dot d-chain"></span> ⛓️ silentmode.x</h3>
<h3><span class="dot d-chain"></span> ⛓️ Silentmode.X</h3>
<p>The project umbrella. Redirects to <code>silentmode.st</code> where every pillar
has its own landing page + download hub.</p>
<div class="cta"><a class="btn ghost" href="https://silentmode.st/bns/silentmode.x/" rel="noopener">Open →</a></div>
</div>
<div class="card">
<h3><span class="dot d-chain"></span>sirius.x <span class="pill">you're here</span></h3>
<h3><span class="dot d-chain"></span>Sirius.X <span class="pill">you're here</span></h3>
<p>Names on Bitcoin Cash — register, resolve, verify, manage. This site.</p>
<div class="cta"><a class="btn ghost" href="./">Home →</a></div>
</div>
<div class="card">
<h3><span class="dot d-chain"></span> 🧭 theseus.x</h3>
<h3><span class="dot d-chain"></span> 🧭 Theseus.X</h3>
<p>The browser that speaks BCNR natively — Chromium build with the resolver baked in,
no OS-level daemon or root-store install.</p>
<div class="cta"><a class="btn ghost" href="./theseus/">Learn more →</a></div>
</div>
<div class="card">
<h3><span class="dot d-srv"></span> 🔥 hephaestus.x</h3>
<h3><span class="dot d-srv"></span> 🔥 Hephaestus.X</h3>
<p>The forge. Forgejo instance for the ecosystem's git repos, backed by BCH wallet
auth. Sirius's own source lives here.</p>
<div class="cta"><a class="btn ghost" href="https://code.silentmode.st/" rel="noopener">Open →</a></div>
</div>
<div class="card">
<h3><span class="dot d-sia"></span> 🔮 prometheus.x</h3>
<h3><span class="dot d-sia"></span> 🔮 Prometheus.X</h3>
<p>Fire from the chain. The project's foresight / experimentation layer.
Redirects to <code>silentmode.st/prometheus/</code> today.</p>
<div class="cta"><a class="btn ghost" href="https://silentmode.st/bns/prometheus.x/" rel="noopener">Open →</a></div>
</div>
<div class="card">
<h3><span class="dot d-sia"></span> ☀️ helios.x</h3>
<h3><span class="dot d-sia"></span> ☀️ Helios.X</h3>
<p>The public gaze. Analytics, dashboards, transparency reports.
Redirects to <code>silentmode.st/helios/</code> today.</p>
<div class="cta"><a class="btn ghost" href="https://silentmode.st/bns/helios.x/" rel="noopener">Open →</a></div>
</div>
<div class="card">
<h3><span class="dot d-srv"></span> ✉️ hermes.x</h3>
<h3><span class="dot d-srv"></span> ✉️ Hermes.X</h3>
<p>Messenger. Nostr-based messaging bound to a BCNR name via the <code>np</code>
+ <code>nr</code> records. Redirects to <code>silentmode.st/hermes/</code>.</p>
<div class="cta"><a class="btn ghost" href="https://silentmode.st/bns/hermes.x/" rel="noopener">Open →</a></div>
@ -236,7 +236,7 @@
<section id="roadmap">
<h2>What's coming</h2>
<p class="lede">sirius.x consolidates docs and registration today; three larger pieces are on the roadmap.</p>
<p class="lede">Sirius.X consolidates docs and registration today; three larger pieces are on the roadmap.</p>
<div class="grid">
<div class="card">
<h3>Wallet &amp; name portal <span class="pill soon">next</span></h3>
@ -305,7 +305,7 @@ process.exit(0);"</pre>
</div>
<footer>
sirius.x — the Silent Mode name registry entry point ·
Sirius.X — the Silent Mode name registry entry point ·
<a href="https://silentmode.st/">silentmode.st</a> ·
<a href="https://silentmode.st/tlds/">TLD registry</a> ·
<a href="./register.html">register a name</a><br>

View file

@ -3,13 +3,13 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Portal — your names on sirius.x</title>
<title>Portal — your names on Sirius.X</title>
<meta name="description" content="Sign in with your Bitcoin Cash seed phrase to see every BCNR name your wallet holds and manage records. Your keys never leave the browser.">
<link rel="icon" href="./assets/favicon.svg" type="image/svg+xml">
<link rel="mask-icon" href="./assets/favicon.svg" color="#d6ff3d">
<meta property="og:type" content="website">
<meta property="og:site_name" content="sirius.x">
<meta property="og:title" content="sirius.x portal — your BCNR names">
<meta property="og:site_name" content="Sirius.X">
<meta property="og:title" content="Sirius.X portal — your BCNR names">
<meta property="og:description" content="Sign in with your seed phrase to see every name your wallet holds and manage records. Keys never leave the browser.">
<meta property="og:url" content="https://silentmode.st/sirius-x/portal.html">
<meta property="og:image" content="https://silentmode.st/sirius-x/brand/banner.svg">
@ -112,7 +112,7 @@
<body>
<nav class="topnav">
<a class="brand" href="./"><span class="g">sirius.x</span></a>
<a class="brand" href="./"><span class="g">Sirius.X</span></a>
<a href="./#try">Try it</a>
<a href="./docs/">📚 Docs</a>
<a href="./theseus/">🧭 Theseus</a>
@ -176,12 +176,20 @@
<p>Use Cashonize 0.9+ or Paytaca via WizardConnect. The wallet signs record edits — the seed
never touches this page.</p>
<div class="row">
<button class="btn ghost" id="wc-btn" disabled>WizardConnect
<span class="badge b-warn" style="margin-left:6px">soon</span></button>
<button class="btn acid" id="wc-btn">Connect wallet</button>
</div>
<p class="dim" style="margin-top:8px">Portal-side WizardConnect wiring is in progress; the
<a href="./register.html">register.html</a> flow already ships the WizardConnect adapter, and
the portal will reuse it.</p>
<div id="wc-uri-box" class="hidden" style="margin-top:14px">
<label>Open your wallet, scan or paste this URI, then approve the connection:</label>
<div style="display:flex;gap:8px;align-items:center;margin-top:6px">
<code id="wc-uri" style="flex:1;word-break:break-all;background:#0e131b;border:1px solid var(--line);border-radius:8px;padding:9px 11px;font-family:ui-monospace,monospace;font-size:12.5px;color:var(--ink)"></code>
<button class="btn ghost" id="wc-copy" type="button">Copy</button>
</div>
<p class="dim" style="margin-top:8px">Waiting for your wallet…</p>
<div class="row"><button class="btn ghost" id="wc-cancel" type="button">Cancel</button></div>
</div>
<div id="wc-err" class="err hidden"></div>
<p class="dim" style="margin-top:8px">Record edits are approved on your device via the wallet's
signing prompt. TLD registration still requires a built-in wallet for now.</p>
</div>
</div>
<div class="status" style="margin-top:14px">
@ -302,6 +310,7 @@ function writeProfile(w) {
localStorage.setItem("siriusProfile", JSON.stringify({
address: w.address,
tokenAddress: w.tokenAddress,
source: w.source ?? "seed", // "seed" | "wc"
signedInAt: Date.now(),
}));
} catch {}
@ -377,7 +386,109 @@ $("new-signin-btn").addEventListener("click", async () => {
await enterPortal();
});
$("signout-btn").addEventListener("click", () => {
// ---------- WizardConnect ----------
// Ports the WC flow from register.html into a sign-in surface. The portal
// doesn't need to mint — it only reads holdings and signs UPDs — so this is
// simpler than the register flow: open a session, show the URI/QR, wait for
// approval, wrap the returned addresses in a wallet-shaped object with a
// `source: "wc"` flag so downstream code (record editor, sign-out) can
// dispatch to the external-wallet path.
$("wc-btn").addEventListener("click", async () => {
const btn = $("wc-btn");
const errBox = $("wc-err");
const uriBox = $("wc-uri-box");
errBox.classList.add("hidden");
btn.disabled = true; btn.textContent = "Starting…";
let session;
try {
const mod = await import("https://silentmode.st/js/wizardconnect.js");
session = await mod.openWizardSession({
dappName: BNS.REGISTRAR.wizardConnect.dappName,
dappIcon: BNS.REGISTRAR.wizardConnect.dappIcon,
prefix: BNS.REGISTRAR.addressPrefix,
// libauth is only bundled once (in the main bundle); wizardconnect.js
// needs these pubkey/hash helpers passed through.
crypto: {
pubkeyToAddress: BNS.pubkeyToAddress,
pubkeyToLockingBytecode: BNS.pubkeyToLockingBytecode,
binToHex: BNS.binToHex,
txidOfHex: BNS.txidOfHex,
},
});
} catch (e) {
errBox.textContent = "Could not start WizardConnect: " + (e.message || e);
errBox.classList.remove("hidden");
btn.disabled = false; btn.textContent = "Connect wallet";
return;
}
const uri = session.qrUri ?? session.uri;
$("wc-uri").textContent = uri;
uriBox.classList.remove("hidden");
btn.textContent = "Waiting for wallet…";
try {
await session.ready;
} catch (e) {
errBox.textContent = "Wallet did not approve: " + (e.message || e);
errBox.classList.remove("hidden");
uriBox.classList.add("hidden");
btn.disabled = false; btn.textContent = "Connect wallet";
try { await session.disconnect(); } catch {}
return;
}
let addresses;
try { addresses = await session.getAddresses(); }
catch (e) {
errBox.textContent = "Wallet returned no addresses: " + (e.message || e);
errBox.classList.remove("hidden");
uriBox.classList.add("hidden");
btn.disabled = false; btn.textContent = "Connect wallet";
try { await session.disconnect(); } catch {}
return;
}
if (!addresses?.length) {
errBox.textContent = "The connected wallet exposed no addresses.";
errBox.classList.remove("hidden");
uriBox.classList.add("hidden");
btn.disabled = false; btn.textContent = "Connect wallet";
try { await session.disconnect(); } catch {}
return;
}
// Wallet-shaped wrapper — enough for holdings lookup and dispatching the
// WC path in the record editor. External wallets don't expose keyFor(),
// so any codepath that needs it (TLD mint via built-in path) is guarded
// by `wallet.source !== "wc"`.
wallet = {
source: "wc",
address: addresses[0],
tokenAddress: BNS.toTokenAddress(addresses[0]),
watchedAddresses: addresses,
session,
};
writeProfile(wallet);
uriBox.classList.add("hidden");
btn.disabled = false; btn.textContent = "Connect wallet";
await enterPortal();
});
$("wc-cancel").addEventListener("click", async () => {
if (wallet?.session) { try { await wallet.session.disconnect(); } catch {} }
$("wc-uri-box").classList.add("hidden");
$("wc-btn").disabled = false;
$("wc-btn").textContent = "Connect wallet";
});
$("wc-copy").addEventListener("click", () => {
navigator.clipboard?.writeText($("wc-uri").textContent);
});
$("signout-btn").addEventListener("click", async () => {
// Close any live WC session before dropping the reference.
if (wallet?.source === "wc" && wallet.session) {
try { await wallet.session.disconnect(); } catch {}
}
wallet = null;
clearProfile();
$("me").classList.add("hidden");
@ -389,6 +500,9 @@ $("signout-btn").addEventListener("click", () => {
$("new-phrase").classList.add("hidden");
$("new-ack").checked = false;
$("new-signin-btn").disabled = true;
// Reset the WC card too.
$("wc-btn").disabled = false; $("wc-btn").textContent = "Connect wallet";
$("wc-uri-box").classList.add("hidden");
});
// ---------- ?mode= deep-link ----------
@ -551,10 +665,15 @@ $("ed-save").addEventListener("click", async () => {
try {
el = await BNS.connect();
push("connected to chipnet");
const res = await BNS.setRecordsWithBuiltInWallet(el, {
wallet, name: editorName, records,
onProgress: (step) => push(step),
});
const res = wallet.source === "wc"
? await BNS.setRecordsWithExternalWallet(el, {
session: wallet.session, name: editorName, records,
onProgress: (step) => push(step),
})
: await BNS.setRecordsWithBuiltInWallet(el, {
wallet, name: editorName, records,
onProgress: (step) => push(step),
});
push("broadcast: " + (res.txid || res.txId || "(no txid)"));
msg.className = "msg ok";
msg.textContent = "Saved. Records will refresh on the chain within a block.";
@ -597,8 +716,14 @@ function validateTldLabel(label) {
function updateTldButtons() {
const label = $("tld-label").value.trim().toLowerCase();
const valid = validateTldLabel(label);
// TLD mint uses registerTldWithBuiltInWallet — no external-wallet variant
// is exported yet, so WC-signed-in users can check availability but can't
// submit. The label change explains why.
const isWc = wallet?.source === "wc";
$("tld-check").disabled = !valid || !wallet;
$("tld-submit").disabled = !valid || !wallet;
$("tld-submit").disabled = !valid || !wallet || isWc;
if (isWc) $("tld-submit").title = "TLD registration via WizardConnect is not yet supported. Sign in with a built-in wallet to mint a TLD.";
else $("tld-submit").removeAttribute("title");
}
$("tld-label").addEventListener("input", () => {

File diff suppressed because it is too large Load diff

View file

@ -3,12 +3,12 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Theseus Navigator — the browser that speaks Bitcoin Cash names — sirius.x</title>
<title>Theseus Navigator — the browser that speaks Bitcoin Cash names — Sirius.X</title>
<meta name="description" content="Theseus Navigator is a Chromium-based browser with native .bch / BCNR name resolution built in — no OS-level daemon, no DNS shim, no root-store install. Download for Windows.">
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">
<link rel="mask-icon" href="../assets/favicon.svg" color="#d6ff3d">
<meta property="og:type" content="website">
<meta property="og:site_name" content="sirius.x">
<meta property="og:site_name" content="Sirius.X">
<meta property="og:title" content="Theseus Navigator — the browser that speaks Bitcoin Cash names">
<meta property="og:description" content="Native .bch and BCNR name resolution built into a Chromium browser. No OS-level daemon, no root-store install. Download for Windows.">
<meta property="og:url" content="https://silentmode.st/sirius-x/theseus/">
@ -80,7 +80,7 @@
<body>
<nav class="topnav">
<a class="brand" href="../"><span class="g">sirius.x</span></a>
<a class="brand" href="../"><span class="g">Sirius.X</span></a>
<a href="../#try">Try it</a>
<a href="../docs/">📚 Docs</a>
<a href="./" class="here">🧭 Theseus</a>
@ -112,7 +112,7 @@
<a class="btn acid" href="https://silentmode.st/bns/theseus.x/#download" rel="noopener">Open theseus.x downloads →</a>
<a class="btn ghost" href="https://silentmode.st/bns/theseus.x/" rel="noopener">Full Theseus site</a>
</div>
<div class="note" style="margin-top:1.4rem"><b>Why not list versions here?</b> Theseus updates weekly; a hardcoded version on this page went stale within days last time. theseus.x is the single source of truth — its own operator ships the current build, and sirius.x links there instead of duplicating.</div>
<div class="note" style="margin-top:1.4rem"><b>Why not list versions here?</b> Theseus updates weekly; a hardcoded version on this page went stale within days last time. theseus.x is the single source of truth — its own operator ships the current build, and Sirius.X links there instead of duplicating.</div>
</section>
<section id="how">
@ -163,7 +163,7 @@ sha256sum &lt;downloaded-file&gt;.exe</pre>
</div>
<footer>
Theseus Navigator on sirius.x ·
Theseus Navigator on Sirius.X ·
<a href="../">back to sirius.x</a> ·
<a href="https://silentmode.st/tools/">Silent Mode Tools</a> ·
<a href="https://silentmode.st/releases/">Release notes</a><br>