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.
This commit is contained in:
parent
454255e963
commit
62d32573cf
3 changed files with 42 additions and 16 deletions
38
home.html
38
home.html
|
|
@ -41,14 +41,29 @@
|
||||||
position: relative; cursor: pointer; }
|
position: relative; cursor: pointer; }
|
||||||
.card:hover { border-color: rgba(75,123,236,.4); background: var(--card-hi); transform: translateY(-2px); }
|
.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; }
|
.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;
|
.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; }
|
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; }
|
.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; }
|
.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); }
|
/* Provenance-typed badges (which chain/storage backed the site). */
|
||||||
.b-Sia { background: rgba(179,157,219,.14); color: var(--sia); }
|
.b-on-chain { background: rgba(214,255,61,.14); color: var(--acid); }
|
||||||
.b-server { background: rgba(79,209,165,.14); color: var(--srv); }
|
.b-sia { background: rgba(179,157,219,.14); color: var(--sia); }
|
||||||
.b-default { background: rgba(139,152,169,.14); color: var(--mut); }
|
.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 */
|
/* Edit affordances — hidden until Edit mode toggled */
|
||||||
.card .edit-actions { position: absolute; top: 8px; right: 8px; display: none; gap: 4px; }
|
.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);
|
if (window.home && window.home.navigate) window.home.navigate(q);
|
||||||
else window.location.href = "https://duckduckgo.com/?q=" + encodeURIComponent(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]) + '<span class="tld">' + esc(m[2]) + '</span>';
|
||||||
|
}
|
||||||
function render() {
|
function render() {
|
||||||
const g = $("grid");
|
const g = $("grid");
|
||||||
g.innerHTML = cards.map((c, i) => {
|
g.innerHTML = cards.map((c, i) => {
|
||||||
|
|
@ -160,7 +186,7 @@
|
||||||
<button class="ed" title="Edit">✎</button>
|
<button class="ed" title="Edit">✎</button>
|
||||||
<button class="rm" title="Remove">✕</button>
|
<button class="rm" title="Remove">✕</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="n">${esc(c.title)}</div>
|
<div class="n">${styledTitle(c.title)}</div>
|
||||||
<div class="d">${esc(c.sub || c.url)}</div>
|
<div class="d">${esc(c.sub || c.url)}</div>
|
||||||
<div class="row">${badge}</div>
|
<div class="row">${badge}</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
|
||||||
18
main.js
18
main.js
|
|
@ -326,15 +326,15 @@ function emitUpdateAvailable() {
|
||||||
// can add/edit/remove via the page's edit mode. First-run seed = the classic
|
// 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.).
|
// Silent Mode showcase (hello.bch, theseus.bch, silentmode.bch, etc.).
|
||||||
const DEFAULT_HOME_CARDS = [
|
const DEFAULT_HOME_CARDS = [
|
||||||
{ title: "hello.bch", url: "https://hello.bch/", sub: "A small page on the blockchain itself.", badge: "on-chain" },
|
{ 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: "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: "SilentMode.X", url: "https://silentmode.x/", sub: "Infrastructure development for a decentralized web.", badge: "Infrastructure" },
|
||||||
{ title: "theseus.x", url: "https://theseus.x/", sub: "This browser's own address.", badge: ".x" },
|
{ 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: ".x" },
|
{ title: "Sirius.X", url: "https://sirius.x/", sub: "Register and manage BCDN names.", badge: "Registrar" },
|
||||||
{ title: "hephaestus.x", url: "https://hephaestus.x/", sub: "Code host — Silent Mode's Forgejo.", badge: ".x" },
|
{ 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: "Storage-as-a-product.", badge: ".x" },
|
{ 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: "Discovery + navigation.", badge: ".x" },
|
{ 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 — NIP-17 over Nostr.", badge: ".x" },
|
{ 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");
|
const homeCardsFile = () => path.join(app.getPath("userData"), "home-cards.json");
|
||||||
function loadHomeCards() {
|
function loadHomeCards() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "theseus-navigator",
|
"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.",
|
"description": "Theseus Navigator — a browser that follows the thread. By Silent Mode, a Deviant project.",
|
||||||
"author": "Silent Mode",
|
"author": "Silent Mode",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue