- site/hephaestus.x/index.html: replace single 'Sign in with wallet' CTA with
a <details> dropdown labelled 'Bitcoin Cash wallet'. Menu items:
Sign in -> /user/oauth2/hephaestus-wallet#import
Sign up -> /user/oauth2/hephaestus-wallet#create (pill: easiest)
WizardConnect -> /user/oauth2/hephaestus-wallet#connect (pill: most private)
Same emoji + copy scheme as the wallet accordion, so the landing previews
the choices the user will see after clicking through.
- Hephaestus/auth-proxy/public/wallet.js: renderTabs() now reads location.hash
and auto-opens the matching <details> option on load (create/import/connect).
Fragments survive Forgejo's OAuth redirect chain, so a click on 'Sign up'
from the landing lands the user directly on the Create accordion.
Bulk-inserts <link rel="icon" type="image/svg+xml" href="/favicon.svg"> before
the </head> tag on every silentmode.st page that was missing it. All 36 site
HTML pages now advertise the chain-links favicon; browsers show it in tabs
and bookmarks across the whole umbrella site.
Pages touched (29): apps/, choose/*, deviant/* (7 pages under the parent
house), hephaestus/, hephaestus.x/* (9 chain-published mirror pages),
nav/ (redirect stub), register.html (redirect stub), sirius/,
sirius/register.html, store/ (redirect stub), tlds/.
Already had favicon from earlier passes (7): index.html, brand/,
tools/, prometheus/, helios/, hermes/, releases/.
Line-ending preservation: choose/index.html and sirius/register.html were
originally stored with CRLF endings; the plain Python read/write path
normalized them to LF and produced a noisy diff. Both files re-serialized as
CRLF before the favicon insert to keep the diff to +1 line each.
Deploy: rsync-equivalent tar-pipe to /opt/silent-mode/site/, plus per-file scp
for the two CRLF-corrected files. Verified live: 7 spot-checked URLs each
report exactly one <link rel="icon"> in served HTML.
Fresh-browser test surfaced two staleness bugs on the standalone landing:
- Source link pointed at silentmode/silentmode — that repo was deleted last
turn when we split into per-project repos. Point at silentmode/hephaestus
now (which actually holds this landing page's home + the docker-compose /
auth-proxy / Caddyfile that serves it).
- "Let's Encrypt TLS" was true for code.silentmode.st but not for hephaestus.x
itself, which now uses a Silent Mode CA cert from Argonautica. Reword to
reflect the dual-hostname primary/mirror architecture and the two cert
stories.
Also mention the DR-backup relationship — the Sia bucket now mirrors the VPS
static content nightly, not the other way around.
Adds live pages for each repo without leaving hephaestus.x:
hephaestus.x/silentmode/ → index of all silentmode/* repos
hephaestus.x/silentmode/theseus/ → README + recent commits + clone URLs
hephaestus.x/silentmode/sirius/ → same
hephaestus.x/silentmode/ariadne/ → same, gated ("private, sign in to browse")
hephaestus.x/silentmode/hephaestus/ → same, gated
Single _template.html hardcoded per repo via sed; each detail page pulls
metadata + README + last 8 commits from code.silentmode.st via the
CORS-enabled Forgejo API on load, renders README with a minimal
markdown-to-HTML pass, and gracefully falls back to a "sign in to browse"
note when the API returns 401/404 (private repo).
The URL stays on hephaestus.x while browsing — user only leaves when they
click "Browse full source →" or a specific commit link.
Previous version was a 100ms bounce to code.silentmode.st — user never saw
hephaestus.x/forge/ content, just a flash. New version is a real catalog page:
- Fetches public repo list live from Forgejo's API on page load
- Renders each repo as a card with name, owner, description, updated date,
clickable to code.silentmode.st/<owner>/<repo> when the user chooses
- Falls back to a "browse directly at code.silentmode.st" hint on API error
- Includes the git clone URL patterns (HTTPS-with-PAT and SSH-2222) inline
Enabled CORS on Forgejo so hephaestus.x (served from a different origin)
can hit /api/v1/repos/search — Access-Control-Allow-Origin: *, methods
GET+HEAD only, no credentials. That's the minimum for public listings and
matches how the API is meant to be used.
/forgejo/ is a byte-identical alias.
hephaestus.x is its own thing — not a subpage of silentmode.st. Previously
the BCNR record redirected straight to code.silentmode.st (dropping visitors
at the login screen cold) or to /hephaestus/ on silentmode.st (which
inherited the full silentmode nav bar of unrelated products).
- New standalone landing at site/hephaestus.x/index.html — its own compact
page, no silentmode.st chrome, just a mark + tagline + three key facts +
"where it lives" spec table, one small "A tool from Silent Mode" footer.
- /forge/index.html and /forgejo/index.html — instant redirects to
code.silentmode.st for users who type hephaestus.x/forge in the bar.
- BCNR record updated to {"s3":"bns/hephaestus.x/"} — navigate.st gateway
serves the content directly from the Sia bucket (same pattern deviant.x
uses). TXID 69686a03c66cc1f661c84c50107a8660055c629f0393c9bb6802773d3c0a7108.
Docs page at silentmode.st/hephaestus/ stays put — that one lives in the
silentmode.st family with its full nav, targeting Silent Mode visitors
exploring the whole stack. hephaestus.x/ is for direct hephaestus visitors.