From 40d9b4ed80c6c9620ecd011d86fc0e4be61f2624 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Fri, 6 Nov 2026 19:22:24 +0100 Subject: [PATCH] Home: Renewal status tab with expiry card - Check tab renamed Renewal status / Show renewal status - Result card: expiry date, days left, renewal window open or opening date, position, balance, donations, server page link - Terms FAQ 6 follows the new name --- index.html | 88 +++++++++++++++++++++++++++++++++++++++--------------- terms.html | 4 +-- 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/index.html b/index.html index f2b6154..f318012 100644 --- a/index.html +++ b/index.html @@ -223,6 +223,19 @@ tbody tr:hover{background:color-mix(in srgb,var(--accent-soft) 50%,transparent)} background:var(--accent-soft);color:var(--accent);font-family:var(--mono);font-size:12px;display:flex;align-items:center;justify-content:center} .mini-steps b{display:block;color:var(--ink);font-size:13.5px;margin-bottom:2px} .side-link{color:var(--accent);text-decoration:none;font-weight:600} +/* Renewal status result */ +.renewal-card{margin-top:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg);padding:18px 20px} +.rc-main{display:flex;flex-direction:column;gap:2px;margin-bottom:14px} +.rc-label{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)} +.rc-date{font-family:var(--display);font-size:30px;font-weight:600;line-height:1.1;color:var(--ink)} +.rc-sub{font-size:13px;color:var(--muted)} +.rc-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;font-size:13px} +.rc-grid div{display:flex;flex-direction:column;gap:2px;border-top:1px solid var(--line);padding-top:8px} +.rc-grid span{color:var(--muted)} +.rc-grid b{font-family:var(--mono);font-weight:600} +.rc-link{display:inline-block;margin-top:14px;color:var(--accent);text-decoration:none;font-weight:600;font-size:13px} +.rc-link:hover{text-decoration:underline} +.rc-open{color:var(--ok)} .side-link:hover{text-decoration:underline} @media (max-width:1024px){ .panel-body{grid-template-columns:1fr} @@ -438,15 +451,15 @@ footer a{color:var(--accent);text-decoration:none} Add a server

Add your Will Executor

- +

Enter your server URL. It will appear in the list once your deposit is confirmed (typically about 30 minutes).

- +
@@ -455,11 +468,27 @@ footer a{color:var(--accent);text-decoration:none}
- +
+ + +

You are about to add this server:

@@ -503,9 +532,9 @@ footer a{color:var(--accent);text-decoration:none} How listing works (15 s) → @@ -520,7 +549,7 @@ footer a{color:var(--accent);text-decoration:none}
Listing period365 days
Renewal windowfrom 6 months before expiry
Plugin integrationautomatic
-

Paying more than the yearly fee moves your server up: the excess counts first in the order and never decays. Points are only a tie-breaker. Details in the Terms →

+

Paying more than the yearly fee moves your server up: the excess counts first in the order and never decays. Points are only a tie-breaker. Details in the Terms →

@@ -792,6 +821,7 @@ document.getElementById('check').addEventListener('click', async () => { const inv = document.getElementById('invoice'); inv.classList.remove('show'); document.getElementById('terms-box').classList.remove('show'); + document.getElementById('renewal-card').hidden = true; status.className = ''; status.textContent = 'Checking…'; try { @@ -801,30 +831,39 @@ document.getElementById('check').addEventListener('click', async () => { const idx = list.findIndex(d => normalizeUrl(d.url || '').toLowerCase() === url.toLowerCase()); if (idx < 0) { status.className = 'err-line'; - status.textContent = `Not in the ${chain} list: no server with this exact URL. To list it, press "Add server".`; + status.textContent = `Not in the ${chain} list: no server with this exact URL. To list it, use the "Add a server" tab.`; return; } const d = list[idx]; const infoResp = await fetch(`/weinfodata/${chain}/${d.id}`); const info = infoResp.ok ? await infoResp.json() : {}; - const expiry = (info.expiry_date || '').slice(0, 10) || '—'; // '2027-07-16 00:00:00' -> the date + const expiry = (info.expiry_date || '').slice(0, 10); // '2027-07-16 00:00:00' -> the date const bal = info.balance != null ? fmt(info.balance) : null; const unc = info.unconfirmed_balance != null ? fmt(info.unconfirmed_balance) : null; - document.getElementById('iv-chain').textContent = info.chain || chain; - document.getElementById('iv-balance').textContent = bal ? (unc ? bal + ' (' + unc + ')' : bal) : '—'; - document.getElementById('iv-donations').textContent = info.donation != null ? fmt(info.donation) : '—'; - document.getElementById('iv-contact').textContent = '—'; - document.getElementById('iv-url').textContent = d.url; - const weinfoEl = document.getElementById('iv-weinfo'); - weinfoEl.href = `/weinfo/${chain}/${d.id}`; - weinfoEl.textContent = 'View page'; - document.getElementById('iv-nextdep').textContent = expiry; - document.getElementById('iv-nextdep-row').style.display = 'flex'; - hidePaymentRows(); + // Renewal window: from 6 months before expiry (Terms, Section 1). + let daysText = '—', windowText = '—', windowOpen = false; + if (expiry) { + const exp = new Date(expiry + 'T00:00:00Z'); + const win = new Date(exp); win.setUTCMonth(win.getUTCMonth() - 6); + const days = Math.ceil((exp - Date.now()) / 86400000); + daysText = days > 0 ? `${days} days left` : 'expired'; + windowOpen = Date.now() >= win.getTime() && days > 0; + windowText = windowOpen ? 'open now: you can renew' : `opens on ${win.toISOString().slice(0, 10)}`; + } + document.getElementById('rc-expiry').textContent = expiry || '—'; + document.getElementById('rc-days').textContent = daysText; + const winEl = document.getElementById('rc-window'); + winEl.textContent = windowText; + winEl.className = windowOpen ? 'rc-open' : ''; + document.getElementById('rc-pos').textContent = `#${idx + 1} of ${list.length}`; + document.getElementById('rc-balance').textContent = bal ? (unc ? bal + ' (' + unc + ')' : bal) : '—'; + document.getElementById('rc-donations').textContent = info.donation != null ? fmt(info.donation) : '—'; + document.getElementById('rc-link').href = `/weinfo/${chain}/${d.id}`; status.className = 'ok-line'; - status.textContent = `Server is listed (#${idx + 1} of ${list.length}). Expiry: ${expiry}. Renewal opens 6 months before.`; - inv.classList.add('show'); - inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); + status.textContent = windowOpen ? '✓ Listed. The renewal window is open.' : '✓ Listed.'; + const card = document.getElementById('renewal-card'); + card.hidden = false; + card.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } catch (err) { status.className = 'err-line'; status.textContent = 'Could not check the list right now. Please try again in a moment.'; @@ -988,6 +1027,7 @@ document.getElementById('terms-accept').addEventListener('click', async function status.className = ''; status.textContent = ''; document.getElementById('terms-box').classList.remove('show'); document.getElementById('invoice').classList.remove('show'); + document.getElementById('renewal-card').hidden = true; } tabs.forEach(b => b.addEventListener('click', () => setMode(b.dataset.mode))); if (new URLSearchParams(location.search).get('mode') === 'check') setMode('check'); diff --git a/terms.html b/terms.html index afe83e9..b64afdc 100644 --- a/terms.html +++ b/terms.html @@ -256,7 +256,7 @@ footer a{color:var(--accent);text-decoration:none} "name": "Where do I see my expiry date?", "acceptedAnswer": { "@type": "Answer", - "text": "On the home page, open the “Check a server” tab, enter the exact URL of your server as it appears in the list and press “Check server”. Nothing is charged: you get the server's position in the list, its balance and donations, and its expiry date; “View page” opens the server's detail page with its WeTime activity. The date is not shown in the main table, so you need the exact URL. Knowing it also tells you when your renewal window opens (6 months before). Since the price per day is fixed and public, the expiry date shows how much a server has paid: this is intentional transparency." + "text": "On the home page, open the “Renewal status” tab, enter the exact URL of your server as it appears in the list and press “Show renewal status”. Nothing is charged: you see the expiry date, the days left, whether the renewal window is open (or when it opens), the position in the list, the balance and the donations, with a link to the server page. The date is not shown in the main table, so you need the exact URL. Knowing it also tells you when your renewal window opens (6 months before). Since the price per day is fixed and public, the expiry date shows how much a server has paid: this is intentional transparency." } }, { @@ -663,7 +663,7 @@ l-49 -25 -880 0 -880 0 -3 704 c-2 557 0 706 10 713 7 4 407 7 888 5 818 -2
Where do I see my expiry date? -

On the home page, open the “Check a server” tab, enter the exact URL of your server as it appears in the list and press “Check server”. Nothing is charged: you get the server's position in the list, its balance and donations, and its expiry date; “View page” opens the server's detail page with its WeTime activity. The date is not shown in the main table, so you need the exact URL. Knowing it also tells you when your renewal window opens (6 months before). Since the price per day is fixed and public, the expiry date shows how much a server has paid: this is intentional transparency. Open the Check tab →

+

On the home page, open the “Renewal status” tab, enter the exact URL of your server as it appears in the list and press “Show renewal status”. Nothing is charged: you see the expiry date, the days left, whether the renewal window is open (or when it opens), the position in the list, the balance and the donations, with a link to the server page. The date is not shown in the main table, so you need the exact URL. Knowing it also tells you when your renewal window opens (6 months before). Since the price per day is fixed and public, the expiry date shows how much a server has paid: this is intentional transparency. Open the Renewal status tab →

How is the order of the list decided?