sirius/index.html
Local Dev f84304b0f7 site-theseus-x: overlay sidebar so content stays centred; sirius.x: Theseus.X
The sidebar's body padding-left was pushing the whole page — hero,
cards, footer — to the right of centre, off the axis of the hero
title. Removed the body reserve; the sidebar is now a
pointer-events:none overlay on top of the page. Content wraps back to
the middle of the viewport regardless of sidebar width.

Links float at opacity 0.35 by default so the sidebar reads as chrome
rather than a panel — the section text underneath stays legible. On
hover a link snaps to full opacity, picks up an ink colour and a
subtle blurred backdrop so it doesn't compete with the content. The
active-section link keeps the acid tint at 0.85 and finishes to 1 on
hover. Icon rail and mobile bar unchanged.

Sirius.X: the Theseus tab link in the topnav now reads Theseus.X with
the .X in acid green, matching the naming everywhere else in the
ecosystem.
2026-09-20 17:46:55 +02:00

507 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<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.">
<!-- 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: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:description" content="Register a TLD or a name, look up records, verify against the chain. Your keys, your names.">
<!-- Silent Mode family fonts (Fraunces editorial + DM Sans body + JetBrains
Mono for code/hashes) plus Ubuntu as the Bitcoin Cash brand alt. Toggle
between Fraunces and Ubuntu lives in the top nav (see js/theme.js). -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300;9..144,400;9..144,500;9..144,600;9..144,700&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Ubuntu:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root{
/* Deviant "signal" sky palette — shared with silentmode.st/deviant/. */
--bg:#050810; --panel:#141a24; --panel2:#0a0f1c; --line:rgba(255,255,255,.06);
--sky-mid:#0a0f1c; --sky-rim:#131a2a;
--ink:#f1f4fa; --mut:#b8c2d4; --dim:#6a7488; --acid:#d6ff3d;
/* #0AC18E = Bitcoin Cash brand green — used for chain-native badges */
--chain-native:#0AC18E;
--chain:#d6ff3d; --sia:#b39ddb; --srv:#4fd1a5; --ok:#4fd1a5; --taken:#f6768a;
--warn:#ffc75f;
--serif:'Fraunces',Georgia,serif;
--sans:'DM Sans','Inter',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
--mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;
background:radial-gradient(ellipse 1200px 600px at 50% -5%,var(--sky-rim) 0%,transparent 60%),
radial-gradient(ellipse 900px 500px at 100% 100%,var(--sky-mid) 0%,transparent 55%),
radial-gradient(ellipse 900px 500px at 0% 100%,#0c1424 0%,transparent 55%),
var(--bg);
background-attachment:fixed;
color:var(--ink);font:16px/1.6 var(--sans);min-height:100vh;
font-feature-settings:"ss01","ss02"}
h1,h2,h3{font-family:var(--serif);font-feature-settings:"ss01","ss02"}
code,.mono{font-family:var(--mono)}
/* Ubuntu reader-alt — swap when <html data-font-cmp="ubuntu"> */
html[data-font-cmp="ubuntu"] body,
html[data-font-cmp="ubuntu"] h1, html[data-font-cmp="ubuntu"] h2, html[data-font-cmp="ubuntu"] h3,
html[data-font-cmp="ubuntu"] p, html[data-font-cmp="ubuntu"] a, html[data-font-cmp="ubuntu"] button,
html[data-font-cmp="ubuntu"] span, html[data-font-cmp="ubuntu"] div,
html[data-font-cmp="ubuntu"] label, html[data-font-cmp="ubuntu"] input, html[data-font-cmp="ubuntu"] li{
font-family:'Ubuntu',system-ui,sans-serif !important
}
html[data-font-cmp="ubuntu"] code, html[data-font-cmp="ubuntu"] .mono{
font-family:var(--mono) !important
}
/* Font picker pill (lives inside .topnav) */
.font-picker{display:inline-flex;align-items:center;gap:2px;padding:2px;margin:0 10px;
background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:999px;
font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase}
.font-picker button{background:transparent;border:none;color:var(--dim);
padding:4px 10px;border-radius:999px;cursor:pointer;font-family:inherit;font-size:inherit;
letter-spacing:inherit;text-transform:inherit;transition:color .12s}
.font-picker button:hover{color:var(--ink)}
.font-picker button.active{background:var(--acid);color:var(--bg);font-weight:600}
/* .font-picker-float positioning is injected by js/theme.js */
a{color:var(--acid)}
.wrap{max-width:980px;margin:0 auto;padding:0 1.2rem}
.topnav{position:sticky;top:0;z-index:20;display:flex;gap:2px;align-items:center;flex-wrap:wrap;
padding:10px 1.2rem;background:rgba(11,14,20,.82);backdrop-filter:blur(10px)}
.topnav .brand{font-weight:600;color:var(--ink);text-decoration:none;margin-right:14px;font-size:15px;letter-spacing:.2px}
.topnav .brand .g{color:var(--acid)}
.topnav a{color:var(--mut);text-decoration:none;padding:6px 12px;border-radius:8px;font-size:14px}
.topnav a:hover{color:var(--ink);background:var(--panel)}
.topnav a.here{color:var(--acid);background:rgba(214,255,61,.08)}
/* Sign-in link sits on the right so it reads as an account action, not a nav item */
.topnav a.portal{margin-left:auto;background:rgba(214,255,61,.10);color:var(--acid);font-weight:500}
.topnav a.portal:hover{background:rgba(214,255,61,.18)}
header.hero{text-align:center;padding:5rem 1.2rem 1rem}
.mark{font-size:56px;line-height:1}
h1{font-size:clamp(2rem,5.5vw,2.9rem);margin:.4rem 0 .3rem}
h1 .g{color:var(--acid)}
.tag{color:var(--mut);font-size:1.05rem;max-width:660px;margin:0 auto}
.cta{margin-top:1.8rem;display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.btn{display:inline-block;text-decoration:none;padding:11px 20px;border-radius:10px;background:#4b7bec;color:#fff;font-size:14px;border:none;cursor:pointer;font-family:inherit;transition:filter .1s}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
.btn.acid{background:var(--acid);color:#0b0e14;font-weight:600}
.btn:hover{filter:brightness(1.12)}
section{padding:2.6rem 0;border-top:1px solid var(--line);margin-top:2.5rem}
section:first-of-type{border-top:none;margin-top:1.5rem}
h2{font-size:1.5rem;margin:0 0 .4rem}
h3{font-size:1.1rem;margin:0 0 .35rem}
.lede{color:var(--mut);margin:0 0 1.6rem;max-width:720px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
.card h3{margin:0 0 .5rem;display:flex;align-items:center;gap:8px}
.card p{margin:0;color:var(--mut);font-size:14px}
.card .cta{margin-top:14px;justify-content:flex-start}
.dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.d-chain{background:var(--chain)} .d-sia{background:var(--sia)} .d-srv{background:var(--srv)}
.note{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acid);
border-radius:10px;padding:14px 18px;color:var(--mut);font-size:14px;margin-top:1.4rem}
.note.warn{border-left-color:var(--warn)}
.note b{color:var(--ink)}
code,.mono{background:#0e131b;border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:13px}
pre{background:#0e131b;border:1px solid var(--line);border-radius:10px;padding:12px 14px;overflow-x:auto;
font-family:ui-monospace,monospace;font-size:13px;color:var(--ink);margin:1rem 0}
ol.steps{counter-reset:s;list-style:none;padding:0;margin:1.2rem 0 0;display:grid;gap:10px}
ol.steps li{counter-increment:s;display:grid;grid-template-columns:30px 1fr;gap:14px;align-items:start;
background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:13px 16px}
ol.steps li::before{content:counter(s);grid-column:1;grid-row:1;
display:grid;place-items:center;width:24px;height:24px;border-radius:50%;
background:rgba(214,255,61,.14);color:var(--acid);font-size:12.5px;font-weight:700}
ol.steps li > *{grid-column:2;min-width:0}
ol.steps b{color:var(--ink)} ol.steps span{color:var(--mut);font-size:14px}
.pill{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;background:rgba(255,255,255,.07);color:var(--dim);margin-left:8px;vertical-align:middle;font-weight:500}
.pill.soon{background:rgba(214,255,61,.13);color:var(--acid)}
.verify dt{color:var(--mut);font-size:12.5px;text-transform:uppercase;letter-spacing:.3px;margin-top:12px}
.verify dt:first-of-type{margin-top:0}
.verify dd{margin:2px 0 0;font-family:ui-monospace,monospace;font-size:12.5px;word-break:break-all;color:var(--ink)}
footer{border-top:1px solid var(--line);padding:2.4rem 0 3.5rem;color:var(--dim);font-size:13px;text-align:center;margin-top:2.5rem}
</style>
<script src="./js/i18n.js?v=20260920e"></script>
</head>
<body>
<nav class="topnav">
<a class="brand" href="./"><span class="g">Sirius.X</span></a>
<a href="#try">Try it</a>
<a href="./#search-input">✏️ Register</a>
<a href="./tld.html">🌐 TLD</a>
<a href="./market/">🛒 Market</a>
<a href="./theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" aria-hidden="true"><rect width="64" height="64" rx="12" fill="#0b0e14"/><path d="M32 6 L38 32 L26 32 Z" fill="#e04e4e"/><path d="M38 32 L32 58 L26 32 Z" fill="#d6ff3d"/><path d="M6 32 L32 27 L58 32 L32 37 Z" fill="#d6ff3d" opacity=".55"/><circle cx="32" cy="32" r="3" fill="#0b0e14"/></svg>Theseus<span class="g">.X</span></a>
<a href="./portal.html" class="portal">🔑 Sign in</a>
</nav>
<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.
Register a top-level domain, register a name under one, look up records,
verify anything against the chain.</p>
<div style="margin:1.6rem auto 0;max-width:640px;padding:0 1rem">
<input id="search-input" type="search"
placeholder="type a name — e.g. hello"
spellcheck="false" autocomplete="off"
style="width:100%;padding:14px 18px;border-radius:12px;border:1px solid #ffffff22;background:#141a24;color:var(--ink);font-size:17px;outline:none;font-family:inherit"
aria-label="Search a name across every BCNR TLD">
<div id="search-hint" style="margin-top:8px;font-size:12.5px;color:var(--mut);text-align:center">
One search checks the label across every TLD in the registry. Available names appear first.
</div>
<div id="search-results" style="margin-top:14px;display:grid;gap:8px;text-align:left"></div>
</div>
<div class="cta" style="margin-top:1.4rem">
<a class="btn ghost" href="#try">Or browse what you can do →</a>
<a class="btn ghost" href="./docs/">Read the docs</a>
</div>
</header>
<style>
/* Inline search card styling: mirrors register.html's .card look. */
#search-results .row-card{display:grid;grid-template-columns:1fr auto auto auto;gap:12px;align-items:center;
background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:11px 16px;min-height:48px}
#search-results .row-card.checking{opacity:.55}
#search-results .row-card .n{font-family:ui-monospace,monospace;font-size:15px;overflow-wrap:anywhere}
#search-results .row-card .btn{padding:6px 12px;font-size:12.5px}
#search-results .row-card .price{
color:var(--acid);font-family:ui-monospace,monospace;font-size:14px;font-weight:600;
padding:2px 8px;border-radius:6px;background:rgba(214,255,61,.10);white-space:nowrap
}
#search-results .badge{font-size:11px;padding:2px 10px;border-radius:999px;font-weight:600;white-space:nowrap}
#search-results .b-ok{background:rgba(79,209,165,.15);color:var(--ok)}
#search-results .b-taken{background:rgba(246,118,138,.15);color:var(--taken)}
#search-results .b-check{background:rgba(139,152,169,.14);color:var(--mut)}
@media (max-width:520px){
#search-results .row-card{grid-template-columns:1fr auto;gap:8px}
#search-results .row-card .btn{justify-self:start}
}
</style>
<script>
// Inline name search — same UX as register.html but no wallet dependencies.
// Hits POST-friendly /api/labels/<label> (one call, returns every taken
// match across every TLD from the gateway's cached index) and cross-checks
// against the client-side TLDS list. Register buttons hand the label off
// to register.html?q= for the full mint flow.
(function () {
// Fallback list, used until /api/tlds answers (js/pricing.js loads it).
// The live list drops TLDs their owners switched off and carries the
// owner-set prices, so it wins whenever it is available.
let TLDS = [
"bch","p2p","bit","nav","test","x","asm","neo","gt","sc",
"sia","dex","cex","nt","dea","hub","os","vpn",
];
// .com is held off the public registry (2026-08-29) regardless of what
// the API says — the operator holds it; nobody buys names under it yet.
const NEVER_SELL = new Set(["com"]);
async function liveTlds() {
const sp = window.siriusPricing;
if (!sp) return TLDS;
await sp.tldReady();
const live = sp.visibleTlds();
if (live && live.length) TLDS = live.filter((t) => !NEVER_SELL.has(t) && sp.tldSellable(t).ok);
return TLDS;
}
const $ = (id) => document.getElementById(id);
const esc = (s) => String(s).replace(/[&<>"']/g, (c) => ({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[c]));
const clean = (v) => v.toLowerCase().replace(/[^a-z0-9-]/g, "").slice(0, 32);
let lastReq = 0, timer = null;
function row(full, state) {
const badge = state === "ok" ? '<span class="badge b-ok">available</span>'
: state === "taken" ? '<span class="badge b-taken">taken</span>'
: '<span class="badge b-check">checking…</span>';
// Label price (rendered only for available names). Tier logic lives in
// pricing.js so landing / tld.html / the mint modal all agree.
let price = "";
if (state === "ok" && window.siriusPricing) {
const [label, tld] = full.split(".");
const p = window.siriusPricing.priceForName(label, tld);
const why = p.ownerSet ? `price set by the .${tld} owner` : p.tier;
price = `<span class="price" title="${esc(why)}">${esc(window.siriusPricing.formatUsd(p.usd))}</span>`;
}
const btn = state === "ok"
? `<button class="btn acid" data-register="${esc(full)}">Register →</button>`
: state === "taken"
? `<a class="btn ghost" href="https://navigate.st/bns/${encodeURIComponent(full)}" target="_blank" rel="noopener">view →</a>`
: "<span></span>";
return `<div class="row-card ${state === "checking" ? "checking" : ""}"><span class="n">${esc(full)}</span>${badge}${price}${btn}</div>`;
}
async function search(label) {
const my = ++lastReq;
const out = $("search-results");
// Immediate feedback: paint one 'checking' row per TLD so the user
// sees something is happening in the ~300ms before results land.
out.innerHTML = TLDS.map((t) => row(`${label}.${t}`, "checking")).join("");
let taken = new Set();
try {
const [r] = await Promise.all([
fetch(`https://silentmode.st/api/labels/${encodeURIComponent(label)}`),
liveTlds(), // owner prices + on/off state, same round-trip
]);
if (r.ok) {
const j = await r.json();
for (const m of (j.matches || [])) taken.add(m.name);
}
} catch { /* fall through: everything shows as "checking" then flips to error-free available; a gateway blip shouldn't block the user */ }
if (my !== lastReq) return; // superseded by newer keystroke
const rows = TLDS
.map((t) => ({ full: `${label}.${t}`, state: taken.has(`${label}.${t}`) ? "taken" : "ok" }))
.sort((a, b) => (a.state === "ok" ? 0 : 1) - (b.state === "ok" ? 0 : 1));
out.innerHTML = rows.map((x) => row(x.full, x.state)).join("");
// Wire Register buttons — hand the chosen name off to the shared mint
// flow (js/register-flow.js exposes window.siriusRegisterName).
out.querySelectorAll("[data-register]").forEach((b) => {
b.onclick = () => {
const name = b.getAttribute("data-register");
if (typeof window.siriusRegisterName === "function") {
window.siriusRegisterName(name);
} else {
// Module still loading — retry once it settles.
b.textContent = "loading…"; b.disabled = true;
const t = setInterval(() => {
if (typeof window.siriusRegisterName === "function") {
clearInterval(t); b.disabled = false; b.textContent = "Register →";
window.siriusRegisterName(name);
}
}, 100);
}
};
});
}
$("search-input").addEventListener("input", () => {
clearTimeout(timer);
const v = clean($("search-input").value);
$("search-input").value = v;
if (!v) { $("search-results").innerHTML = ""; return; }
timer = setTimeout(() => search(v), 200);
});
$("search-input").addEventListener("keydown", (e) => {
if (e.key === "Enter") {
clearTimeout(timer);
const v = clean($("search-input").value);
if (v) search(v);
}
});
})();
</script>
<div class="wrap">
<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>
<div class="grid">
<div class="card">
<h3><span class="dot d-chain"></span> Register a name</h3>
<p>Pick a label, search across every TLD in the registry at once, mint the name
certificate straight into your own wallet. Renewals are per-TLD policy set by
the owner — the price the TLD sets is what you pay.</p>
<div class="cta"><a class="btn acid" href="#search-input">Search a name →</a></div>
</div>
<div class="card">
<h3><span class="dot d-chain"></span> Register a TLD</h3>
<p>A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry
operator for every second-level name under it, set the price yourself, and earn 90 % of the
fee on every name registered under it. Renewals are per-TLD policy that you control.</p>
<div class="cta">
<a class="btn acid" href="./tld.html">Search a TLD →</a>
<a class="btn ghost" href="./admin/">Operator admin →</a>
</div>
</div>
<div class="card">
<h3><span class="dot d-sia"></span> Look up &amp; verify</h3>
<p>Resolve any BCNR name, compare records across mirrors, and check the TLD registry snapshot
against the chain. Everything is publicly verifiable.</p>
<div class="cta"><a class="btn ghost" href="#verify">How to verify →</a></div>
</div>
<div class="card">
<h3><span class="dot d-srv"></span> 🔑 Sign in — your names portal</h3>
<p>Import your seed phrase or connect a wallet (Cashonize / Paytaca via WizardConnect) to see
every name you own, review records, and update them. Your keys never leave your browser.</p>
<div class="cta"><a class="btn acid" href="./portal.html">Open the portal →</a></div>
</div>
<div class="card">
<h3><span class="dot d-chain"></span> 🧭 Theseus Navigator</h3>
<p>The browser that speaks BCNR natively. Open <code>hello.bch</code> in the address bar —
it just resolves. TLS verified against on-chain fingerprints, no OS trust-store install.</p>
<div class="cta"><a class="btn ghost" href="./theseus/">Download →</a></div>
</div>
</div>
</section>
<section id="docs">
<h2>Documentation</h2>
<p class="lede">The full docs — TLD registry model, record types, resolver &amp; gateway paths,
mainnet pricing, verification, and the operator runbook pointer — live on their own page so
they can grow without cluttering the landing.</p>
<div class="cta" style="justify-content:flex-start;margin-top:1rem">
<a class="btn acid" href="./docs/">📚 Open the docs →</a>
<a class="btn ghost" href="https://silentmode.st/tlds/">Current TLD list</a>
</div>
</section>
<section id="request-tld">
<h2>Propose a new TLD</h2>
<p class="lede">The per-TLD registry means minting a TLD is a real, paid action — not a namespace
land-grab. During the alpha, all TLD mints are operator-signed. To propose a TLD, get in touch
via the channels below. The design (mainnet) adds an on-chain covenant with countersignature +
tiered USD price floors: 1-char $100k, 2-char $50k, 3-char $15k, 4-char $5k, 58-char $1k,
9+-char $250; one-time payment (not annual). See the design doc for the full model.</p>
<div class="note warn"><b>ICANN-adjacent TLDs are not open for public mint.</b> A TLD registry is
only useful if it does not immediately collapse into an ICANN-shadow — the mainnet covenant
enforces this; on chipnet the operator's countersignature is the gate.</div>
</section>
<section id="pantheon">
<h2>The pantheon</h2>
<p class="lede">Sirius.x is one of seven sibling <b>.x</b> names — the Silent Mode pantheon.
Each project is its own on-chain certificate; each site is reachable through any BCNR
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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
</div>
</div>
</section>
<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>
<div class="grid">
<div class="card">
<h3>Wallet &amp; name portal <span class="pill soon">next</span></h3>
<p>Sign in with your Bitcoin Cash wallet, see every name you own, edit records inline, mint or renew
from one place. Same self-custody as today — the portal never handles your keys.</p>
</div>
<div class="card">
<h3>Sirius Studio <span class="pill soon">planned</span></h3>
<p>An in-browser site editor for names you already own — the WordPress / Tilda / Wix pattern,
but the whole site persists to Sia and the name's <code>s3</code> record updates on save.
Sites live where the name says they live.</p>
</div>
<div class="card">
<h3>Decentralized git remote <span class="pill soon">MVP live</span></h3>
<p>The Silent Mode repo is served as a bare git tree over dumb-HTTP from
the VPS. Clone it with any git client, no login. Forgejo + Sia sync
for a proper decentralized backend is the next track.</p>
<pre style="margin-top:.8rem;font-size:12px">git clone https://silentmode.st/sirius-x/repo/silent-mode.git</pre>
<p style="margin-top:.5rem;font-size:12.5px">One-shot snapshot as a
downloadable git bundle (works when dumb-HTTP is blocked):</p>
<pre style="font-size:12px">curl -O https://silentmode.st/sirius-x/repo/silent-mode.bundle
git clone silent-mode.bundle silent-mode</pre>
</div>
</div>
</section>
<section id="verify">
<h2>Verify this page against the chain</h2>
<p class="lede">You do not have to trust that <code>sirius.x</code> is served by anyone specific.
The name's certificate is on the Bitcoin Cash chain; the records point to Sia; every path is
independently checkable.</p>
<h3>1. Confirm the certificate exists on chain</h3>
<pre>node --input-type=module -e "
import { loadWallet } from './Argus/src/lib/wallet.js';
import { resolveName } from './Argus/src/lib/bns.js';
const w = await loadWallet('main');
console.log(await resolveName(w.provider, 'sirius.x'));
process.exit(0);"</pre>
<h3>2. Fetch the TLD-registry snapshot from Nostr</h3>
<p class="lede">The operator-signed snapshot of the TLD list is published as a Nostr replaceable
event. Any relay carries it; the event's content field carries the current snapshot root.</p>
<dl class="verify">
<dt>Kind / d-tag</dt>
<dd>30078 / bns-tld-list</dd>
<dt>Pubkey (x-only, hex)</dt>
<dd>f2c925194c531c7c398017e35b2396df64a61a613aa5fadebdf1f4990f2267f4</dd>
<dt>Relays</dt>
<dd>wss://nos.lol · wss://relay.damus.io</dd>
</dl>
<h3>3. Reach this site via more than one route</h3>
<p class="lede">The same content should be served from at least two independent paths. If one
mirror is unavailable, the others still work. If two mirrors disagree, the on-chain record is
the tiebreaker.</p>
<ul style="color:var(--mut);font-size:14px;margin:.6rem 0 0;padding-left:1.2rem">
<li>Via any BCNR resolver: <code>https://sirius.x/</code> (requires the local root CA)</li>
<li>Via the public gateway: <code>https://navigate.st/bns/sirius.x</code></li>
<li>Via silentmode.st mirror: <code>https://silentmode.st/bns/sirius.x</code></li>
<li>Direct from Sia (content-addressed): the <code>s3</code> record on <code>sirius.x</code>
names the exact bucket key</li>
</ul>
</section>
</div>
<footer id="site-footer"></footer>
<!-- Shared mint flow — modal + wallet steps used to live in register.html.
The module injects its own modal into <body> and exposes
window.siriusRegisterName(fullName) for the search-result buttons. -->
<script type="importmap">
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
</script>
<script type="module" src="./js/register-flow.js?v=20260917bal"></script>
<script src="./js/pricing.js?v=20260917market"></script>
<script src="./js/session.js?v=20260917dash"></script>
<script src="./js/pin-escrow.js?v=20260909pin"></script>
<script defer src="./js/theme.js?v=20260920compact"></script>
<script defer src="./js/site-footer.js?v=20260917market"></script>
<script defer src="./js/profile-menu.js?v=20260920m"></script>
</body>
</html>