diff --git a/scripts/test-listing-roundtrip.mjs b/scripts/test-listing-roundtrip.mjs
index 35f6108..46d927a 100644
--- a/scripts/test-listing-roundtrip.mjs
+++ b/scripts/test-listing-roundtrip.mjs
@@ -28,7 +28,7 @@ import { signMessageBip137, addressFromPrivateKey } from '../service/lib/sign-me
const BASE = process.env.BASE || 'http://127.0.0.1:3700';
const PUBLISHER = process.env.PUBLISHER || 'testpub.x';
const SLUG = process.env.SLUG || `hello-world-${Date.now()}`;
-const CATEGORY = process.env.CATEGORY || 'utilities';
+const CATEGORY = process.env.CATEGORY || 'productivity';
// A hard-coded deterministic test key — this is NEVER a real wallet key, just
// a predictable 32-byte scalar so the roundtrip script can print the matching
diff --git a/service/pages.js b/service/pages.js
index a24a55c..2fa736c 100644
--- a/service/pages.js
+++ b/service/pages.js
@@ -307,97 +307,401 @@ export function submit() {
return {
title: 'Submit an app',
description:
- 'Upload an app to Prometheus. We scan it, generate the manifest and the APS1 record, you sign with your BNS key and the listing goes on chain.',
+ 'Upload an app to Prometheus. We scan it, generate the manifest, you sign with your BNS key and the listing goes live.',
here: '/submit',
body: `
Submit an app
-
Upload, scan, sign, publish. Four screens; your key stays with you.
+
Upload → fill manifest → sign with your wallet → publish.
+ Your key stays with you.
+
-
Milestone 1 of 4: upload + scan. This step is
- live and testable. The next milestone wires the manifest and APS1 record
- (see the publishers' walkthrough); payment and the
- on-chain publish come after that.
-
-
-
1. Upload the binary.
- Pick a file (any file — we don't care what the format is, only
- what ClamAV says about the bytes). The server scans it, hashes it,
- and hands back a signed scan report.
-
2. Fill the manifest.
- Name, description, category, version, icon URL. Scan verdict is
- attached automatically. Not wired yet.
-
3. Sign with your BNS key.
- The service shows the APS1 payload. Sign in Theseus, paste a
- BIP-137 signature from any BCH wallet, or import your name's mnemonic
- once in the page (wiped on close). Not wired yet.
-
4. Pay the listing fee (eventually).
- Free during the opening wave; a BCH invoice for the per-listing
- fee once storage costs cross a threshold. Not wired yet.
Pick any file to send through the scanner. The upload is
- accepted, SHA-256'd, and either kept (clean) or discarded (infected or
- error). Nothing is published; this is just the scan step.
+
+
+
1 · Upload the binary
+
The server scans with ClamAV + VirusTotal (where configured),
+ computes the SHA-256, and attaches a signed scan report to your listing.
+ Only clean uploads can proceed.
-
-
+
+
Upload accepted
+
+ ·
+ ·
+
+
+
+
+
+
+
+
+
+
2 · Describe your listing
+
Every field is signed in step 3, so take a minute — editing
+ the signed payload is a new signature, not a quick fix.
+
+
+
+
+
+
+
3 · Sign with your BNS key
+
The message below carries every field from step 2 in canonical
+ form. Sign it with the BCH key for the address that owns
+ your name on chipnet.
+ Any BIP-137 wallet works (Electron Cash, Deviant, Cashonize, Theseus's Aegis).
+
+
Message to sign
+
+
+
+ Theseus wallet detected.
+
Aegis is injected on this page. Sign without pasting.
+
+
+
+
+
Or paste a BIP-137 signature
+
Base64, 88 characters. From any wallet's "sign message" dialog.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
4 · Publish
+
POSTs the signed listing to /api/listing.
+ The server re-verifies the signature against the on-chain owner of your BNS
+ name and stores the row. The listing is live on browse the moment the POST
+ returns 201.