Skip to content

Commit 6d27f88

Browse files
Melvin Carvalhoclaude
andcommitted
Add demos.html — index of all demos, one sentence + working link each
Landing page grouping the demos (node/fullnode/tip · verify/fullchain · mesh · read) with a sentence and a clickable link (params baked in so the live ones work). Additive; nothing else touched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 635223f commit 6d27f88

1 file changed

Lines changed: 83 additions & 0 deletions

File tree

‎demos.html‎

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>bitcoin-kernel/browser-node — the demos</title>
7+
<style>
8+
:root { --bg:#fff; --fg:#16181d; --mut:#5b6470; --bd:#e6e8eb; --pan:#fafbfc; --ac:#e8830c; --ac2:#0969da; --good:#1a7f37; --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; color-scheme:light; }
9+
body { background:var(--bg); color:var(--fg); font:14px/1.55 var(--mono); max-width:780px; margin:24px auto; padding:0 16px 60px; }
10+
h1 { font-size:19px; } h2 { font-size:14px; color:var(--mut); text-transform:uppercase; letter-spacing:.05em; margin:26px 0 10px; font-weight:700; }
11+
a { color:var(--ac2); text-decoration:none; } a:hover { text-decoration:underline; }
12+
.demo { border:1px solid var(--bd); border-radius:8px; padding:12px 14px; background:var(--pan); margin:10px 0; }
13+
.demo .t { font-size:15px; font-weight:700; }
14+
.demo .d { color:var(--fg); margin:5px 0 7px; }
15+
.demo .m { color:var(--mut); font-size:12px; }
16+
.tag { display:inline-block; font-size:11px; border:1px solid var(--bd); border-radius:999px; padding:1px 8px; margin-left:6px; color:var(--mut); vertical-align:middle; }
17+
.tag.live { color:var(--ac); border-color:var(--ac); }
18+
.tag.self { color:var(--good); border-color:var(--good); }
19+
code { background:#fff; border:1px solid var(--bd); border-radius:4px; padding:0 4px; font-size:.92em; }
20+
.lead { color:var(--mut); }
21+
</style>
22+
</head>
23+
<body>
24+
<h1>bitcoin-kernel / browser-node — the demos</h1>
25+
<p class="lead">A Bitcoin <b>testnet4</b> node, piece by piece, in a browser tab. Each page below demonstrates one capability.
26+
Some need a <b>bridge</b> to a testnet4 peer (a tab can't open raw TCP); those links point at a live WebRTC bridge.
27+
<a href="how-it-works.html">how it all works →</a></p>
28+
29+
<h2>The node</h2>
30+
31+
<div class="demo">
32+
<div class="t"><a href="node.html?signal=wss://melvincarvalho.com/.webrtc&room=b17c0192abad1deacafe">Running node ▸ node.html</a><span class="tag live">live · needs bridge</span></div>
33+
<div class="d">The full pipeline in one dashboard: stream + validate the header chain, bootstrap the UTXO set from an assumeUTXO snapshot, validate blocks forward (full scripts + signatures, WASM secp, in a Web&nbsp;Worker), persist to OPFS, and check set-consistency with a SwiftSync 32-byte accumulator.</div>
34+
</div>
35+
36+
<div class="demo">
37+
<div class="t"><a href="fullnode.html?signal=wss://melvincarvalho.com/.webrtc&room=b17c0192abad1deacafe">Toward a full node ▸ fullnode.html</a><span class="tag live">live · needs bridge</span></div>
38+
<div class="d">The same node split into two tabs — <b>① Node</b> (sync · assumeUTXO · SwiftSync) which <b>follows the live tip</b> with a "listening" heartbeat, and <b>② Validation</b> (the full-consensus block checks, lifted into their own lane).</div>
39+
</div>
40+
41+
<div class="demo">
42+
<div class="t"><a href="tip.html?signal=wss://melvincarvalho.com/.webrtc&room=b17c0192abad1deacafe">Follow the tip ▸ tip.html</a><span class="tag live">live · needs bridge</span></div>
43+
<div class="d">Syncs the header chain to the tip, then <b>keeps pace</b> — validating each new header (proof-of-work, BIP94 difficulty, linkage) as testnet4 mines it, handling reorgs, live in the tab.</div>
44+
</div>
45+
46+
<h2>assumeUTXO &amp; SwiftSync</h2>
47+
48+
<div class="demo">
49+
<div class="t"><a href="verify.html">Verify the snapshot ▸ verify.html</a><span class="tag self">self-contained</span></div>
50+
<div class="d">Streams a Bitcoin Core <code>dumptxoutset</code> snapshot (the full <b>14.1M-coin</b> UTXO set) through the SwiftSync accumulator and confirms it hashes to the commitment <code>af37b01d…</code> — holding only <b>32 bytes</b> of state. Data source is a link param (HTTP or WebTorrent).</div>
51+
</div>
52+
53+
<div class="demo">
54+
<div class="t"><a href="fullchain.html">Validate from genesis ▸ fullchain.html</a><span class="tag">needs a local block-server</span></div>
55+
<div class="d">Streams blocks genesis→N through the SwiftSync accumulator (set-consistency) in the tab — the path past the 25&nbsp;GB UTXO-set wall, demonstrated end to end.</div>
56+
</div>
57+
58+
<h2>Propagation (the mesh)</h2>
59+
60+
<div class="demo">
61+
<div class="t"><a href="mesh.html?signal=wss://melvincarvalho.com/.webrtc&room=c0ffeebabe123456">Block propagation ▸ mesh.html</a><span class="tag live">open in two tabs</span></div>
62+
<div class="d">Two browser tabs become <b>Bitcoin peers to each other over WebRTC</b> — no server in the data path. One pulls thousands of real blocks from the network and <b>propagates them to the other</b>, which validates every one. Set the count with <code>?blocks=N</code>.</div>
63+
<div class="m">Open this link in <b>two</b> tabs, connect both, then hit “Seed”. Variants: <a href="mesh.html?signal=wss://melvincarvalho.com/.webrtc&room=c0ffeebabe123456&blocks=1000">1000</a> · <a href="mesh.html?signal=wss://melvincarvalho.com/.webrtc&room=c0ffeebabe123456">5000</a> · <a href="mesh.html?signal=wss://melvincarvalho.com/.webrtc&room=c0ffeebabe123456&blocks=10000">10000</a> blocks.</div>
64+
</div>
65+
66+
<h2>Read</h2>
67+
68+
<div class="demo">
69+
<div class="t"><a href="how-it-works.html">How it works ▸ how-it-works.html</a><span class="tag self">self-contained</span></div>
70+
<div class="d">The story, for a Bitcoiner: from a torrented snapshot to a node in a tab, the 25&nbsp;GB wall, and the 32-byte punchline — with diagrams.</div>
71+
</div>
72+
73+
<div class="demo">
74+
<div class="t"><a href="index.html">The eleven acts ▸ index.html</a><span class="tag self">self-contained</span></div>
75+
<div class="d">The original act-by-act showcase, each capability as its own small demonstration.</div>
76+
</div>
77+
78+
<p class="lead" style="margin-top:24px; border-top:1px solid var(--bd); padding-top:12px">
79+
The “live” demos use a WebRTC bridge to a real testnet4 peer (signaled by a JavaScript Solid Server pod). The bridge is pure
80+
transport — it can withhold data but can't forge anything; the tab validates everything. Hard-reload (<code>Ctrl/Cmd+Shift+R</code>)
81+
if a page was cached. <a href="https://github.com/bitcoin-kernel/browser-node">source</a> · <a href="AGENT.md">AGENT.md</a></p>
82+
</body>
83+
</html>

0 commit comments

Comments
 (0)