forked from bitcoinafterlife/bal-welist-website
original page
This commit is contained in:
69
index.html
69
index.html
@@ -117,7 +117,8 @@ tbody tr:hover{background:color-mix(in srgb,var(--accent-soft) 50%,transparent)}
|
||||
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
|
||||
.score{font-family:var(--display);font-weight:600;font-size:15px}
|
||||
|
||||
.add-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:24px;margin:40px 0;align-items:start}
|
||||
.add-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:24px;margin:40px 0;align-items:stretch}
|
||||
.add-grid>.panel{display:flex;flex-direction:column}
|
||||
.panel{
|
||||
background:var(--panel);border:1px solid var(--line);
|
||||
border-radius:var(--radius);padding:24px;box-shadow:var(--shadow);
|
||||
@@ -139,12 +140,6 @@ tbody tr:hover{background:color-mix(in srgb,var(--accent-soft) 50%,transparent)}
|
||||
.btn:disabled{opacity:.45;cursor:not-allowed;filter:none}
|
||||
.note{font-size:13px;color:var(--muted);margin-top:16px;line-height:1.55}
|
||||
.note strong{color:var(--ink)}
|
||||
.freshness-note{
|
||||
font-size:12px;line-height:1.4;color:var(--muted);
|
||||
background:var(--accent-soft);border:1px solid var(--line);border-radius:8px;
|
||||
padding:7px 12px;margin:0 0 12px;
|
||||
}
|
||||
.freshness-note strong{color:var(--ink)}
|
||||
.btn-share{
|
||||
display:block;margin:0 auto 8px;font:inherit;font-size:13px;cursor:pointer;
|
||||
padding:8px 16px;border-radius:8px;border:1px solid var(--line-strong);
|
||||
@@ -264,13 +259,6 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
<a class="btn-ghost" id="download" href="#" download="willexecutors.json">↓ JSON</a>
|
||||
</div>
|
||||
|
||||
<!-- Data-freshness note: server-reported fields (fee/info/version) refresh
|
||||
once a day on a per-server timer, while Bitcoin deposits (and therefore
|
||||
listing/renewal) are picked up as soon as they reach 3 confirmations. -->
|
||||
<p class="freshness-note">
|
||||
<strong>Fee/description/version</strong> refresh about once a day (timing varies). <strong>Deposits</strong> are credited instantly after 3 confirmations (~30 min).
|
||||
</p>
|
||||
|
||||
<div class="table-card">
|
||||
<table id="tbl">
|
||||
<thead>
|
||||
@@ -299,7 +287,7 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
<div class="add-grid">
|
||||
<div class="panel">
|
||||
<h2>Add your Will Executor</h2>
|
||||
<p class="lead">Enter your server URL. It will be checked online before it appears in the list.</p>
|
||||
<p class="lead">Enter your server URL. It will appear in the list once your deposit is confirmed (typically about 30 minutes).</p>
|
||||
<div class="form-row">
|
||||
<input type="text" id="url" placeholder="https://we.bitcoin-after.life">
|
||||
</div>
|
||||
@@ -313,7 +301,7 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
<div class="terms-box" id="terms-box">
|
||||
<p class="lead">You are about to add this server:</p>
|
||||
<p><a id="terms-url" href="#" target="_blank" rel="noopener" class="mono"></a></p>
|
||||
<p style="font-size:13px;margin-top:4px"><strong>Make sure the link above works correctly before paying. No refunds or URL changes after payment.</strong></p>
|
||||
<p style="font-size:13px;margin-top:4px"><strong>Make sure the link above works correctly before paying. No refunds after payment. URL changes require proof of ownership — see the <a href="/terms.html" target="_blank">Terms</a>.</strong></p>
|
||||
<p style="font-size:14px">
|
||||
<label>
|
||||
<input type="checkbox" id="terms-check">
|
||||
@@ -332,7 +320,7 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
<div class="row"><span>Contact</span><span id="iv-contact">—</span></div>
|
||||
<div class="row"><span>Server</span><span id="iv-url">—</span></div>
|
||||
<div class="row"><span>Will Executor</span><span><a id="iv-weinfo" href="#" target="_blank">—</a></span></div>
|
||||
<div class="row" id="iv-nextdep-row" style="display:none"><span>Next deposit</span><span id="iv-nextdep">—</span></div>
|
||||
<div class="row" id="iv-nextdep-row" style="display:none"><span>Next renewal</span><span id="iv-nextdep">—</span></div>
|
||||
<div id="qrcode"></div>
|
||||
<button class="btn-share" id="share-btn">Share invoice</button>
|
||||
<p class="note">
|
||||
@@ -344,10 +332,11 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
|
||||
<div class="panel">
|
||||
<h2>How ranking works</h2>
|
||||
<p class="lead">Bid-based ranking: higher contributions rank higher.</p>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px"><span style="color:var(--muted)">Deposit threshold</span><b class="mono"><span id="thr-min">50,000</span> sats</b></div>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px"><span style="color:var(--muted)">Plugin integration</span><b>automatic</b></div>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;font-size:13px"><span style="color:var(--muted)">Early-adopter guarantee</span><b>12 months</b></div>
|
||||
<p class="lead">Ordered by excess donated, then total paid, then base fee (lower first), then WeTime points.</p>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px"><span style="color:var(--muted)">Yearly fee</span><b class="mono"><span id="thr-min">50,000</span> sats</b></div>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px"><span style="color:var(--muted)">Listing period</span><b>365 days</b></div>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px"><span style="color:var(--muted)">Renewal window</span><b>from 6 months before expiry</b></div>
|
||||
<div style="display:flex;justify-content:space-between;padding:8px 0;font-size:13px"><span style="color:var(--muted)">Plugin integration</span><b>automatic</b></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -362,13 +351,13 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
<div class="info-block">
|
||||
<span class="ic">02</span>
|
||||
<h3>Ranking System</h3>
|
||||
<p>This leaderboard operates on a bid-based ranking system where higher contributions result in better positioning.</p>
|
||||
<p>This leaderboard is ordered by excess donated (over the yearly fee), then total amount paid, then lower base fee, then WeTime points.</p>
|
||||
</div>
|
||||
|
||||
<div class="info-block">
|
||||
<span class="ic">03</span>
|
||||
<h3>Early Adopter Incentives</h3>
|
||||
<p>To support the project's initial launch phase, we plan to maintain the first Will Executor servers for a minimum of 12 months, rewarding early participants. Subsequently, premium positions will be available through an auction system based on protocol revenue generation.</p>
|
||||
<h3>Listing & Renewal</h3>
|
||||
<p>A flat yearly fee buys 365 days of presence in the list, starting when your payment reaches 3 confirmations. You can renew for one additional year at any time from 6 months before expiry; listings that are not renewed are removed at expiry. See the <a href="/terms.html" target="_blank">Terms</a> for details.</p>
|
||||
</div>
|
||||
|
||||
<div class="info-block">
|
||||
@@ -385,6 +374,7 @@ footer a{color:var(--accent);text-decoration:none}
|
||||
<div class="wrap">
|
||||
<span>Bitcoin After Life — Will Executor List</span>
|
||||
<a href="mailto:welist@bitcoin-after.life">welist@bitcoin-after.life</a>
|
||||
<a href="/terms.html">Terms</a>
|
||||
<a class="mono" id="commit-link" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-welist-website/commit/COMMIT_HASH_PLACEHOLDER">COMMIT_HASH_PLACEHOLDER</a>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -397,18 +387,6 @@ let minAmount = 50000;
|
||||
const fmt = n => (n != null ? Number(n).toLocaleString('en-US') : '—');
|
||||
const trunc = (s, m=40) => s && s.length > m ? s.slice(0, m) + '…' : s;
|
||||
|
||||
const statusMap = {
|
||||
'OK': 'Health check passed',
|
||||
'TIMEOUT': 'Connection timeout',
|
||||
'CONNECTION': 'Connection error',
|
||||
'STATUS': 'HTTP error',
|
||||
'WRONG REPLY': 'Invalid JSON response',
|
||||
'REQUEST': 'Request error',
|
||||
'BODY': 'Body read error',
|
||||
'DECODE': 'Decode error',
|
||||
'KO': 'Generic error'
|
||||
};
|
||||
|
||||
function getChain() {
|
||||
const btn = document.querySelector('#chainSeg [aria-pressed="true"]');
|
||||
return btn ? btn.dataset.c : 'bitcoin';
|
||||
@@ -416,9 +394,7 @@ function getChain() {
|
||||
|
||||
function getFiltered() {
|
||||
return allServers
|
||||
.filter(d => withTor ? true : !d.onion)
|
||||
.filter(d => (d.url + " " + (d.info||"")).toLowerCase().includes(q.toLowerCase()))
|
||||
.sort((a, b) => (b.last_block||0) - (a.last_block||0) || (b.points||0) - (a.points||0) || (b.count_win||0) - (a.count_win||0) || (a.base_fee||0) - (b.base_fee||0) || (b.version||'').localeCompare(a.version||''));
|
||||
.filter(d => (d.url + " " + (d.info||"")).toLowerCase().includes(q.toLowerCase()));
|
||||
}
|
||||
|
||||
function render() {
|
||||
@@ -462,11 +438,12 @@ function render() {
|
||||
</div>`);
|
||||
});
|
||||
|
||||
const online = allServers.filter(d => d.status === "online" || d.status === "OK").length;
|
||||
const online = allServers.filter(d => d.status === "OK").length;
|
||||
document.getElementById('s-online').textContent = online;
|
||||
document.getElementById('s-total').textContent = allServers.length;
|
||||
const top = getFiltered()[0];
|
||||
document.getElementById('s-block').textContent = top ? fmt(top.last_block) : '—';
|
||||
// Highest known block across all servers (the list is ranked by fee/points, not by height)
|
||||
const maxBlock = allServers.reduce((m, d) => Math.max(m, d.last_block || 0), 0);
|
||||
document.getElementById('s-block').textContent = maxBlock ? fmt(maxBlock) : '—';
|
||||
}
|
||||
|
||||
async function fetchData() {
|
||||
@@ -592,7 +569,7 @@ document.getElementById('terms-accept').addEventListener('click', async function
|
||||
const balStr = result.balance != null ? fmt(result.balance) : null;
|
||||
const uncStr = result.unconfirmed_balance != null ? fmt(result.unconfirmed_balance) : null;
|
||||
document.getElementById('iv-balance').textContent = balStr ? (uncStr ? balStr + ' (' + uncStr + ')' : balStr) : '—';
|
||||
document.getElementById('iv-donations').textContent = result.donations != null ? fmt(result.donations) : '—';
|
||||
document.getElementById('iv-donations').textContent = result.donation != null ? fmt(result.donation) : '—';
|
||||
document.getElementById('iv-contact').textContent = document.getElementById('contact').value.trim() || '—';
|
||||
const weLink = result.id ? `/weinfo/${result.chain || chain}/${result.id}` : null;
|
||||
const weinfoEl = document.getElementById('iv-weinfo');
|
||||
@@ -613,13 +590,13 @@ document.getElementById('terms-accept').addEventListener('click', async function
|
||||
document.getElementById('iv-nextdep').textContent = result.next_deposit_date || '—';
|
||||
document.getElementById('iv-nextdep-row').style.display = 'flex';
|
||||
document.getElementById('iv-status').className = 'ok-line';
|
||||
document.getElementById('iv-status').textContent = 'Server is already listed. Next deposit: ' + (result.next_deposit_date || '—');
|
||||
document.getElementById('iv-status').textContent = 'Server is already listed. Next renewal: ' + (result.next_deposit_date || '—');
|
||||
const inv = document.getElementById('invoice');
|
||||
inv.classList.add('show');
|
||||
inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||
return;
|
||||
}
|
||||
const amountSats = result.amount != null ? result.amount : minAmount;
|
||||
const amountSats = result.min_amount != null ? result.min_amount : minAmount;
|
||||
const amountBtc = (amountSats / 1e8).toFixed(8).replace(/\.?0+$/, '');
|
||||
const invoiceuri = `bitcoin:${result.address}?amount=${amountBtc}&label=BAL&message=Order+For+url+%26+${encodeURIComponent(url)}`;
|
||||
const qrEl = document.getElementById('qrcode');
|
||||
@@ -649,7 +626,7 @@ document.getElementById('terms-accept').addEventListener('click', async function
|
||||
}
|
||||
};
|
||||
document.getElementById('iv-status').className = 'ok-line';
|
||||
document.getElementById('iv-status').textContent = '✓ Server added: ' + serverUrl + '. Pay the invoice to complete.';
|
||||
document.getElementById('iv-status').textContent = '✓ Server verified: ' + serverUrl + '. Pay the invoice — it will be listed after 3 confirmations.';
|
||||
const inv = document.getElementById('invoice');
|
||||
inv.classList.add('show');
|
||||
inv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||
|
||||
Reference in New Issue
Block a user