openvibers/openvibe.host Commits

Inner pages: no site name above catalog, domains and inference titles (#374)

OP OpenVibers committed 3 days ago · c21c126a30 · 4 files, +7 −8

Changes

ddiff --git a/server/render/benchmarks.js b/server/render/benchmarks.js
iindex 0a43edf..ab173f9 100644
---- a/server/render/benchmarks.js
++++ b/server/render/benchmarks.js
@@@ -95,7 +95,7 @@ ${canRemove ? `<form method="post" action="/catalog/benchmarks/${esc(b.id)}/remo
function submitForm({ viewer, providers = [], plans = [], csrf = '', error = null, query = {} }) {
const head = `<nav class="hc-crumbs" aria-label="Breadcrumb">${link('/catalog/benchmarks', 'Benchmarks')} / Submit</nav>
--<header class="hc-head"><p class="hc-eyebrow">OpenVibe.Host · benchmarks</p><h1>Benchmark your server</h1>
++<header class="hc-head"><h1>Benchmark your server</h1>
<p class="hc-lede">Name the provider and plan, get a one-time link, and run one command on the server. YABS measures the CPU (Geekbench), the disk (fio) and the network (iperf3) in about 10 to 15 minutes, then posts the result here.</p></header>`;
if (!viewer || viewer.kind !== 'user') {
return `${head}<div class="hc-empty hc-empty-rich"><p><strong>Sign in to submit a benchmark.</strong></p><p>Results are public; who submitted them is not. Signing in lets you remove your own results later.</p><p>${link('/auth/login?next=%2Fcatalog%2Fbenchmarks%2Fnew', 'Sign in', 'button')}</p></div>`;
ddiff --git a/server/render/catalog.js b/server/render/catalog.js
iindex 77bebf2..0d82e67 100644
---- a/server/render/catalog.js
++++ b/server/render/catalog.js
@@@ -240,7 +240,6 @@ ${planTable(dedicated.plans.slice(0, 10), { caption: `Dedicated servers, lowest
${dedicated.plans.length > 10 ? `<p class="hc-more">${link('/catalog?kind=dedicated', `All ${dedicated.total} dedicated servers →`, 'button hc-button-quiet')}</p>` : ''}
</section>` : '';
return `<header class="hc-head">
--<p class="hc-eyebrow">OpenVibe.Host · hosting compared · alpha</p>
<h1>Compare hosting plans</h1>
<p class="hc-lede">Cloud, VPS and dedicated plans side by side, each with the day its price was checked and a link to where it came from.</p>
</header>
@@@ -253,7 +252,7 @@ ${method(plans.some((p) => p.affiliate_url))}`;
}
function providerList(providers) {
-- return `<header class="hc-head"><p class="hc-eyebrow">OpenVibe.Host · hosting compared</p><h1>Providers</h1>
++ return `<header class="hc-head"><h1>Providers</h1>
<p class="hc-lede">Every provider in the catalog, with where its plans come from.</p></header>
${providers.length ? `<ul class="hc-providers">${providers.map((p) => `<li>${link(`/catalog/providers/${encodeURIComponent(p.slug)}`, `<strong>${esc(p.name)}</strong>`)}${p.description ? `<span>${esc(p.description)}</span>` : ''}${p.affiliate_url ? '<span class="hc-chip">Affiliate</span>' : ''}</li>`).join('')}</ul>` : '<div class="hc-empty"><p>No provider is listed yet.</p></div>'}
${providers.some((p) => p.affiliate_url) ? `<p class="hc-disclosure">${esc(DISCLOSURE)}</p>` : ''}`;
@@@ -280,7 +279,7 @@ const PROMO_RULES = `<div class="hc-empty hc-empty-rich"><p><strong>No promotion
<p>${link('/catalog', 'Compare every plan')} · ${link('/providers', 'See the providers')}</p></div>`;
function promos(list) {
-- return `<header class="hc-head"><p class="hc-eyebrow">OpenVibe.Host · hosting compared</p><h1>Hosting promotions</h1>
++ return `<header class="hc-head"><h1>Hosting promotions</h1>
<p class="hc-lede">Offers running now, with their codes and end dates as the provider states them. An ended offer drops off by itself.</p></header>
${list.length ? promoCards(list) : PROMO_RULES}
${list.some((p) => p.affiliate) ? `<p class="hc-disclosure">${esc(DISCLOSURE)}</p>` : ''}
@@@ -391,7 +390,7 @@ function offers({ result, query = {}, now = Date.now() }) {
const list = result.offers;
const filtered = ['currency', 'max_monthly', 'source', 'priced'].some((k) => q[k]);
const next = result.next_cursor ? `<p class="hc-more">${link(`/catalog/offers?${new URLSearchParams({ ...q, cursor: result.next_cursor })}`, 'Next 50 offers →', 'button hc-button-quiet')}</p>` : '';
-- return `<header class="hc-head"><p class="hc-eyebrow">OpenVibe.Host · hosting compared</p><h1>Hosting offers</h1>
++ return `<header class="hc-head"><h1>Hosting offers</h1>
<p class="hc-lede">What providers post on LowEndSpirit's Offers board, with the price each headline states and that price a month. Sort by the monthly price within one currency; nothing is converted.</p></header>
<form class="hc-filters" method="get" action="/catalog/offers" role="search" aria-label="Filter hosting offers">
${select('sort', 'Sort by', OFFER_SORTS, q.sort || 'new')}
ddiff --git a/server/render/domains.js b/server/render/domains.js
iindex ba9a429..590727b 100644
---- a/server/render/domains.js
++++ b/server/render/domains.js
@@@ -88,7 +88,7 @@ ${select('sort', 'Sort by', SORTS, q.sort || 'popular')}
</form>
${tldTable(rows, { caption: `${rows.length}${result.next_cursor ? '+' : ''} ending${rows.length === 1 ? '' : 's'}, ${sortLabel}; the cheapest price at any registrar` })}
${!rows.length && filtered ? `<div class="hc-empty"><p><strong>No ending matches.</strong></p><p>${link('/catalog/domains', 'Clear the filters')} or try another ending.</p></div>` : ''}${next}` : '';
-- return `<header class="hc-head"><p class="hc-eyebrow">OpenVibe.Host · domains compared</p><h1>Compare domain prices</h1>
++ return `<header class="hc-head"><h1>Compare domain prices</h1>
<p class="hc-lede">${stats.tlds ? `${stats.tlds.toLocaleString('en')} endings with what registrars charge for the first year, a renewal and a transfer, and the total over five years.` : 'What registrars charge for each ending, for the first year, a renewal and a transfer.'} Check whether a name is taken, then register it wherever it costs least.</p></header>
${checkForm({ autofocus: !filtered && !q.sort && !q.cursor })}
${prices}
ddiff --git a/server/render/inference-planner.js b/server/render/inference-planner.js
iindex 127877f..73fcaf1 100644
---- a/server/render/inference-planner.js
++++ b/server/render/inference-planner.js
@@@ -100,7 +100,7 @@ function page(result) {
const needs = result.summary.needs_owner_budget;
const demand = demandText(result.demand);
return `<header class="hc-head">
--<p class="hc-eyebrow">OpenVibe.Host · staff · inference</p>
++<p class="hc-eyebrow">Staff</p>
<h1>Inference placement planner</h1>
<p class="hc-lede">A forecast and a monthly break-even for a warm rented GPU, scale-to-zero and wholesale. This page recommends; it never starts, stops or rents anything. The owner approves every rental.</p>
</header>
@@@ -114,7 +114,7 @@ ${method()}`;
/** A staff-only error page: no result is shown and nothing is acted on. */
function errorPage(message, { input = false } = {}) {
-- return `<header class="hc-head"><p class="hc-eyebrow">OpenVibe.Host · staff · inference</p><h1>Inference placement planner</h1>
++ return `<header class="hc-head"><p class="hc-eyebrow">Staff</p><h1>Inference placement planner</h1>
<p class="hc-lede">The planner could not show a plan. Nothing was started, stopped or rented.</p></header>
<div class="hc-empty"><p><strong>${input ? 'The planning input is unavailable.' : 'The planner has no plan to show.'}</strong></p><p>${esc(message)}</p>${input ? '<p>Set <code>HOST_INFERENCE_PLANNER_INPUT</code> to a readable planning JSON and reload.</p>' : ''}</div>`;
}