Studio chrome, template picker, publish dialog, the shorter dashboard menu and the Settings copy in all six languages. Dictionary cache version bumped.
519 lines
29 KiB
HTML
519 lines
29 KiB
HTML
<!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{position:fixed;bottom:20px;right:20px;z-index:99;
|
||
backdrop-filter:blur(10px);box-shadow:0 6px 20px rgba(0,0,0,.35)}
|
||
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);
|
||
border-bottom:1px solid var(--line)}
|
||
.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=20260917f"></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="./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"/><circle cx="32" cy="32" r="3" fill="#0b0e14"/></svg>Theseus</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) => ({"&":"&","<":"<",">":">",'"':""","'":"'"}[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. No yearly renewal.</p>
|
||
<p class="price" style="color:var(--acid);font-family:ui-monospace,monospace;font-size:13px;margin:.6rem 0 0">
|
||
≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢
|
||
</p>
|
||
<p style="color:var(--dim);font-size:11.5px;margin:.3rem 0 0">
|
||
Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.
|
||
</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, and earn 90 % of the fee on every name
|
||
registered under it. Renewals are per-TLD policy set by the owner.</p>
|
||
<p class="price" style="color:var(--acid);font-family:ui-monospace,monospace;font-size:13px;margin:.6rem 0 0">
|
||
≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust
|
||
</p>
|
||
<p style="color:var(--dim);font-size:11.5px;margin:.3rem 0 0">
|
||
Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.
|
||
</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> ⭐ 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" } }
|
||
</script>
|
||
<script type="module" src="./js/register-flow.js?v=20260917dash"></script>
|
||
|
||
<script src="./js/pricing.js?v=20260916private"></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=20260910font"></script>
|
||
<script defer src="./js/site-footer.js?v=20260907rel"></script>
|
||
<script defer src="./js/profile-menu.js?v=20260908tabs"></script>
|
||
</body>
|
||
</html>
|