Skip to content

Commit 7556c94

Browse files
committed
web: add back-of-the-envelope sizing section; widen page so nav fits
Distill the multi-resolution-clock-chains sizing model into a simple 'Back of the envelope' section: a device table (Pi Zero 64 MB / phone 1 GB / server 32 GB) showing the recent-event floor, a 10-year-old event's bracket, and reach per storage budget, plus the worst-case aged precision fractions. Add a 'What it takes to build the graph' trio of cards for the per-node storage, network, and CPU costs (L*C ~1 KB ticks flat forever; ~1 tick/s to ~10 neighbors + the ~40 KB single-UDP proof; ~1 hash+sign/s, ~1.25x for eight chains). Widen --maxw 1140->1280 so the 7-item top nav fits on one line.
1 parent 262ed16 commit 7556c94

1 file changed

Lines changed: 54 additions & 1 deletion

File tree

index.html

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
--accent-ink:#0b1322;
4040
--verified: #52c79c;
4141
--shadow: 0 24px 60px -28px rgba(0,0,0,0.65);
42-
--maxw: 1140px;
42+
--maxw: 1280px;
4343

4444
--f-display: "Newsreader", Georgia, "Times New Roman", serif;
4545
--f-body: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
@@ -224,6 +224,9 @@
224224
.section-head { max-width: 62ch; margin-bottom: 3rem; }
225225
.section-head h2 { font-size: clamp(1.95rem, 3.6vw, 2.9rem); }
226226
.section-head p { color: var(--ink-soft); font-size: 1.12rem; margin-top: 1.1rem; }
227+
.subhead { font-family: var(--f-display); font-weight: 500; letter-spacing: -0.012em; font-size: clamp(1.4rem, 2.4vw, 1.9rem); margin: 3.6rem 0 1.7rem; }
228+
.fine { color: var(--ink-faint); font-size: 0.92rem; margin-top: 1.15rem; max-width: 78ch; }
229+
.fine b { color: var(--accent); font-weight: 500; }
227230

228231
.lede { max-width: 60ch; }
229232
.lede p + p { margin-top: 1.2rem; }
@@ -755,6 +758,56 @@ <h3>What you gain</h3>
755758
</div>
756759
</section>
757760

761+
<!-- BACK OF THE ENVELOPE -->
762+
<section id="numbers">
763+
<div class="wrap">
764+
<div class="section-head reveal">
765+
<p class="eyebrow">Back of the envelope</p>
766+
<h2>Pick a storage budget. Everything else follows.</h2>
767+
<p>A node runs several clock chains at once — one fast, each of the rest a step slower — keeps a fixed number of ticks on every chain, and prunes the rest. Storage then stays flat forever: recent moments are pinned to the second, and older ones widen gently with age. Here is what a given budget buys, at a steady one tick per second.</p>
768+
</div>
769+
770+
<div class="table-scroll reveal">
771+
<table>
772+
<thead>
773+
<tr>
774+
<th scope="col">Device</th>
775+
<th scope="col">Storage budget</th>
776+
<th scope="col">Pinned to the second</th>
777+
<th scope="col">A 10-year-old event</th>
778+
<th scope="col">Reach</th>
779+
</tr>
780+
</thead>
781+
<tbody>
782+
<tr><th scope="row">Raspberry Pi Zero</th><td>64 MB</td><td>events up to ~2 hours old</td><td>bracketed to ~33 hours</td><td>~210 years</td></tr>
783+
<tr><th scope="row">Phone or laptop</th><td>1 GB</td><td>events up to ~1.5 days old</td><td>bracketed to ~52 minutes</td><td>~310 years</td></tr>
784+
<tr><th scope="row">Small server</th><td>32 GB</td><td>events up to ~46 days old</td><td>bracketed to ~81 seconds</td><td>~280 years</td></tr>
785+
</tbody>
786+
</table>
787+
</div>
788+
<p class="fine reveal">Reach is nearly free — it costs chains, not storage — so almost the whole budget goes to precision. Worst case, an aged event is bracketed to a fraction of its age: <b>~0.09%</b> on a Pi, <b>~0.004%</b> on a phone, <b>~0.00008%</b> on a server. Push the tick faster than one per second and even recent bounds drop below a second.</p>
789+
790+
<h3 class="subhead reveal">What it takes to build the graph</h3>
791+
<div class="grid g-3 reveal">
792+
<div class="card">
793+
<div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="7" ry="2.8"/><path d="M5 6v12c0 1.6 3.1 2.8 7 2.8s7-1.2 7-2.8V6"/><path d="M5 12c0 1.6 3.1 2.8 7 2.8s7-1.2 7-2.8"/></svg></div>
794+
<h3>Storage</h3>
795+
<p>Your chosen budget, flat forever. The graph is a fixed pile of clock ticks — about a million on a phone, roughly 1 KB each — and pruning holds it there however long the node runs.</p>
796+
</div>
797+
<div class="card">
798+
<div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="6" cy="6" r="2.4"/><circle cx="18" cy="6" r="2.4"/><circle cx="12" cy="18" r="2.4"/><path d="M7.7 7.7L11 15M16.3 7.7L13 15M8 6h8"/></svg></div>
799+
<h3>Network</h3>
800+
<p>One small heartbeat a second, shared as a hash with your ~10 neighbors. A complete proof is roughly 40 hops — about 40 KB, a single UDP packet. Everything else on the wire is just chain tips, about 1.25× a single chain.</p>
801+
</div>
802+
<div class="card">
803+
<div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="7" width="10" height="10" rx="1.6"/><path d="M10 4v3M14 4v3M10 17v3M14 17v3M4 10h3M4 14h3M17 10h3M17 14h3"/></svg></div>
804+
<h3>CPU</h3>
805+
<p>A hash and a signature about once a second. Running eight clock chains at once adds only ~25% over running one. Light enough to stay always-on on a $15 Raspberry Pi Zero.</p>
806+
</div>
807+
</div>
808+
</div>
809+
</section>
810+
758811
<!-- QUICKSTART -->
759812
<section id="quickstart" class="section-alt">
760813
<div class="wrap">

0 commit comments

Comments
 (0)