2026-09-20 19:20:30 +02:00
<!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)}
/* Adaptive side nav: overlay on top of centred content, semi-transparent.
Text on wide, icons on medium, bottom bar on mobile — same shape as
Theseus.X so both sites read as one family. */
:root{--sn-w:200px}
.sidenav{position:fixed;top:56px;left:0;bottom:0;width:var(--sn-w);z-index:15;
background:transparent;padding:32px 12px 22px 18px;
overflow-y:auto;pointer-events:none;transition:width .15s ease}
.sidenav a{display:flex;align-items:center;gap:14px;color:var(--mut);text-decoration:none;
padding:9px 12px;border-radius:10px;
font-size:14.5px;font-weight:500;opacity:.35;pointer-events:auto;
transition:opacity .12s,color .12s,background .12s,backdrop-filter .12s}
.sidenav a .ic{flex:none;width:22px;font-size:18px;line-height:1;text-align:center;
display:none;justify-content:center;align-items:center}
.sidenav a .lb{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidenav a:hover{opacity:1;color:var(--ink);background:rgba(11,14,20,.72);backdrop-filter:blur(8px)}
.sidenav a.active{opacity:.85;color:var(--acid)}
.sidenav a.active:hover{opacity:1}
section,#search-input{scroll-margin-top:70px}
@media (max-width:1180px){
:root{--sn-w:64px}
.sidenav{padding:22px 6px}
.sidenav a{justify-content:center;padding:12px 4px;gap:0}
.sidenav a .ic{display:inline-flex}
.sidenav a .lb{display:none}
}
@media (max-width:720px){
:root{--sn-w:0}
body{padding-bottom:64px}
.sidenav{top:auto;bottom:0;left:0;right:0;width:100%;height:auto;
padding:4px;flex-direction:row;background:rgba(11,14,20,.52);
display:flex;justify-content:space-around;overflow-x:auto}
.sidenav a{flex:1;min-width:56px;padding:10px 6px;justify-content:center;gap:0;opacity:.5}
.sidenav a .ic{display:inline-flex}
.sidenav a .lb{display:none}
}
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=20260920g" > < / script >
< / head >
< body >
< nav class = "topnav" >
< a class = "brand" href = "./" > < svg width = "18" height = "18" viewBox = "0 0 64 64" style = "vertical-align:-4px;margin-right:6px" aria-hidden = "true" > < rect width = "64" height = "64" rx = "12" fill = "#0b0e14" / > < path d = "M32 4 L36.4 27.6 L60 32 L36.4 36.4 L32 60 L27.6 36.4 L4 32 L27.6 27.6 Z" fill = "#d6ff3d" / > < / svg > < span class = "g" > Sirius.X< / span > < / 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 >
< aside class = "sidenav" aria-label = "On this page" >
< a href = "#search-input" title = "Register a name" > < span class = "ic" aria-hidden = "true" > ✏️< / span > < span class = "lb" > Register< / span > < / a >
< a href = "#try" title = "Try it" > < span class = "ic" aria-hidden = "true" > ⚡< / span > < span class = "lb" > Try it< / span > < / a >
< a href = "#docs" title = "Documentation" > < span class = "ic" aria-hidden = "true" > 📚< / span > < span class = "lb" > Docs< / span > < / a >
< a href = "#request-tld" title = "Propose a new TLD" > < span class = "ic" aria-hidden = "true" > 🌐< / span > < span class = "lb" > Propose TLD< / span > < / a >
< a href = "#pantheon" title = "The pantheon" > < span class = "ic" aria-hidden = "true" > 🏛< / span > < span class = "lb" > Pantheon< / span > < / a >
< a href = "#roadmap" title = "What's coming" > < span class = "ic" aria-hidden = "true" > 🗺< / span > < span class = "lb" > Roadmap< / span > < / a >
< a href = "#verify" title = "Verify against chain" > < span class = "ic" aria-hidden = "true" > 🔐< / span > < span class = "lb" > Verify< / span > < / a >
< / aside >
< header class = "hero" >
< div class = "mark" > < svg width = "56" height = "56" viewBox = "0 0 64 64" aria-hidden = "true" > < rect width = "64" height = "64" rx = "12" fill = "#0b0e14" / > < path d = "M32 4 L36.4 27.6 L60 32 L36.4 36.4 L32 60 L27.6 36.4 L4 32 L27.6 27.6 Z" fill = "#d6ff3d" / > < / svg > < / 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) => ({"&":"& ","< ":"< ",">":"> ",'"':"" ","'":"' "}[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 & 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 & 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, 5– 8-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 > < svg width = "16" height = "16" viewBox = "0 0 64 64" style = "vertical-align:-3px;margin-right:4px" aria-hidden = "true" > < rect width = "64" height = "64" rx = "12" fill = "#0b0e14" / > < path d = "M32 4 L36.4 27.6 L60 32 L36.4 36.4 L32 60 L27.6 36.4 L4 32 L27.6 27.6 Z" fill = "#d6ff3d" / > < / svg > 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 & 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?v=20260920usd" } }
< / script >
< script type = "module" src = "./js/register-flow.js?v=20260920usd" > < / script >
< script src = "./js/pricing.js?v=20260920bits" > < / 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=20260920bits" > < / script >
< script >
// Sidenav scroll-spy: highlight the section currently in view.
// Uses scroll-position tracking so short sections at the end of the page
// still activate their link when the reader scrolls to them.
(() => {
const links = document.querySelectorAll(".sidenav a[href^='#']");
if (!links.length) return;
const entries = [];
links.forEach((a) => { const el = document.querySelector(a.getAttribute("href")); if (el) entries.push({ el, link: a }); });
if (!entries.length) return;
const setActive = (link) => { links.forEach((l) => l.classList.remove("active")); link.classList.add("active"); };
const update = () => {
const doc = document.documentElement;
const scrollBottom = window.scrollY + window.innerHeight;
if (scrollBottom >= (doc.scrollHeight - 4)) { setActive(entries[entries.length - 1].link); return; }
const line = window.scrollY + window.innerHeight * 0.35;
let active = entries[0].link;
for (const e of entries) {
if (e.el.getBoundingClientRect().top + window.scrollY < = line) active = e.link;
else break;
}
setActive(active);
};
window.addEventListener("scroll", update, { passive: true });
window.addEventListener("resize", update);
update();
})();
< / script >
< / body >
< / html >