prometheus: standalone identity + first-wave Silent Mode listings

Four changes, one coherent pass:

1. Prometheus gets its own flame mark (SVG, not an emoji). Used in the
   topnav brand, in the hero at 88 px, and as the favicon. Replaces the
   🔥 glyph in the service and in site/prometheus/index.html.

2. silentmode.st/prometheus is now a brief introduction with two big
   buttons (Open prometheus.x · Open apps.silentmode.st mirror) and a
   short "what / who / status" block, instead of the full category
   grid that duplicated what prometheus.x already renders. The /prometheus
   page's job on silentmode.st is "point you at the real site," not host
   the content.

3. Footer on the Prometheus service drops the "Silent Mode — a Deviant
   project" byline and reframes the sibling-x links as "Also live in the
   decentralized web:" so Prometheus reads as its own site rather than a
   Silent Mode subpage. Keeps the attribution via the MPL-2.0 + source
   link on the final line. aegis.x and pithos.x added to the sibling row.

4. Four Silent Mode apps seeded as first-wave listings
   (scripts/seed-listings.json + scripts/seed.mjs). Theseus Navigator,
   Ariadne's Thread (Windows + Android), Pithos. Each carries the
   project's own SVG icon from public/icons/, pulled from the project's
   own site. The seed is a direct-DB insert (not through /api/listing)
   with signer_address = chipnet operator and signature = sentinel
   `SM_OPERATOR_SEED`; scan_report is an operator-attested envelope
   signed by the service key so the display pipeline is unchanged. Run
   with `node scripts/seed.mjs`; idempotent (skips existing (publisher,
   slug)).

   Deliberately NOT seeded: Theseus extensions that have no standalone
   form — pdf-editor, docx-editor, shield-blocker, bergamot provider.
   They ship via Theseus's own OTA, not as Prometheus listings. Aegis
   is in the same boat today (a Theseus bundled add-on without a
   standalone binary); its icon is included in public/icons/ for when
   it has its own distribution.

Real file sizes + SHAs come from the current dl.silentmode.st manifest
(theseus 0.3.89, ariadne resolver 0.1.13, ariadne android 0.22,
pithos-desktop 0.3.26). When APS1 lands cross-session, these listings
migrate to real on-chain records signed by each project's own publisher
key and the sentinel values go away.
This commit is contained in:
Local Dev 2026-10-09 01:23:21 +02:00
parent d3438331f4
commit b6abf70ea6

View file

@ -3,43 +3,24 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Prometheus — apps and programs on the decentralized web — Silent Mode</title>
<meta name="description" content="Prometheus is a home for apps, programs, and dApps published on the Bitcoin Cash chain. Listings live on chain, binaries live on Sia, endorsements are signed. Anyone can publish; nobody can gatekeep.">
<title>Prometheus — the decentralized app directory — Silent Mode</title>
<meta name="description" content="Prometheus is a home for apps published on the Bitcoin Cash chain. The directory itself lives at prometheus.x, resolvable in Theseus and Ariadne. This page is the plain-DNS introduction.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Silent Mode">
<meta property="og:title" content="Prometheus — apps and programs on the decentralized web — Silent Mode">
<meta property="og:description" content="Prometheus is a home for apps, programs, and dApps published on the Bitcoin Cash chain. Listings live on chain, binaries live on Sia, endorsements are signed. Anyone can publish; nobody can gatekeep.">
<meta property="og:title" content="Prometheus — the decentralized app directory">
<meta property="og:description" content="A home for apps published on the Bitcoin Cash chain, hosted on Sia, endorsed by signature. Live at prometheus.x.">
<meta property="og:url" content="https://silentmode.st/prometheus">
<meta property="og:image" content="https://silentmode.st/brand/og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<link rel="stylesheet" href="shared.css?v=20260910">
<style>
/* Category grid — visually distinct from the homepage's tool cards so the two
don't blur together. Prometheus is a shop; the homepage is a foyer. */
.categories{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:1rem}
.cat{
background:var(--panel);border:1px solid var(--line);border-radius:14px;
padding:20px 22px;text-decoration:none;color:inherit;
transition:transform .18s ease, border-color .18s ease, background .18s ease;
display:flex;flex-direction:column;gap:.6rem;
}
.cat:hover{transform:translateY(-3px);border-color:rgba(214,255,61,.35);background:var(--panel2)}
.cat .ico{font-size:26px;line-height:1;filter:grayscale(.2)}
.cat h3{margin:.1rem 0 0;font-size:1.02rem}
.cat .count{color:var(--dim);font-size:12px;letter-spacing:.02em;margin-top:auto;padding-top:.4rem}
.cat.empty .count::before{content:"— ";color:var(--dim)}
.banner{
background:linear-gradient(180deg, rgba(214,255,61,.06), rgba(255,255,255,.01));
border:1px solid rgba(214,255,61,.18);border-radius:14px;
padding:22px 24px;margin:2rem 0 1.4rem;
}
.banner h3{margin:0 0 .3rem;font-size:1.1rem}
.banner p{margin:.2rem 0 0;color:var(--mut);font-size:14.5px}
</style>
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<style>
.flamemark{width:84px;height:84px;margin:0 auto 1rem;display:block}
.cta-row{display:flex;gap:.8rem;justify-content:center;flex-wrap:wrap;margin-top:1.6rem}
.mono-x{color:var(--acid);font-family:ui-monospace,monospace}
</style>
</head>
<body>
@ -55,179 +36,79 @@
</nav>
<header class="hero">
<div class="mark" style="font-size:52px">🔥</div>
<h1>Prometheus
<span class="pill p-designed" style="vertical-align:middle;font-size:12px;margin-left:.6rem">designed · not yet built</span>
</h1>
<p class="tag">A home for apps, programs, dApps, and libraries — <b>listed on the Bitcoin
Cash chain, hosted on Sia, endorsed by signature</b>. Anyone can publish. Nobody can
gatekeep. Named for the one who gave fire to humans and did not ask the gods first.</p>
<svg class="flamemark" viewBox="0 0 64 64" aria-hidden="true">
<path d="M32 6 C 38 18 46 24 46 36 C 46 48 40 56 32 56 C 24 56 18 48 18 36 C 18 28 24 22 20 14 C 26 18 30 20 32 6 Z" fill="#d6ff3d"/>
<path d="M32 20 C 36 28 40 32 40 40 C 40 48 36 52 32 52 C 28 52 24 48 24 40 C 24 34 28 30 32 20 Z" fill="#0b0e14"/>
<circle cx="32" cy="44" r="3" fill="#d6ff3d"/>
</svg>
<h1>Prometheus</h1>
<p class="tag">A home for apps published on the Bitcoin Cash chain —
<b>listings on chain, binaries on Sia, scan reports signed, endorsements signed</b>.
Anyone can publish. Nobody can gatekeep.</p>
<div class="cta-row">
<a class="btn acid" href="https://prometheus.x/">Open prometheus.x →</a>
<a class="btn ghost" href="https://apps.silentmode.st/">Open the apps.silentmode.st mirror</a>
</div>
<p style="color:var(--dim);font-size:13px;margin-top:1.2rem">
<span class="mono-x">prometheus.x</span> is a BCNR name — it resolves in
<a href="theseus">Theseus</a> or any browser with
<a href="theseus#ariadne">Ariadne's Thread</a> installed. The
<span class="mono-x">apps.silentmode.st</span> mirror serves the same
content over ICANN DNS for browsers without it.
</p>
</header>
<div class="wrap">
<div class="wrap narrow">
<!-- ============ CATEGORIES ============ -->
<section class="plain">
<h2>Browse by category</h2>
<p class="lede">On a conventional store, one company decides which shelf an app belongs
on. Here the publisher labels their own listing, and your trust list decides whether
to show it. The categories below are the initial shape; a new one gets proposed by
publishing a listing against it.</p>
<h2>What Prometheus is</h2>
<p>A directory of apps that publish themselves. Each listing is a signed
record on the Bitcoin Cash chain pointing at a manifest on Sia. The binary
lives wherever the publisher put it — often a Sia bucket Silent Mode hosts
on their behalf, sometimes the publisher's own HTTPS endpoint. The listing
carries the SHA-256 the file must match; the client refuses to install
anything whose bytes disagree.</p>
<div class="categories">
<a class="cat empty" href="#soon"><div class="ico">💬</div>
<h3>Communication</h3>
<p>Messengers, voice, boards, group chats. Clients that route through peers rather
than someone else's server.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">🛡️</div>
<h3>Privacy &amp; security</h3>
<p>Tor and mix-net tooling, key and vault managers, disk crypto. The things a
conventional store delists first when a government writes.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">💸</div>
<h3>Wallets &amp; payments</h3>
<p>BCH wallets, cross-chain bridges, point-of-sale terminals. The chain publishes
the listing and the chain settles the payment.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">🎮</div>
<h3>Games</h3>
<p>Standalone titles, on-chain leaderboards, in-app purchases that reach the
publisher instead of a 30% toll.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">🧰</div>
<h3>Developer tools</h3>
<p>SDKs, libraries, indexers, faucets, protocol utilities. The pieces other apps
on this list are built out of.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">🎧</div>
<h3>Media &amp; publishing</h3>
<p>Readers, players, one-file blogs, podcast hosts. Clients that find their
audience without going through an aggregator.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">⚙️</div>
<h3>Utilities</h3>
<p>File tools, format converters, backup, calculators. The small sharp things that
solve one problem and do not ask for an account first.</p>
<span class="count">0 listings</span>
</a>
<a class="cat empty" href="#soon"><div class="ico">✨</div>
<h3>Everything else</h3>
<p>Anything that does not fit above. New categories are proposed in-band — any
listing can declare one and clients will offer to add it.</p>
<span class="count">0 listings</span>
</a>
</div>
<div class="banner" id="soon">
<h3>No live listings yet.</h3>
<p>The listing protocol (<code class="inline">APS1</code> record on chain) and the
submission flow are next. In the meantime, <a href="tools">Silent Mode's own
clients</a> are the working proof that a chain-hosted download flow can be verified
end-to-end.</p>
</div>
<p>Scan reports are signed by Prometheus (ClamAV plus VirusTotal where a
key is configured) and attached to the listing. Readers' trust lists —
which BNS names they follow — decide whether a listing passes their own
filter. There is no central approval queue and no editorial pick.</p>
</section>
<!-- ============ HOW IT WORKS ============ -->
<section>
<h2>How Prometheus works</h2>
<ol class="steps">
<li><b>A listing is a signed on-chain record.</b>
<span>Publishing an app writes a small <code class="inline">APS1</code> record
to Bitcoin Cash — same protocol shape as a BNS name registration, different
prefix. The payload is a hash pointing at a full manifest stored on Sia:
name, description, category, icon, version, download URL, binary SHA-256, and
signing-cert fingerprint. Nobody approves the record; the transaction is the
publish.</span></li>
<li><b>The binary lives on Sia.</b>
<span>App files are uploaded to the Sia storage network — encrypted on the
publisher's machine, sharded across roughly 30 independent hosts, held by
nobody in particular. The listing carries the SHA-256 the file must match. If
the mirror serves a byte off, the client refuses to install it.</span></li>
<li><b>Reviews are signed endorsements you filter.</b>
<span>An endorsement is a signed statement on chain: "I, <code class="inline">alice.bch</code>,
vouch for this app." Your client shows the endorsements from names on trust
lists you subscribe to — a security researcher's, a friend's, your own. A
one-star review from a bot you don't follow simply doesn't render. Curated
registries and formal reputation come later; permissionless comes first.</span></li>
<li><b>Install verifies against the chain.</b>
<span>The Ariadne clients pull the file from wherever the listing says (Sia,
mirror, your own server), check the SHA-256 against the on-chain record, check
the signing certificate against the fingerprint, and only then install. Same
principle as verifying a website — the chain is the truth, not the mirror.</span></li>
</ol>
</section>
<!-- ============ FOR PUBLISHERS ============ -->
<section>
<h2>Publishing an app</h2>
<h2>Who's it for</h2>
<div class="grid">
<div class="card">
<span class="pill p-live">available today</span>
<h3>Register a name</h3>
<p>Every publisher needs a name to sign as. Any BNS name works — the same one you'd
register at <a href="sirius">Sirius</a>. Fractions of a cent, no monthly bill.</p>
<h3>Readers</h3>
<p>Browse by category on <a href="https://prometheus.x/browse">prometheus.x/browse</a>.
Install verifiably: the Ariadne clients check the SHA-256 and the
signing certificate before running anything.</p>
</div>
<div class="card">
<span class="pill p-live">available today</span>
<h3>Host on Sia</h3>
<p>Upload the app binary + manifest to a Sia bucket you control. Silent Mode's own
gateway can host on your behalf if you don't want to run a Sia daemon.</p>
<h3>Publishers</h3>
<p>Upload a binary, write a manifest, sign the APS1 record with the key
for your BNS name. One transaction, fractions of a cent. Full walkthrough at
<a href="https://prometheus.x/publish">prometheus.x/publish</a>.</p>
</div>
<div class="card">
<span class="pill p-designed">designed</span>
<h3>Publish the listing</h3>
<p>One transaction: <code class="inline">APS1</code> record with the manifest hash,
signed by your name's key. From that moment on, anyone can find your app by
browsing the category, and the client can install it verifiably.</p>
</div>
<div class="card">
<span class="pill p-designed">designed</span>
<h3>Ship updates</h3>
<p>An update is another signed record referencing the same app id. Clients pull
updates the same way they installed the app — verify against the chain, then
install. Nobody can push a hostile update without your key.</p>
<h3>Reviewers</h3>
<p>Publish signed endorsements of apps you vouch for. Readers who follow
your name see your endorsements marked on the listing; those who do
not, don't. The trust graph is the real curation layer.</p>
</div>
</div>
</section>
<!-- ============ HONEST LIMITS ============ -->
<section>
<h2>Honest boundaries</h2>
<div class="grid">
<div class="card">
<h3>Not a curator</h3>
<p>Prometheus does not decide what is on it. Malware can be published — as it can
on any store. Trust lists and endorsements are what filter your view. If nobody
you trust endorses it, your client says so.</p>
</div>
<div class="card">
<h3>Not a moderator</h3>
<p>Content that is illegal in your jurisdiction is your responsibility to avoid,
same as any other permissionless network. Silent Mode operates infrastructure;
it does not decide what runs on it.</p>
</div>
<div class="card">
<h3>Storage costs money</h3>
<p>Sia hosting is inexpensive but not free — publishers pay for the bytes their
apps take. There is no advertising model, no data harvesting, no subscription.
Storage is the only cost, and it is small.</p>
</div>
</div>
<h2>Status</h2>
<p>The service is live at <span class="mono-x">prometheus.x</span> on chipnet.
Opening listings for the first wave now; the on-chain record format
(<code class="inline">APS1</code>) is being finalised alongside parallel
BNS covenant work, so first-wave listings are signed service-side and will
migrate to on-chain APS1 records when the format lands. First-wave hosting
is free; a per-listing fee kicks in later to cover Sia storage.</p>
</section>
<div class="note warn"><b>Status: designed, not yet built.</b> The listing protocol
(<code class="inline">APS1</code>) exists on paper — see
<code class="inline">_coordination/sessions/mobile-resolver.md</code>. The browsing UI,
publish flow, and trust-list plumbing are next. This page will look the same when
Prometheus is live; the "0 listings" counters just start counting up.</div>
</div>
<footer>