diff --git a/hephaestus/index.html b/hephaestus/index.html new file mode 100644 index 0000000..d310cf7 --- /dev/null +++ b/hephaestus/index.html @@ -0,0 +1,267 @@ + + + + + +Hephaestus — decentralized code forge for Silent Mode + + + + + + + +
+ +
+
⚒️
+

Hephaestus — the forge

+

A code host you sign into with a Bitcoin Cash wallet. Repositories on your own VPS, cold blobs on the Sia network. No email. No password reset. No middleman.

+ +
+ +
+

What Hephaestus is

+

A friction-free GitHub alternative for people who want to hold their own identity. Under the hood it's Forgejo (a soft-fork of Gitea) with a wallet-authentication layer bolted on and cold storage moved from disk to Sia.

+ +
+
+

Wallet is your identity

+

Generate or import a BCH wallet in your browser. Sign a one-time challenge to prove control. That's your account — nothing to remember except your recovery phrase.

+
+
+

Cold storage on Sia

+

Every LFS object, release archive, package registry blob and issue attachment lives on the Sia network via s3.silentmode.st:8600. Live git repos + Postgres stay on the VPS SSD for speed.

+
+
+

Standard git — push over HTTPS or SSH

+

Nothing weird. git clone, git push, PRs, issues, releases, container registry, the works. Bring your existing muscle memory.

+
+
+
+ +
+

Sign in — 30 seconds

+
    +
  1. Open the forge. Go to code.silentmode.st and click Sign in, then Sign in with hephaestus-wallet.
  2. +
  3. Generate or import a wallet. Pick "Generate new" for a fresh BIP-39 12-word recovery phrase, or "Import existing" if you already have one. Write it down — lose it and the account is gone.
  4. +
  5. Set a browser passphrase (min 8 chars). Used to encrypt the wallet in your browser's localStorage. Never leaves your device.
  6. +
  7. Click "Create wallet & sign in". The browser signs a challenge, the server verifies, Forgejo auto-provisions you as bch_<first-20-of-your-cashaddr>. You land in the dashboard.
  8. +
+

Why no email? Nothing to leak, nothing to phish, no password-reset flow to hijack. The trade: if you lose your recovery phrase there is no support form to send you back in. Back the phrase up. Twice. On paper.

+
+ +
+

Push some code

+

Two paths, either works. Pick whichever fits your setup.

+ +

Over HTTPS (with an access token)

+

Log in, open Settings → Applications → Generate New Token, give it write:repository scope. Then:

+
git clone https://your_bch_username:YOUR_TOKEN@code.silentmode.st/your_bch_username/your-repo.git
+cd your-repo
+echo "Hello, forge" > README.md
+git add README.md && git commit -m "hello"
+git push
+ +

Over SSH (with your existing key)

+

Add your public key to Settings → SSH / GPG Keys → Add Key. Then use port 2222:

+
git clone ssh://git@code.silentmode.st:2222/your_bch_username/your-repo.git
+

Your key is only trusted for git-over-SSH; there's no shell access.

+
+ +
+

How it fits together

+
            you (browser)
+                │
+       https://code.silentmode.st/
+                │
+     ┌──────────┴──────────┐
+     │        Caddy        │  ← Let's Encrypt cert, HTTP/3
+     │   (path-based mux)  │
+     └──┬───────────────┬──┘
+        │               │
+        │/auth/*        │/
+        ▼               ▼
+   auth-proxy       Forgejo ── Postgres      (live git repos + DB
+   (OIDC provider) ───┬───                    on local VPS SSD)
+   Node/Fastify       │
+   libauth for        │ storage backend
+   BCH signature      ▼
+   verification    s3.silentmode.st:8600  ← s3d gateway
+                       │
+                       ▼
+                  Sia network hosts
+                  (LFS, attachments,
+                   packages, archives)
+ + + + + + + + + +
ComponentRole
Forgejo 10Web UI, PRs, issues, releases, container/npm registry, git-over-HTTPS + SSH
Postgres 16User records, issues, PRs, permissions, session state
Caddy 2Reverse proxy + automatic Let's Encrypt TLS + HTTP/3
auth-proxyOIDC provider (Node/Fastify + libauth). Issues signed challenges, verifies BCH signatures, mints OAuth codes.
s3d → SiaCold storage. Files are encrypted client-side, sharded via Reed-Solomon, scattered across independent hosts.
resticNightly encrypted snapshots (Postgres + /data/git) to a separate Sia bucket. Systemd timer at 03:15 UTC.
+
+ +
+

Wallet-auth protocol

+

Any BCH wallet that speaks Bitcoin Signed Message can produce a signature Hephaestus will accept. There is no Hephaestus-specific signing format.

+ +
Message the wallet signs:
+─────────────────────────────
+code.silentmode.st wants you to sign in with your Bitcoin Cash account:
+bitcoincash:qzkc695pm4r3p7kcq36sh0t3fdu5e6ua7u2ar36vea
+
+By signing, you prove you control this address. This request will not
+trigger a blockchain transaction or cost any fees.
+
+Domain: code.silentmode.st
+Nonce: e65d80b51d3f1baa2efb8d952d827104
+Issued At: 2026-08-29T17:50:12.655Z
+ +

Signature is standard BIP-137-style recoverable ECDSA over the SHA256(SHA256(varint(magic) || magic || varint(msg) || msg)) digest, base64-encoded. The server recovers the pubkey, derives the cashaddr, and matches it against the address you claimed. Nonces expire after 5 minutes and are single-use.

+ +

OIDC id_token claims: sub = full cashaddr, preferred_username = "bch_" + first-20-of-address, plus a custom cashaddr claim carrying the full address for downstream tools. Signed with EdDSA (Ed25519).

+
+ +
+

For operators self-host your own

+

Hephaestus is a docker-compose stack. Everything you need is in the silentmode monorepo under Hephaestus/. To stand up your own instance:

+ +
    +
  1. Get a Linux VPS with Docker (2 GB RAM, ~10 GB free disk minimum). A domain name pointing at it. Ports 80/443/2222 open.
  2. +
  3. Clone the repo, copy the env template +
    git clone ssh://git@code.silentmode.st:2222/silentmode/silentmode.git
    +cd silentmode/Hephaestus
    +cp .env.example .env
    +# fill in real values — see .env.example for what each field means
  4. +
  5. Bring it up +
    docker compose up -d
    + First run pulls ~500 MB of images and builds the auth-proxy. Give it a few minutes.
  6. +
  7. Complete Forgejo install via POST to / with your admin creds (see PROTOCOL.md in the repo for the exact field list — Forgejo's --config path prevents the CLI installer working, so it has to be the HTTP path).
  8. +
  9. Register the wallet OIDC provider +
    docker compose exec forgejo forgejo \
    +    --config /data/gitea/conf/app.ini admin auth add-oauth \
    +    --provider openidConnect \
    +    --name hephaestus-wallet \
    +    --key "$AUTH_PROXY_CLIENT_ID" --secret "$AUTH_PROXY_CLIENT_SECRET" \
    +    --auto-discover-url "$AUTH_PROXY_ISSUER/.well-known/openid-configuration" \
    +    --scopes "openid profile"
  10. +
+ +

Gotchas we hit — save yourself the same debugging

+ +
+ +
+

Status

+ + + + + + + + + +
Live atcode.silentmode.st
SignupOpen (wallet-only; local registration disabled)
StorageSia network for cold blobs, VPS SSD for hot path
BackupsNightly restic → separate Sia bucket, encrypted client-side
Sourcesilentmode/silentmode (private — request access from an admin), or the local checkout under Hephaestus/
LicenseForgejo is GPL-3.0. Auth-proxy + Caddyfile + docker-compose scaffolding is part of the Silent Mode monorepo.
ChainChipnet (Bitcoin Cash test network) alpha
BCNR namehephaestus.x to be minted on Sirius
+ +

Report an issue. Open one at silentmode/silentmode/issues once you have access, or ping in the usual Silent Mode channels.

+
+ +
+ + + + + diff --git a/index.html b/index.html index f230cd3..01f2ef4 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ Silent Mode — decentralized web infrastructure - + @@ -14,6 +14,7 @@ Tools Prometheus Sirius + Hephaestus Helios Hermes @@ -78,6 +79,15 @@

Register a name →

+
+ live +

Hephaestus code

+

A code forge you sign into with a Bitcoin Cash wallet. Forgejo UI, repos on the + host, LFS/releases/packages on Sia. No email, no password reset, no middleman. + Live at code.silentmode.st.

+

See Hephaestus →

+
+
designed

Prometheus apps