From 62d32573cfa3a40f5c166db7d482c88f3c18d919 Mon Sep 17 00:00:00 2001 From: Local Dev Date: Mon, 31 Aug 2026 18:03:02 +0200 Subject: [PATCH] Ship Theseus 0.2.5 50be20d6 (home page brand pass: .X acid + role badges) Setup 50be20d6e3811445817e35c560dce1a4bbcc62004d6b0480848a211a654319ea Portable 021afe629c61f2f49e95f936261649bdcff58c8b79bd0d903a8d10e6009740b0 Home page card grid gets a brand pass. Each title's TLD suffix (.X, .bch, ...) is now styled in acid (--acid) with a soft text-shadow glow. styledTitle() splits the domain on the last dot so capital labels like "Theseus.X" render as ink + acid. Card copy tightened per name: hello.bch A small page on the blockchain itself. siatest.bch A page with no server, backed by Sia. SilentMode.X Infrastructure development for a decentralized web. Theseus.X The Web Navigator - this browser's own address. Sirius.X Register and manage BCDN names. Hephaestus.X The forge - Silent Mode's code host. Prometheus.X An app store - a marketplace for BCDN-hosted apps. Helios.X Search engine for the decentralized web (in design). Hermes.X Messaging - end-to-end encrypted over Nostr. Badges: dropped the generic ".x" tag; each .X card carries its role label instead. Palette assigns each role a distinct hue drawn from the existing provenance colors, so the grid reads as families without adding new brand values: Infrastructure / Registrar acid Navigator blue Code host sia purple App store srv teal Search warn amber Messaging err coral Descriptions brighten from --mut to --ink on card hover so the ink color reads as the "acid touch" the user asked for without adding literal green blocks to every card. Deployed: scp installers + manifest + tools/ + releases/ pages to VPS, sia-upload of both trees, verified HEAD 200 + manifest 0.2.5. --- home.html | 38 ++++++++++++++++++++++++++++++++------ main.js | 18 +++++++++--------- package.json | 2 +- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/home.html b/home.html index 96a0d5a..51c26dc 100644 --- a/home.html +++ b/home.html @@ -41,14 +41,29 @@ position: relative; cursor: pointer; } .card:hover { border-color: rgba(75,123,236,.4); background: var(--card-hi); transform: translateY(-2px); } .card .n { font-weight: 600; color: var(--ink); font-size: 15.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + /* TLD suffix (.x, .bch, ...) rendered in the Silent Mode acid so the brand + accent reads instantly across the grid. Subtle glow reinforces it. */ + .card .n .tld { color: var(--acid); font-weight: 700; letter-spacing: .3px; + text-shadow: 0 0 8px rgba(214,255,61,.35); } .card .d { color: var(--mut); font-size: 13px; margin-top: 6px; line-height: 1.4; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } + .card:hover .d { color: var(--ink); } .card .row { display: flex; align-items: center; justify-content: space-between; margin-top: 12px; gap: 8px; } .badge { display: inline-block; font-size: 10.5px; padding: 2px 9px; border-radius: 999px; letter-spacing: .02em; } - .b-on-chain { background: rgba(214,255,61,.14); color: var(--acid); } - .b-Sia { background: rgba(179,157,219,.14); color: var(--sia); } - .b-server { background: rgba(79,209,165,.14); color: var(--srv); } - .b-default { background: rgba(139,152,169,.14); color: var(--mut); } + /* Provenance-typed badges (which chain/storage backed the site). */ + .b-on-chain { background: rgba(214,255,61,.14); color: var(--acid); } + .b-sia { background: rgba(179,157,219,.14); color: var(--sia); } + .b-server { background: rgba(79,209,165,.14); color: var(--srv); } + /* Product-role badges — same acid family with per-role hue shifts. + Kept muted so the badge is legible but doesn't compete with the title. */ + .b-infrastructure { background: rgba(214,255,61,.10); color: var(--acid); } + .b-navigator { background: rgba(75,123,236,.14); color: #7ea3ff; } + .b-registrar { background: rgba(214,255,61,.10); color: var(--acid); } + .b-code-host { background: rgba(179,157,219,.14); color: var(--sia); } + .b-app-store { background: rgba(79,209,165,.14); color: var(--srv); } + .b-search { background: rgba(255,199,95,.14); color: #ffc75f; } + .b-messaging { background: rgba(246,118,138,.14); color: #f6768a; } + .b-default { background: rgba(139,152,169,.14); color: var(--mut); } /* Edit affordances — hidden until Edit mode toggled */ .card .edit-actions { position: absolute; top: 8px; right: 8px; display: none; gap: 4px; } @@ -150,7 +165,18 @@ if (window.home && window.home.navigate) window.home.navigate(q); else window.location.href = "https://duckduckgo.com/?q=" + encodeURIComponent(q); }); - function badgeClass(b) { return b ? "b-" + b : "b-default"; } + function badgeClass(b) { + // Normalize badge label into a CSS class (spaces + case → dashes / lower). + if (!b) return "b-default"; + return "b-" + String(b).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); + } + // Split a domain-style title so ".X" (or ".bch") can render in the acid brand + // color while the rest stays ink. Preserves capitals in the base label. + function styledTitle(t) { + const m = String(t).match(/^(.+?)(\.[A-Za-z]{1,10})$/); + if (!m) return esc(t); + return esc(m[1]) + '' + esc(m[2]) + ''; + } function render() { const g = $("grid"); g.innerHTML = cards.map((c, i) => { @@ -160,7 +186,7 @@ -
${esc(c.title)}
+
${styledTitle(c.title)}
${esc(c.sub || c.url)}
${badge}
`; diff --git a/main.js b/main.js index eb0839c..c986694 100644 --- a/main.js +++ b/main.js @@ -326,15 +326,15 @@ function emitUpdateAvailable() { // can add/edit/remove via the page's edit mode. First-run seed = the classic // Silent Mode showcase (hello.bch, theseus.bch, silentmode.bch, etc.). const DEFAULT_HOME_CARDS = [ - { title: "hello.bch", url: "https://hello.bch/", sub: "A small page on the blockchain itself.", badge: "on-chain" }, - { title: "siatest.bch", url: "https://siatest.bch/", sub: "A page with no server, backed by Sia.", badge: "Sia" }, - { title: "silentmode.x", url: "https://silentmode.x/", sub: "The project's .x address.", badge: ".x" }, - { title: "theseus.x", url: "https://theseus.x/", sub: "This browser's own address.", badge: ".x" }, - { title: "sirius.x", url: "https://sirius.x/", sub: "Register and manage BCDN names.", badge: ".x" }, - { title: "hephaestus.x", url: "https://hephaestus.x/", sub: "Code host — Silent Mode's Forgejo.", badge: ".x" }, - { title: "prometheus.x", url: "https://prometheus.x/", sub: "Storage-as-a-product.", badge: ".x" }, - { title: "helios.x", url: "https://helios.x/", sub: "Discovery + navigation.", badge: ".x" }, - { title: "hermes.x", url: "https://hermes.x/", sub: "Messaging — NIP-17 over Nostr.", badge: ".x" }, + { title: "hello.bch", url: "https://hello.bch/", sub: "A small page on the blockchain itself.", badge: "on-chain" }, + { title: "siatest.bch", url: "https://siatest.bch/", sub: "A page with no server, backed by Sia.", badge: "Sia" }, + { title: "SilentMode.X", url: "https://silentmode.x/", sub: "Infrastructure development for a decentralized web.", badge: "Infrastructure" }, + { title: "Theseus.X", url: "https://theseus.x/", sub: "The Web Navigator — this browser's own address.", badge: "Navigator" }, + { title: "Sirius.X", url: "https://sirius.x/", sub: "Register and manage BCDN names.", badge: "Registrar" }, + { title: "Hephaestus.X", url: "https://hephaestus.x/", sub: "The forge — Silent Mode's code host.", badge: "Code host" }, + { title: "Prometheus.X", url: "https://prometheus.x/", sub: "An app store — a marketplace for BCDN-hosted apps.", badge: "App store" }, + { title: "Helios.X", url: "https://helios.x/", sub: "Search engine for the decentralized web (in design).", badge: "Search" }, + { title: "Hermes.X", url: "https://hermes.x/", sub: "Messaging — end-to-end encrypted over Nostr.", badge: "Messaging" }, ]; const homeCardsFile = () => path.join(app.getPath("userData"), "home-cards.json"); function loadHomeCards() { diff --git a/package.json b/package.json index 01dd74e..7f600bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "theseus-navigator", - "version": "0.2.4", + "version": "0.2.5", "description": "Theseus Navigator — a browser that follows the thread. By Silent Mode, a Deviant project.", "author": "Silent Mode", "main": "main.js",