Landing page: register/download/install/onboard; Gitea hosting in deploy docs

This commit is contained in:
George Coles
2026-09-15 11:20:05 -04:00
parent 744f949d19
commit c44acbecd3
3 changed files with 128 additions and 8 deletions
+42 -6
View File
@@ -713,8 +713,11 @@ const REGISTRY_PAGE: &str = r##"<!doctype html>
button:hover { background: #0f3d91; }
#out { display: none; background: #101418; color: #d6f5d6; padding: 0.85rem 1rem;
border-radius: 8px; white-space: pre-wrap; word-break: break-all; margin-top: 1rem; }
pre.cmd { background: #101418; color: #d6f5d6; padding: 0.85rem 1rem;
border-radius: 8px; overflow-x: auto; }
.muted { color: #666; font-size: 0.92rem; }
ol { padding-left: 1.3rem; }
li { margin: 0.35rem 0; }
a { color: #174ea6; }
</style>
</head>
@@ -726,7 +729,7 @@ small: signed messages, budgets, honest truncation, aggregate courtesy. No annou
scores on the wire, no in-protocol payment.</p>
<p>Everything else — matching, ranking, retention, trust — is local.</p>
<h2>Join the federation</h2>
<h2>1. Register</h2>
<div class="card">
<form id="f">
<label>Organization or handle<br>
@@ -736,14 +739,47 @@ scores on the wire, no in-protocol payment.</p>
<button type="submit">Request membership</button>
</form>
<pre id="out"></pre>
<p class="muted">Your identifier is <code>&lt;label&gt;.frx.federatedsearch.org</code> — no domain or DNS of
your own is needed. Registration returns a one-time credential block:
<code>id=... token=... registry=... ma_key=...</code>.</p>
</div>
<h2>After you get credentials</h2>
<h2>2. Download</h2>
<div class="card">
<p>Static Linux x86_64 binaries (musl — no runtime dependencies):</p>
<pre class="cmd">curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.0/frxd-linux-amd64
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.0/frxd-linux-amd64.sha256
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.0/frx-linux-amd64
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.0/frx-linux-amd64.sha256</pre>
<p class="muted">All releases: <a href="https://git.federatedsearch.org/frx/frxd/releases">git.federatedsearch.org/frx/frxd/releases</a>.
Source and spec (<code>rfc.txt</code>): <a href="https://git.federatedsearch.org/frx/frxd">git.federatedsearch.org/frx/frxd</a>.</p>
</div>
<h2>3. Install</h2>
<div class="card">
<pre class="cmd">sha256sum -c frxd-linux-amd64.sha256
chmod +x frxd-linux-amd64 frx-linux-amd64
sudo mv frxd-linux-amd64 /usr/local/bin/frxd
sudo mv frx-linux-amd64 /usr/local/bin/frx</pre>
<p class="muted">No sudo? Run them in place — each is a single self-contained binary.</p>
</div>
<h2>4. Onboard</h2>
<div class="card">
<pre class="cmd">frxd --onboarding</pre>
<ol>
<li>Install the single static binary: <code>frxd</code>.</li>
<li>Run <code>frxd --onboarding</code> and paste the credential block it gives you.</li>
<li>The wizard binds your keys, verifies the signed registry, and wires your relays — no domains, DNS, or ports needed on your side.</li>
<li>Paste the credential block from step 1.</li>
<li>The wizard generates your keys, enrolls them with the MA, verifies the signed registry
against the pinned MA key, and wires the federation relays — no domains, DNS, or open ports
needed on your side.</li>
<li>Index a directory and mark what you share:</li>
</ol>
<pre class="cmd">frxd add ~/documents --name docs --shared --exposure metadata
frxd serve</pre>
<p class="muted">Search local-first with <code>frx search "..."</code>; broadcast to the federation with
<code>frx query "..."</code>. Nothing is shared until a collection is explicitly marked
<code>--shared</code>.</p>
</div>
<h2>Who is in</h2>
<p class="muted" id="members">…</p>
@@ -762,7 +798,7 @@ document.getElementById("f").onsubmit = async (e) => {
const body = await res.json();
out.style.display = "block";
out.textContent = res.ok
? "Membership approved.\n\nRun `frxd --onboarding` and paste this block:\n\n" + body.credentials + "\n"
? "Membership approved.\n\nNext: download frxd (step 2), install it (step 3), then run `frxd --onboarding` and paste this block:\n\n" + body.credentials + "\n"
: "Failed: " + (body.error || ("http " + res.status));
};