openvibers/openvibe.sites Commits
Placeholders keep the exact "this page is a placeholder, nothing here is live yet" phrase
Changes
@@@ -67,6 +67,9 @@ const STANDING = {closed: { label: 'closed', repoStage: 'closed' },pointer: { label: 'status', repoStage: 'pointer' },};++// The stable marker other repositories' checks grep for (Host docs/launch.md, Network's requirement++// ledger): every placeholder says it, a notice never does.++const MARKER = 'this page is a placeholder, nothing here is live yet';const repoLink = (repo) => `<a href="https://github.com/OpenVibers/${esc(repo)}" rel="noopener"><code>OpenVibers/${esc(repo)}</code></a>`;/** The hero's status sentence: what is true about the product, and what its public launch waits for. */function statusText(site) {@@@ -74,15 +77,15 @@ function statusText(site) {const f = repoFacts(site);const repo = site.plannedRepo ? repoLink(site.plannedRepo) : '<code>OpenVibe.Network</code>';const waits = site.launch ? ` The public launch is waiting for ${esc(site.launch)}.` : '';-- if (k === 'running') return `${repo} is built and its service runs on the network's host, but it is not public yet; this page is a placeholder.${waits}`;-- if (k === 'code') return `${repo} has code, but nothing is deployed yet; this page is a placeholder.${waits}`;++ if (k === 'running') return `${repo} is built and its service runs on the network's host, but it is not public yet: ${MARKER}.${waits}`;++ if (k === 'code') return `${repo} has code, but nothing is deployed yet: ${MARKER}.${waits}`;if (k === 'surface') {const o = f.registry.origin;-- return `${repo} is live at <a href="${esc(o)}/">${esc(o.replace(/^https?:\/\//, ''))}</a>; this subdomain is not routed to it yet, so it serves this placeholder.`;++ return `${repo} is live at <a href="${esc(o)}/">${esc(o.replace(/^https?:\/\//, ''))}</a>; this subdomain is not routed to it yet: ${MARKER}.`;}if (k === 'pointer') return `${repo} publishes the status of every OpenVibe service at <a href="${esc(site.links[0][1])}">${esc(site.links[0][1].replace(/^https?:\/\//, ''))}</a>; this address points there.`;if (k === 'closed') return `${repo} is closed and stays as a decision record; no product launches at this address.`;-- return `${repo}: charter only, no code yet; this page is a placeholder.${waits}`;++ return `${repo}: charter only, no code yet: ${MARKER}.${waits}`;}const today = new Date().toISOString().slice(0, 10);// A page is first published once; rebuilding it later changes dateModified, never datePublished.@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.AI" rel="noopener"><code>OpenVibers/OpenVibe.AI</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a public API with its own access rules; today only other OpenVibe services call it. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.AI" rel="noopener"><code>OpenVibers/OpenVibe.AI</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a public API with its own access rules; today only other OpenVibe services call it. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenRe.Stream" rel="noopener"><code>OpenVibers/OpenRe.Stream</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenRe.Stream" rel="noopener"><code>OpenVibers/OpenRe.Stream</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Chat" rel="noopener"><code>OpenVibers/OpenVibe.Chat</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for its own web client at this address; the service already runs the chat on OpenVibe.Live. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Chat" rel="noopener"><code>OpenVibers/OpenVibe.Chat</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for its own web client at this address; the service already runs the chat on OpenVibe.Live. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Coupons" rel="noopener"><code>OpenVibers/OpenVibe.Coupons</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a coupons source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Coupons" rel="noopener"><code>OpenVibers/OpenVibe.Coupons</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a coupons source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Deals" rel="noopener"><code>OpenVibers/OpenVibe.Deals</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a deals source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Deals" rel="noopener"><code>OpenVibers/OpenVibe.Deals</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a deals source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Host" rel="noopener"><code>OpenVibers/OpenVibe.Host</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the owner's go on its launch checklist. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Host" rel="noopener"><code>OpenVibers/OpenVibe.Host</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the owner's go on its launch checklist. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.News" rel="noopener"><code>OpenVibers/OpenVibe.News</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a news source's terms and an editor to publish the first reviewed story. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.News" rel="noopener"><code>OpenVibers/OpenVibe.News</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a news source's terms and an editor to publish the first reviewed story. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Reviews" rel="noopener"><code>OpenVibers/OpenVibe.Reviews</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a review source's terms and an editor to publish the first reviewed summary. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Reviews" rel="noopener"><code>OpenVibers/OpenVibe.Reviews</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a review source's terms and an editor to publish the first reviewed summary. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Tips" rel="noopener"><code>OpenVibers/OpenVibe.Tips</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the payments cutover to OpenVibe.Billing and a security review; tips keep working on OpenVibe.Live meanwhile. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Tips" rel="noopener"><code>OpenVibers/OpenVibe.Tips</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the payments cutover to OpenVibe.Billing and a security review; tips keep working on OpenVibe.Live meanwhile. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Trade" rel="noopener"><code>OpenVibers/OpenVibe.Trade</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a verified data source and editors adding the first instruments. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Trade" rel="noopener"><code>OpenVibers/OpenVibe.Trade</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a verified data source and editors adding the first instruments. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.VIP" rel="noopener"><code>OpenVibers/OpenVibe.VIP</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the payments cutover to OpenVibe.Billing; checkout stays closed until then. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.VIP" rel="noopener"><code>OpenVibers/OpenVibe.VIP</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the payments cutover to OpenVibe.Billing; checkout stays closed until then. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a><a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a></div>-- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>++ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p></header><section id="what">@@@ -26,7 +26,9 @@ for (const site of catalog.sites) {pages++;assert.match(html, /<title>[^<]+<\/title>/, `${d}: title`);assert.match(html, new RegExp(`<link rel="canonical" href="https://${d.replace(/\./g, '\\.')}/?"`), `${d}: canonical`);-- if (!site.kind) assert.match(html, /placeholder/i, `${d}: says it is a placeholder (never claim a product is live)`);++ // The exact phrase other repositories' checks grep for (Host docs/launch.md, Network's requirement ledger).++ if (!site.kind) assert.ok(html.includes('this page is a placeholder, nothing here is live yet'), `${d}: says it is a placeholder (never claim a product is live)`);++ else assert.ok(!html.includes('nothing here is live yet'), `${d}: a notice is not a placeholder`);assert.doesNotMatch(html, PRICING, `${d}: pricing copy`);assert.doesNotMatch(html, UNBACKED, `${d}: claims a hosting product that does not exist`);for (const m of html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)) {
@@ -67,6 +67,9 @@ const STANDING = {
@@ -67,6 +67,9 @@ const STANDING = {
closed: { label: 'closed', repoStage: 'closed' },
closed: { label: 'closed', repoStage: 'closed' },
pointer: { label: 'status', repoStage: 'pointer' },
pointer: { label: 'status', repoStage: 'pointer' },
};
};
+// The stable marker other repositories' checks grep for (Host docs/launch.md, Network's requirement
+// ledger): every placeholder says it, a notice never does.
+const MARKER = 'this page is a placeholder, nothing here is live yet';
const repoLink = (repo) => `<a href="https://github.com/OpenVibers/${esc(repo)}" rel="noopener"><code>OpenVibers/${esc(repo)}</code></a>`;
const repoLink = (repo) => `<a href="https://github.com/OpenVibers/${esc(repo)}" rel="noopener"><code>OpenVibers/${esc(repo)}</code></a>`;
/** The hero's status sentence: what is true about the product, and what its public launch waits for. */
/** The hero's status sentence: what is true about the product, and what its public launch waits for. */
function statusText(site) {
function statusText(site) {
@@ -74,15 +77,15 @@ function statusText(site) {
@@ -74,15 +77,15 @@ function statusText(site) {
const f = repoFacts(site);
const f = repoFacts(site);
const repo = site.plannedRepo ? repoLink(site.plannedRepo) : '<code>OpenVibe.Network</code>';
const repo = site.plannedRepo ? repoLink(site.plannedRepo) : '<code>OpenVibe.Network</code>';
const waits = site.launch ? ` The public launch is waiting for ${esc(site.launch)}.` : '';
const waits = site.launch ? ` The public launch is waiting for ${esc(site.launch)}.` : '';
- if (k === 'running') return `${repo} is built and its service runs on the network's host, but it is not public yet; this page is a placeholder.${waits}`;
- if (k === 'code') return `${repo} has code, but nothing is deployed yet; this page is a placeholder.${waits}`;
+ if (k === 'running') return `${repo} is built and its service runs on the network's host, but it is not public yet: ${MARKER}.${waits}`;
+ if (k === 'code') return `${repo} has code, but nothing is deployed yet: ${MARKER}.${waits}`;
if (k === 'surface') {
if (k === 'surface') {
const o = f.registry.origin;
const o = f.registry.origin;
- return `${repo} is live at <a href="${esc(o)}/">${esc(o.replace(/^https?:\/\//, ''))}</a>; this subdomain is not routed to it yet, so it serves this placeholder.`;
+ return `${repo} is live at <a href="${esc(o)}/">${esc(o.replace(/^https?:\/\//, ''))}</a>; this subdomain is not routed to it yet: ${MARKER}.`;
}
}
if (k === 'pointer') return `${repo} publishes the status of every OpenVibe service at <a href="${esc(site.links[0][1])}">${esc(site.links[0][1].replace(/^https?:\/\//, ''))}</a>; this address points there.`;
if (k === 'pointer') return `${repo} publishes the status of every OpenVibe service at <a href="${esc(site.links[0][1])}">${esc(site.links[0][1].replace(/^https?:\/\//, ''))}</a>; this address points there.`;
if (k === 'closed') return `${repo} is closed and stays as a decision record; no product launches at this address.`;
if (k === 'closed') return `${repo} is closed and stays as a decision record; no product launches at this address.`;
- return `${repo}: charter only, no code yet; this page is a placeholder.${waits}`;
+ return `${repo}: charter only, no code yet: ${MARKER}.${waits}`;
}
}
const today = new Date().toISOString().slice(0, 10);
const today = new Date().toISOString().slice(0, 10);
// A page is first published once; rebuilding it later changes dateModified, never datePublished.
// A page is first published once; rebuilding it later changes dateModified, never datePublished.
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.AI" rel="noopener"><code>OpenVibers/OpenVibe.AI</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a public API with its own access rules; today only other OpenVibe services call it. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.AI" rel="noopener"><code>OpenVibers/OpenVibe.AI</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a public API with its own access rules; today only other OpenVibe services call it. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenRe.Stream" rel="noopener"><code>OpenVibers/OpenRe.Stream</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenRe.Stream" rel="noopener"><code>OpenVibers/OpenRe.Stream</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Chat" rel="noopener"><code>OpenVibers/OpenVibe.Chat</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for its own web client at this address; the service already runs the chat on OpenVibe.Live. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Chat" rel="noopener"><code>OpenVibers/OpenVibe.Chat</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for its own web client at this address; the service already runs the chat on OpenVibe.Live. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Coupons" rel="noopener"><code>OpenVibers/OpenVibe.Coupons</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a coupons source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Coupons" rel="noopener"><code>OpenVibers/OpenVibe.Coupons</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a coupons source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Deals" rel="noopener"><code>OpenVibers/OpenVibe.Deals</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a deals source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Deals" rel="noopener"><code>OpenVibers/OpenVibe.Deals</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a deals source's terms and switch it on. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Host" rel="noopener"><code>OpenVibers/OpenVibe.Host</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the owner's go on its launch checklist. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Host" rel="noopener"><code>OpenVibers/OpenVibe.Host</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the owner's go on its launch checklist. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.News" rel="noopener"><code>OpenVibers/OpenVibe.News</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a news source's terms and an editor to publish the first reviewed story. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.News" rel="noopener"><code>OpenVibers/OpenVibe.News</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a news source's terms and an editor to publish the first reviewed story. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Reviews" rel="noopener"><code>OpenVibers/OpenVibe.Reviews</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a person to verify a review source's terms and an editor to publish the first reviewed summary. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Reviews" rel="noopener"><code>OpenVibers/OpenVibe.Reviews</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a person to verify a review source's terms and an editor to publish the first reviewed summary. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Tips" rel="noopener"><code>OpenVibers/OpenVibe.Tips</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the payments cutover to OpenVibe.Billing and a security review; tips keep working on OpenVibe.Live meanwhile. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Tips" rel="noopener"><code>OpenVibers/OpenVibe.Tips</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the payments cutover to OpenVibe.Billing and a security review; tips keep working on OpenVibe.Live meanwhile. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Trade" rel="noopener"><code>OpenVibers/OpenVibe.Trade</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for a verified data source and editors adding the first instruments. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.Trade" rel="noopener"><code>OpenVibers/OpenVibe.Trade</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for a verified data source and editors adding the first instruments. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.VIP" rel="noopener"><code>OpenVibers/OpenVibe.VIP</code></a> is built and its service runs on the network's host, but it is not public yet; this page is a placeholder. The public launch is waiting for the payments cutover to OpenVibe.Billing; checkout stays closed until then. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>in development</b> · <a href="https://github.com/OpenVibers/OpenVibe.VIP" rel="noopener"><code>OpenVibers/OpenVibe.VIP</code></a> is built and its service runs on the network's host, but it is not public yet: this page is a placeholder, nothing here is live yet. The public launch is waiting for the payments cutover to OpenVibe.Billing; checkout stays closed until then. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
@@ -101,7 +101,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://openvibe.network/#network"><i class="fa-solid fa-circle-nodes"></i> The whole network</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
<a class="btn" href="https://discord.gg/M6MuRUaeJj" rel="noopener"><i class="fa-brands fa-discord"></i> Follow the build</a>
</div>
</div>
- <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet, so it serves this placeholder. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
+ <p class="status"><i class="fa-solid fa-clock" aria-hidden="true"></i> Status: <b>not routed yet</b> · <a href="https://github.com/OpenVibers/OpenVibe.Network" rel="noopener"><code>OpenVibers/OpenVibe.Network</code></a> is live at <a href="https://openvibe.network/">openvibe.network</a>; this subdomain is not routed to it yet: this page is a placeholder, nothing here is live yet. · as of 2026-09-24 · <a href="/status.json">status.json</a></p>
</header>
</header>
<section id="what">
<section id="what">
@@ -26,7 +26,9 @@ for (const site of catalog.sites) {
@@ -26,7 +26,9 @@ for (const site of catalog.sites) {
pages++;
pages++;
assert.match(html, /<title>[^<]+<\/title>/, `${d}: title`);
assert.match(html, /<title>[^<]+<\/title>/, `${d}: title`);
assert.match(html, new RegExp(`<link rel="canonical" href="https://${d.replace(/\./g, '\\.')}/?"`), `${d}: canonical`);
assert.match(html, new RegExp(`<link rel="canonical" href="https://${d.replace(/\./g, '\\.')}/?"`), `${d}: canonical`);
- if (!site.kind) assert.match(html, /placeholder/i, `${d}: says it is a placeholder (never claim a product is live)`);
+ // The exact phrase other repositories' checks grep for (Host docs/launch.md, Network's requirement ledger).
+ if (!site.kind) assert.ok(html.includes('this page is a placeholder, nothing here is live yet'), `${d}: says it is a placeholder (never claim a product is live)`);
+ else assert.ok(!html.includes('nothing here is live yet'), `${d}: a notice is not a placeholder`);
assert.doesNotMatch(html, PRICING, `${d}: pricing copy`);
assert.doesNotMatch(html, PRICING, `${d}: pricing copy`);
assert.doesNotMatch(html, UNBACKED, `${d}: claims a hosting product that does not exist`);
assert.doesNotMatch(html, UNBACKED, `${d}: claims a hosting product that does not exist`);
for (const m of html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)) {
for (const m of html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)) {