Same class of bug as the Sirius .X space on theseus.x: .topnav .brand
carries display:inline-flex + gap:6px, and the mark, brand span and
".X" tail were three separate flex items so the browser drew a 6px gap
between each. Wrapped the mark and the label in two spans so the flex
gap only applies once, between mark and label, and "Hephaestus.X"
renders as one word.
theseus.x, sirius.x and hephaestus.x had a 1px border-bottom under the
sticky/fixed topnav that read as a visible separator between the
navigation and the page. The topnav's own translucent-blur backdrop is
enough of a distinction already — the line is redundant and, on the
theseus.x sidebar layout, made the top of the sidebar look like it was
overhanging the header.
theseus.x tabs also had a "Sirius .X" gap because the topnav <a> is a
flex container and the icon + "Sirius" text + ".X" span were three
flex items with a 6px gap between each. Wrapping the label in one
<span> collapses the gap to a single space between icon and label.
Sidebar border-right and mobile bottom-bar border-top also dropped —
the panel tint carries the boundary; a hard line was too heavy.
Section covers both paths — Forgejo GUI and curl/git/docker CLI — so the
heading now reflects that. Anchor #sessions preserved so external links
still work. Follow-up to 980fbd4.
Parallel session assumed (a) Forgejo usernames can't contain dots, and (b) a
wallet mnemonic has to be pasted into a browser to sign in. Both wrong — the
docs now show that.
- §4 gets an 'Allowed characters' subsection listing what Forgejo actually
accepts (letters, digits, hyphens, underscores, dots). game.x works as-is
as a username or an org name.
- New §12 'Working with other sessions' — the wallet-vs-PAT split, a full
five-step recipe for delegating a namespace to a parallel session
(create org / bootstrap user / add to Owners / mint PAT / clone+push),
a scriptable programmatic sign-in template so mnemonics never touch a
browser, and a scope-per-session-shape table.
- TOC + §13 (Help+source) renumbered.
Parallel session had to synthesize two things the page should have handed
them upfront. Fixing that:
- §11 (Gotchas) now links from each entry to its full-recipe section:
HTTPS+PAT → §5+§6, em-dash mojibake → §8, admin-rename → §4. New leading
entry explicitly separates 'PAT vs wallet passphrase' since it's the most
common wallet-flow confusion.
- §7 (Container registry) gets a 'Worked example: publish an app's backend as
an image' subsection — Node/alpine Dockerfile + build+push pair, so the
next reader doesn't have to compose it from the Log-in and Push blocks.
Follow-up to cc544c8.
/docs/ covers sign-in flow, rename, repos, PATs, container registry, API,
storage layout, self-hosting, and known gotchas — 12 sections with a
sticky TOC on the left. Any session (human or LLM) hitting hephaestus.x
now has a one-shot map of the forge.
Landing footer replaced with a four-column layout (Product / Source+spec
/ Pantheon + brand) matching the docs page, with a mono bottom bar. Topnav
gets a Docs link between How-it-works and Source.
Answers a community question ("how would one run this if it's not on GitHub?")
by putting the source repo front and centre, plus a runnable docker-compose
recipe for self-hosting.
- Palette + typography (Fraunces / DM Sans / JetBrains Mono / Ubuntu) and
layout (topnav, radial-stack background, .card, .steps, .verify, .note)
aligned with site-sirius-x. Adds js/theme.js (copied from sirius-x) for
the Fraunces↔Ubuntu font toggle.
- Sticky topnav: brand, section links, Explore repos, wallet dropdown at right.
- Hero: "The forge on Bitcoin Cash" — BCH-green accent, matched serif hierarchy.
- New "See the source. Verify the deploy." section — three cards for the repo,
auth-proxy, and PROTOCOL.md; below that a docker-compose run-your-own recipe
with git clone + cp .env.example + docker compose up.
- Pantheon and Verify-against-the-chain sections mirror Sirius.X's structure so
the seven .x pillars feel like one product.
- Browse repos link fixed to be absolute (https://code.silentmode.st/explore/repos)
so it works through navigate.st gateway too, not just BCNR-aware browsers.
- 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.