openvibers/openvibe.sites Commits

Regenerate dist/ from openvibe-shared v2.3.1 (navbar boost hook, new boost.js and route-transition.js, refreshed asset hashes, release and status files)

OP OpenVibers committed 1 Oct 2026 · 0b4884caa3 · 133 files, +593 −262


Changes

ddiff --git a/dist/_shared/boost.js b/dist/_shared/boost.js
nnew file mode 100644
iindex 0000000..f989759
---- /dev/null
++++ b/dist/_shared/boost.js
@@@ -0,0 +1,223 @@
++/*
++ * openvibe-shared/boost.js — smooth page moves for a server-rendered site (plan T11). Every page stays a normal page
++ * (it works with no JavaScript, crawlers see the same HTML); boost only makes a same-site move feel like an app:
++ *
++ * <meta name="ov-boost" content="<site>@<release>"> on every page that may be swapped (the server's release id)
++ * <main id="main">…</main> the part that changes
++ * <script src="/shared/boost.js" data-main="#main" defer></script> starts itself (or call OVBoost.start below)
++ *
++ * A click on a same-site link (no modifier key, no target, no download, not data-no-boost, not /auth/ or /api/) fetches
++ * the next page's HTML (already prefetched on hover, focus or touch), loads its new stylesheets first, swaps <main> with
++ * the shared transition (route-transition.js: the top bar, "Loading Content…", a fade), updates the title, the head
++ * tags that describe the page (description, canonical, Open Graph, Twitter, JSON-LD), pushes history, restores scroll on
++ * back/forward and moves focus to the new content. Any doubt is a normal page load: a different release marker, a
++ * different set of external scripts, a non-HTML answer, a redirect off the site, an error, a timeout.
++ * Inline scripts inside the new <main> run after the swap (once); pages listen for `<prefix>:boost:load` to wire widgets.
++ *
++ * OVBoost.start({ main, prefix = 'ov', exclude = [], timeout = 8000, prefetch = true, fx = true }) → controller
++ * controller.go(url) controller.stop() controller.stats()
++ */
++(function (root) {
++ 'use strict';
++ if (typeof document === 'undefined' || root.OVBoost) return;
++ const selfSrc = document.currentScript && document.currentScript.src;
++ const selfData = (document.currentScript && document.currentScript.dataset) || {};
++ const HEAD_TAGS = 'meta[name="description"],link[rel="canonical"],meta[property^="og:"],meta[name^="twitter:"],script[type="application/ld+json"],link[rel="alternate"][hreflang],meta[name="robots"]';
++ const FILE_EXT = /\.(?:pdf|zip|gz|tgz|png|jpe?g|gif|webp|avif|svg|mp4|webm|mp3|wav|ogg|json|xml|txt|csv|ics)$/i;
++
++ function start(o = {}) {
++ const mainSel = o.main || 'main';
++ const prefix = o.prefix || 'ov';
++ const timeout = o.timeout || 8000;
++ const exclude = ['/auth/', '/api/', '/logout', ...(o.exclude || [])];
++ const cache = new Map(); // url → { at, promise }
++ const scrolls = Object.create(null); // history key → y
++ const s = { moves: 0, fallbacks: 0, prefetches: 0, last: null };
++ let inflight = null, stopped = false, key = 0;
++ const emit = (type, detail) => document.dispatchEvent(new root.CustomEvent(`${prefix}:boost:${type}`, { bubbles: true, detail }));
++ const marker = (doc) => { const m = doc.querySelector('meta[name="ov-boost"]'); return m ? m.getAttribute('content') : null; };
++ const externalScripts = (doc) => [...doc.querySelectorAll('script[src]')].map((t) => { try { const u = new URL(t.getAttribute('src'), root.location.href); return u.origin + u.pathname; } catch { return ''; } }).sort().join('\n');
++ const here = { marker: marker(document), scripts: externalScripts(document) };
++ if (!here.marker || !document.querySelector(mainSel)) return { go: (u) => root.location.assign(u), stop() {}, stats: () => ({ ...s, off: 'no ov-boost marker or main element' }) };
++
++ function boostable(a, ev) {
++ if (!a || a.target && a.target !== '_self' || a.hasAttribute('download') || a.closest('[data-no-boost]')) return null;
++ if (ev && (ev.defaultPrevented || ev.button !== 0 || ev.metaKey || ev.ctrlKey || ev.shiftKey || ev.altKey)) return null;
++ let u; try { u = new URL(a.href, root.location.href); } catch { return null; }
++ if (u.origin !== root.location.origin || !/^https?:$/.test(u.protocol)) return null;
++ if (FILE_EXT.test(u.pathname) || exclude.some((p) => u.pathname.startsWith(p))) return null;
++ if (u.pathname === root.location.pathname && u.search === root.location.search && u.hash) return null; // in-page anchor
++ return u;
++ }
++
++ function fetchPage(url) {
++ const hit = cache.get(url);
++ if (hit && Date.now() - hit.at < 15000) return hit.promise;
++ const ctl = new AbortController();
++ const t = root.setTimeout(() => ctl.abort(), timeout);
++ const promise = root.fetch(url, { credentials: 'same-origin', headers: { 'X-OV-Boost': '1', Accept: 'text/html' }, signal: ctl.signal, redirect: 'follow' })
++ .then(async (r) => {
++ const ct = r.headers.get('content-type') || '';
++ if (!r.ok || !/text\/html/.test(ct)) throw new Error(`not a page (${r.status} ${ct})`);
++ const final = new URL(r.url || url);
++ if (final.origin !== root.location.origin) throw new Error('redirected off the site');
++ return { html: await r.text(), url: final.href };
++ })
++ .finally(() => root.clearTimeout(t));
++ cache.set(url, { at: Date.now(), promise });
++ promise.catch(() => cache.delete(url));
++ return promise;
++ }
++
++ function prefetch(u) {
++ if (o.prefetch === false) return;
++ const c = root.navigator && root.navigator.connection;
++ if (c && (c.saveData || /2g/.test(c.effectiveType || ''))) return;
++ if (cache.has(u.href)) return;
++ s.prefetches++;
++ fetchPage(u.href).catch(() => {});
++ }
++
++ function loadStylesFirst(doc) {
++ const have = new Set([...document.querySelectorAll('link[rel="stylesheet"][href]')].map((l) => new URL(l.href, root.location.href).href));
++ const added = [...doc.querySelectorAll('link[rel="stylesheet"][href]')]
++ .map((l) => new URL(l.getAttribute('href'), root.location.href).href)
++ .filter((h) => !have.has(h))
++ .map((href) => new Promise((done) => {
++ const l = document.createElement('link'); l.rel = 'stylesheet'; l.href = href;
++ l.onload = l.onerror = () => done(); root.setTimeout(done, 4000);
++ document.head.appendChild(l);
++ }));
++ return Promise.all(added);
++ }
++
++ function updateHead(doc) {
++ document.title = doc.title;
++ document.head.querySelectorAll(HEAD_TAGS).forEach((el) => el.remove());
++ doc.head.querySelectorAll(HEAD_TAGS).forEach((el) => document.head.appendChild(document.importNode(el, true)));
++ const lang = doc.documentElement.getAttribute('lang');
++ if (lang) document.documentElement.setAttribute('lang', lang);
++ if (doc.body) document.body.className = doc.body.className; // page-type classes
++ }
++
++ function runInlineScripts(scope) {
++ scope.querySelectorAll('script:not([src])').forEach((old) => {
++ if (old.type && !/^(text|application)\/(javascript|ecmascript)$|^module$/.test(old.type)) return;
++ const s2 = document.createElement('script');
++ for (const a of old.attributes) s2.setAttribute(a.name, a.value);
++ s2.textContent = old.textContent;
++ old.replaceWith(s2);
++ });
++ }
++
++ function fx(mainEl) {
++ if (o.fx === false) return Promise.resolve(null);
++ if (root.OVRouteFx) return Promise.resolve(root.OVRouteFx);
++ if (!selfSrc) return Promise.resolve(null);
++ return new Promise((done) => {
++ const t = document.createElement('script');
++ t.src = selfSrc.replace(/boost\.js(\?.*)?$/, 'route-transition.js');
++ t.onload = () => done(root.OVRouteFx || null); t.onerror = () => done(null);
++ document.head.appendChild(t);
++ });
++ }
++
++ async function go(href, { push = true, restoreY = null } = {}) {
++ if (stopped) return root.location.assign(href);
++ const target = new URL(href, root.location.href);
++ const mine = inflight = {};
++ const mainEl = document.querySelector(mainSel);
++ const Fx = await fx(mainEl);
++ const h = Fx ? Fx.start(mainEl, { prefix }) : null;
++ emit('before', { url: target.href });
++ try {
++ const page = await fetchPage(target.href);
++ if (inflight !== mine) return; // a newer move won
++ const doc = new root.DOMParser().parseFromString(page.html, 'text/html');
++ const next = doc.querySelector(mainSel);
++ // A different release, other external scripts, or no <main>: this page cannot be swapped safely.
++ if (!next || marker(doc) !== here.marker || externalScripts(doc) !== here.scripts) throw new Error('not swappable');
++ if (h) h.status('applying styles');
++ await loadStylesFirst(doc);
++ if (inflight !== mine) return;
++ if (push) {
++ scrolls[key] = root.scrollY;
++ key += 1;
++ root.history.pushState({ ovBoost: key }, '', page.url + (target.hash && !new URL(page.url).hash ? target.hash : ''));
++ }
++ // The same element keeps its identity (the transition fades it, listeners on it survive): its
++ // attributes and children become the new page's.
++ const imported = document.importNode(next, true);
++ for (const at of [...mainEl.attributes]) if (!imported.hasAttribute(at.name)) mainEl.removeAttribute(at.name);
++ for (const at of [...imported.attributes]) mainEl.setAttribute(at.name, at.value);
++ mainEl.replaceChildren(...imported.childNodes);
++ const fresh = mainEl;
++ updateHead(doc);
++ runInlineScripts(fresh);
++ const anchor = target.hash && document.getElementById(decodeURIComponent(target.hash.slice(1)));
++ if (restoreY != null) root.scrollTo(0, restoreY);
++ else if (anchor) anchor.scrollIntoView();
++ else root.scrollTo(0, 0);
++ if (!fresh.hasAttribute('tabindex')) fresh.setAttribute('tabindex', '-1');
++ try { fresh.focus({ preventScroll: true }); } catch { /* */ }
++ s.moves++; s.last = page.url;
++ if (h) h.done();
++ emit('load', { url: page.url });
++ } catch (err) {
++ if (inflight !== mine) return;
++ s.fallbacks++;
++ if (h) h.done();
++ root.location.assign(target.href); // any doubt: a normal page load
++ }
++ }
++
++ function onClick(ev) {
++ const a = ev.target && ev.target.closest && ev.target.closest('a[href]');
++ const u = boostable(a, ev);
++ if (!u) return;
++ ev.preventDefault();
++ go(u.href);
++ }
++ function onIntent(ev) { const a = ev.target && ev.target.closest && ev.target.closest('a[href]'); const u = boostable(a); if (u) prefetch(u); }
++ function onPop(ev) {
++ const st = ev.state;
++ if (!st || st.ovBoost == null) { root.location.reload(); return; }
++ const y = scrolls[st.ovBoost];
++ scrolls[key] = root.scrollY;
++ key = st.ovBoost;
++ go(root.location.href, { push: false, restoreY: y != null ? y : 0 });
++ }
++
++ root.history.replaceState({ ...(root.history.state || {}), ovBoost: key }, '');
++ root.history.scrollRestoration = 'manual';
++ document.addEventListener('click', onClick);
++ document.addEventListener('mouseover', onIntent, { passive: true });
++ document.addEventListener('focusin', onIntent);
++ document.addEventListener('touchstart', onIntent, { passive: true });
++ root.addEventListener('popstate', onPop);
++ return {
++ go: (u) => go(u),
++ stop() {
++ stopped = true;
++ document.removeEventListener('click', onClick);
++ document.removeEventListener('mouseover', onIntent);
++ document.removeEventListener('focusin', onIntent);
++ document.removeEventListener('touchstart', onIntent);
++ root.removeEventListener('popstate', onPop);
++ root.history.scrollRestoration = 'auto';
++ },
++ stats: () => ({ ...s, cached: cache.size }),
++ };
++ }
++
++ root.OVBoost = { start, controller: null };
++ // <script src=".../boost.js" data-main="#main" [data-prefix] [data-exclude="/a/,/b/"] defer>: start once the page is parsed.
++ if (selfData.main) {
++ const boot = () => {
++ if (root.OVBoost.controller) return;
++ root.OVBoost.controller = start({ main: selfData.main, prefix: selfData.prefix || 'ov', exclude: (selfData.exclude || '').split(',').map((x) => x.trim()).filter(Boolean) });
++ };
++ if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot, { once: true });
++ else boot();
++ }
++})(typeof window !== 'undefined' ? window : globalThis);
ddiff --git a/dist/_shared/navbar.js b/dist/_shared/navbar.js
iindex 73ccb97..0cc30bf 100644
---- a/dist/_shared/navbar.js
++++ b/dist/_shared/navbar.js
@@@ -1496,10 +1496,24 @@
return nav;
}
++ // openvibe-shared/boost swapped the page in place: this is a new page for the history and the
++ // active-link state, and a login from here returns here.
++ let _boostHooked = false;
++ function hookBoost() {
++ if (_boostHooked || typeof document === 'undefined') return;
++ _boostHooked = true;
++ document.addEventListener('ov:boost:load', () => {
++ if (_config.history) _config.history = Object.assign({}, _config.history, { title: document.title, url: location.href });
++ try { render(); } catch { /* keep the old bar */ }
++ if (_config.user) recordHistory();
++ });
++ }
++
const OpenVibeNavbar = {
init(opts = {}) {
Object.assign(_config, opts);
injectStyles();
++ hookBoost();
const el = render();
upgradeIconsWhenFontsReady();
if (typeof document !== 'undefined') setTimeout(loadReleaseWatch, 4000);
ddiff --git a/dist/_shared/route-transition.js b/dist/_shared/route-transition.js
nnew file mode 100644
iindex 0000000..db84f65
---- /dev/null
++++ b/dist/_shared/route-transition.js
@@@ -0,0 +1,78 @@
++/*
++ * openvibe-shared/route-transition.js — what a page move looks like (roadmap WS-P): web-runtime.js's rt.enter() fetches
++ * this on the first in-site move. A thin progress bar at the top of the window; after 150 ms a centred line in the
++ * page, "Loading Content…" with the current phase under it ("applying styles", "starting up", or the site's own
++ * rt.status("Loading clips…")); then the page fades in (opacity only: a transform would make the page the containing
++ * block of its position:fixed children, and a bottom sheet or a floating button would jump while it ran). Theme tokens colour it (--accent, --accent-light,
++ * --text-muted); reduced motion gets no animation.
++ *
++ * const h = OVRouteFx.start(section, { label, prefix }) → { status(text), done() }; follows <prefix>:phase events
++ * OVRouteFx.bar('run' | 'done') → the top bar alone (a site's own loads)
++ */
++(function (root) {
++ 'use strict';
++ if (typeof document === 'undefined' || root.OVRouteFx) return;
++ const css = `.ovrt-wait{position:fixed;z-index:40;pointer-events:none;display:grid;place-content:center;justify-items:center;gap:12px;padding:24px;color:var(--text-muted,#8a96a8);font:600 .84rem/1.35 system-ui,sans-serif;text-align:center;animation:ovrtIn .25s ease both}
++.ovrt-wait i{display:block;width:min(200px,50vw);height:3px;border-radius:3px;overflow:hidden;position:relative;background:color-mix(in srgb,var(--accent,#3b82f6) 18%,transparent)}
++.ovrt-wait i::after{content:'';position:absolute;inset:0;width:38%;border-radius:3px;background:var(--accent,#3b82f6);animation:ovrtSlide 1.05s cubic-bezier(.45,0,.2,1) infinite}
++.ovrt-wait small{font-weight:500;font-size:.76rem;opacity:.85;min-height:1.2em;transition:opacity .2s}
++.ovrt-bar{position:fixed;left:0;top:0;height:2px;width:100%;z-index:2147483000;pointer-events:none;transform-origin:0 50%;transform:scaleX(0);opacity:0;background:linear-gradient(90deg,var(--accent,#3b82f6),var(--accent-light,#60a5fa));box-shadow:0 0 8px color-mix(in srgb,var(--accent,#3b82f6) 55%,transparent)}
++.ovrt-bar.is-run{opacity:1;transform:scaleX(.85);transition:transform 2.6s cubic-bezier(.1,.7,.2,1)}
++.ovrt-bar.is-done{opacity:0;transform:scaleX(1);transition:transform .18s ease,opacity .35s .12s}
++.ovrt-enter{animation:ovrtEnter .28s cubic-bezier(.22,1,.36,1) both}
++@keyframes ovrtEnter{from{opacity:0}to{opacity:1}}
++@keyframes ovrtIn{from{opacity:0}to{opacity:1}}
++@keyframes ovrtSlide{from{transform:translateX(-100%)}to{transform:translateX(265%)}}
++@media (prefers-reduced-motion:reduce){.ovrt-enter,.ovrt-wait,.ovrt-wait i::after{animation:none}.ovrt-bar.is-run,.ovrt-bar.is-done{transition:none}}`;
++ const st = document.createElement('style');
++ st.id = 'ovrt-css';
++ st.textContent = css;
++ document.head.appendChild(st);
++
++ let barEl = null, barTimer = 0;
++ function bar(state) {
++ if (!barEl) { barEl = document.createElement('div'); barEl.className = 'ovrt-bar'; barEl.setAttribute('aria-hidden', 'true'); document.body.appendChild(barEl); }
++ root.clearTimeout(barTimer);
++ if (state === 'run') { barEl.classList.remove('is-done', 'is-run'); void barEl.offsetWidth; barEl.classList.add('is-run'); }
++ else { barEl.classList.add('is-done'); barTimer = root.setTimeout(() => barEl.classList.remove('is-run', 'is-done'), 600); }
++ }
++ const reduced = () => { try { return root.matchMedia('(prefers-reduced-motion: reduce)').matches; } catch { return false; } };
++
++ const PHASES = { styles: 'applying styles', code: 'starting up' };
++ function start(section, { label, prefix = 'ov' } = {}) {
++ bar('run');
++ let wait = null, open = true;
++ const onPhase = (e) => { if (wait && e.detail && PHASES[e.detail.phase]) wait.querySelector('small').textContent = PHASES[e.detail.phase]; };
++ document.addEventListener(`${prefix}:phase`, onPhase);
++ const t = root.setTimeout(() => {
++ if (!open) return;
++ wait = document.createElement('div');
++ wait.className = 'ovrt-wait';
++ wait.setAttribute('role', 'status');
++ wait.innerHTML = '<i></i><span></span><small></small>';
++ wait.querySelector('span').textContent = `Loading ${label || 'page'}…`;
++ // Over the page's visible area, but outside it: a page script that re-renders its section while the
++ // route loads cannot take the line away.
++ const r = section.getBoundingClientRect(), top = Math.max(r.top, 0);
++ Object.assign(wait.style, { left: `${r.left}px`, width: `${r.width}px`, top: `${top}px`, height: `${Math.max(160, Math.min(r.bottom, root.innerHeight) - top)}px` });
++ document.body.appendChild(wait);
++ }, 150);
++ return {
++ status(text) { if (wait) wait.querySelector('small').textContent = String(text || ''); },
++ done() {
++ open = false;
++ root.clearTimeout(t);
++ document.removeEventListener(`${prefix}:phase`, onPhase);
++ if (wait) wait.remove();
++ bar('done');
++ if (reduced()) return;
++ section.classList.remove('ovrt-enter');
++ void section.offsetWidth;
++ section.classList.add('ovrt-enter');
++ root.setTimeout(() => section.classList.remove('ovrt-enter'), 400);
++ },
++ };
++ }
++
++ root.OVRouteFx = { start, bar };
++})(typeof window !== 'undefined' ? window : globalThis);
ddiff --git a/dist/_shared/web-runtime.js b/dist/_shared/web-runtime.js
iindex ad1273f..b7bd168 100644
---- a/dist/_shared/web-runtime.js
++++ b/dist/_shared/web-runtime.js
@@@ -1,33 +1,11 @@
--/*
-- * openvibe-shared/web-runtime.js — a site's feature loader and route lifecycle (roadmap WS-P task 6), taken out of
-- * OpenVibe.Live's public/js/ov-loader.js so every OpenVibe site loads its code the same way.
-- *
-- * const rt = OVWebRuntime.create({ features, routes, versions, ... }); // registry: see README "Web runtime"
-- * rt.load('broadcast') → the feature's markup fragment, its dependencies, stylesheets and scripts (in order), then
-- * its `after` hook; once, cached; a failed load can be retried.
-- * rt.route(path) → every feature the path's routes name, as one promise.
-- * rt.prefetch('channel') → download only (link rel=prefetch), never execute; skipped on Save-Data, 2g and < 2 GB
-- * of memory, and within a budget (count, and bytes where sizes are known).
-- * rt.nextRoute() / rt.gen() / rt.isCurrent(gen)
-- * → route generations: a loader that awaited something can tell whether the visitor moved on.
-- * rt.scope() → timers, listeners, observers, fetches (AbortSignal) and child scopes owned by the current
-- * route, released by the next nextRoute(). Anything registered on a scope whose route has
-- * ended is refused (and counted), never left running.
-- * rt.diagnostics(), rt.leaks()
-- * → loaded, failed and rolled-back features, duplicate tags, late registrations, what the
-- * current route holds, and the prefetch budget spent.
-- *
-- * Asset groups are transactional: a feature counts as loaded, runs its hook and fires `<prefix>:feature` only when
-- * every script loaded. When one fails, the stylesheets that attempt added (and no other feature wants) are taken out
-- * again and the failed script's tag is removed, so a retry fetches exactly what is missing. Scripts that did run are
-- * kept, so nothing runs twice.
-- * Tags the server already put in the document count as loaded. Global stubs (installStubs) keep inline onclick
-- * handlers working before their feature has loaded.
-- */
++/* openvibe-shared/web-runtime.js — a site's feature loader and route lifecycle (roadmap WS-P). API and rules: README "Web runtime". */
(function (root) {
'use strict';
if (typeof document === 'undefined' || root.OVWebRuntime) return;
++ // Where this file was loaded from: route-transition.js is fetched from next to it.
++ const selfSrc = document.currentScript && document.currentScript.src;
++
/** The key an asset is known by: its path on this site, origin + path elsewhere; the query (?v=) never counts. */
function assetKey(src) {
try {
@@@ -127,14 +105,18 @@
// ── Markup fragments ─────────────────────────────────────────────────────────────────────
const fragments = Object.create(null);
-- function loadFragment(name, sectionId) {
++ function loadFragment(name, sectionId, stylesReady) {
const section = document.getElementById(sectionId);
if (!section || section.dataset.fragmentLoaded === '1') return Promise.resolve();
if (fragments[name]) return fragments[name];
section.setAttribute('aria-busy', 'true');
-- fragments[name] = root.fetch(url(fragmentPath(name)), { credentials: 'same-origin' })
-- .then((r) => { if (!r.ok) throw new Error(`HTTP ${r.status}`); return r.text(); })
-- .then((html) => {
++ // Markup and styles download together; the markup goes in once its styles have loaded (or timed out),
++ // so a page is never shown unstyled for a moment.
++ fragments[name] = Promise.all([
++ root.fetch(url(fragmentPath(name)), { credentials: 'same-origin' }).then((r) => { if (!r.ok) throw new Error(`HTTP ${r.status}`); return r.text(); }),
++ stylesReady || null,
++ ])
++ .then(([html]) => {
// Inserted once, never replaced: players, previews and call tiles bind to these exact nodes.
if (section.dataset.fragmentLoaded !== '1') {
section.innerHTML = html;
@@@ -163,11 +145,14 @@
const css = (f.css || []).map(assetKey);
css.forEach((k) => (wanted[k] || (wanted[k] = new Set())).add(name));
const added = [];
-- // The feature's markup goes in before its dependencies and scripts run: modules bind to it when they load.
-- const markup = f.fragment ? loadFragment(f.fragment, f.section || `page-${f.fragment}`) : Promise.resolve();
++ // Every stylesheet the feature and its dependencies need starts at once, with the markup; the markup goes
++ // in once they have loaded, before the dependencies and scripts run (modules bind to it when they load).
++ emit(`${prefix}:phase`, { name, phase: 'styles' });
++ const stylesReady = Promise.all(stylesOf(name).map((p) => loadStyle(p, added)));
++ const markup = f.fragment ? loadFragment(f.fragment, f.section || `page-${f.fragment}`, stylesReady) : stylesReady;
features[name] = markup
-- .then(() => Promise.all((f.deps || []).map(load)))
-- .then(() => Promise.all((f.css || []).map((p) => loadStyle(p, added)).concat((f.js || []).map((p) => loadScript(p)))))
++ .then(() => { emit(`${prefix}:phase`, { name, phase: 'code' }); return Promise.all((f.deps || []).map(load)); })
++ .then(() => Promise.all((f.js || []).map((p) => loadScript(p))))
.then(() => {
loaded[name] = true;
delete d.failed[name];
@@@ -191,6 +176,36 @@
return features[name];
}
++ /** The stylesheets of a feature and everything it depends on, in order, each once. */
++ function stylesOf(name, seen = new Set(), out = []) {
++ const f = FEATURES[name];
++ if (!f || seen.has(name)) return out;
++ seen.add(name);
++ for (const dep of f.deps || []) stylesOf(dep, seen, out);
++ for (const p of f.css || []) if (!out.includes(p)) out.push(p);
++ return out;
++ }
++
++ // ── Page transitions ─────────────────────────────────────────────────────────────────────
++ // rt.enter(section, work, { label }): the section's content stays hidden (keeping its space) until `work` is done;
++ // route-transition.js (fetched next to this file on the first in-site move) draws the bar, line and fade-in.
++ let enters = 0, fx = null;
++ // Its own URL, without web-runtime's ?v= (the site's versions map hashes it, as any asset).
++ const fxSrc = selfSrc && assetKey(selfSrc).replace(/web-runtime\.js$/, 'route-transition.js');
++ // Ready before the first click: fetched a few seconds after the page settles.
++ if (fxSrc) root.setTimeout(() => { if (!root.OVRouteFx) loadScript(fxSrc).catch(() => {}); }, 4000);
++ function enter(section, work, opts = {}) {
++ // The page that arrived server-rendered: the first enter() before any in-site move (route generation ≤ 1).
++ const p = Promise.resolve(work), attr = `data-${prefix}-loading`, first = !enters++ && generation <= 1;
++ if (!section) return p;
++ if (!document.getElementById(`${prefix}-rt-css`)) { const st = document.createElement('style'); st.id = `${prefix}-rt-css`; st.textContent = `[${attr}]{position:relative;min-height:40vh}[${attr}]>*{visibility:hidden}`; document.head.appendChild(st); }
++ section.setAttribute(attr, '');
++ let h = null;
++ if (!first && fxSrc) (root.OVRouteFx ? p.constructor.resolve() : loadScript(fxSrc)).then(() => { if (section.hasAttribute(attr)) fx = h = root.OVRouteFx.start(section, { label: opts.label, prefix }); }, () => {});
++ const done = () => { section.removeAttribute(attr); if (h) h.done(); };
++ return p.then((v) => { done(); return v; }, (e) => { done(); throw e; });
++ }
++
function featuresFor(path) {
const out = [];
ROUTES.forEach((r) => { if (r.re.test(path)) r.features.forEach((n) => { if (out.indexOf(n) === -1) out.push(n); }); });
@@@ -427,6 +442,7 @@
gen: () => generation,
isCurrent: (g) => g === generation,
scope, nextRoute, installStubs, showRouteError, adoptExisting, watchIntent, idlePrefetch, diagnostics, leaks,
++ enter, status: (t) => fx && fx.status(t), stylesOf,
isLoaded: (name) => !!features[name],
/** Adopt the server's tags, load `initial` features, watch link intent, prefetch the idle features. */
boot(b = {}) {
ddiff --git a/dist/admin.openvibe.network/index.html b/dist/admin.openvibe.network/index.html
iindex 66e92bd..594366d 100644
---- a/dist/admin.openvibe.network/index.html
++++ b/dist/admin.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="admin.openvibe.network — One operator console for every service.">
<meta name="twitter:description" content="admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://admin.openvibe.network/#site","url":"https://admin.openvibe.network/","name":"admin.openvibe.network","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://admin.openvibe.network/#page","url":"https://admin.openvibe.network/","name":"admin.openvibe.network — One operator console for every service.","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","isPartOf":{"@id":"https://admin.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"admin.openvibe.network","item":"https://admin.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://admin.openvibe.network/#site","url":"https://admin.openvibe.network/","name":"admin.openvibe.network","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://admin.openvibe.network/#page","url":"https://admin.openvibe.network/","name":"admin.openvibe.network — One operator console for every service.","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","isPartOf":{"@id":"https://admin.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"admin.openvibe.network","item":"https://admin.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/admin.openvibe.network/release.json b/dist/admin.openvibe.network/release.json
iindex 62a3514..096f5dd 100644
---- a/dist/admin.openvibe.network/release.json
++++ b/dist/admin.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "admin",
-- "release": "d3d93241fa2c",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "f098d9962763",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/admin.openvibe.network/sitemap.xml b/dist/admin.openvibe.network/sitemap.xml
iindex a7d66d4..82c59ab 100644
---- a/dist/admin.openvibe.network/sitemap.xml
++++ b/dist/admin.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://admin.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://admin.openvibe.network/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/admin.openvibe.network/status.json b/dist/admin.openvibe.network/status.json
iindex d10f5a9..30b2d8b 100644
---- a/dist/admin.openvibe.network/status.json
++++ b/dist/admin.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/ai.openvibe.network/index.html b/dist/ai.openvibe.network/index.html
iindex fc88498..9cda6f3 100644
---- a/dist/ai.openvibe.network/index.html
++++ b/dist/ai.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="ai.openvibe.network — Moved: OpenVibe.AI&#39;s public home is ai.openvibe.services.">
<meta name="twitter:description" content="OpenVibe.AI&#39;s public address is now ai.openvibe.services, next to the rest of the network&#39;s programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.network/#site","url":"https://ai.openvibe.network/","name":"ai.openvibe.network","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://ai.openvibe.network/#page","url":"https://ai.openvibe.network/","name":"ai.openvibe.network — Moved: OpenVibe.AI's public home is ai.openvibe.services.","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","isPartOf":{"@id":"https://ai.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.network","item":"https://ai.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.network/#site","url":"https://ai.openvibe.network/","name":"ai.openvibe.network","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://ai.openvibe.network/#page","url":"https://ai.openvibe.network/","name":"ai.openvibe.network — Moved: OpenVibe.AI's public home is ai.openvibe.services.","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","isPartOf":{"@id":"https://ai.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.network","item":"https://ai.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -318,7 +318,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/ai.openvibe.network/release.json b/dist/ai.openvibe.network/release.json
iindex 4952444..5b2f4f0 100644
---- a/dist/ai.openvibe.network/release.json
++++ b/dist/ai.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "ai",
-- "release": "7438b3f419e0",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "414054675ca1",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/ai.openvibe.network/status.json b/dist/ai.openvibe.network/status.json
iindex 9c7a7bc..066b09f 100644
---- a/dist/ai.openvibe.network/status.json
++++ b/dist/ai.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/ai.openvibe.services/index.html b/dist/ai.openvibe.services/index.html
iindex 72c8d66..06242fe 100644
---- a/dist/ai.openvibe.services/index.html
++++ b/dist/ai.openvibe.services/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="ai.openvibe.services — One AI gateway for every model you choose.">
<meta name="twitter:description" content="OpenVibe.AI is the network&#39;s AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.services/#site","url":"https://ai.openvibe.services/","name":"ai.openvibe.services","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://ai.openvibe.services/#page","url":"https://ai.openvibe.services/","name":"ai.openvibe.services — One AI gateway for every model you choose.","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","isPartOf":{"@id":"https://ai.openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.services","item":"https://ai.openvibe.services/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.services/#site","url":"https://ai.openvibe.services/","name":"ai.openvibe.services","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://ai.openvibe.services/#page","url":"https://ai.openvibe.services/","name":"ai.openvibe.services — One AI gateway for every model you choose.","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","isPartOf":{"@id":"https://ai.openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.services","item":"https://ai.openvibe.services/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/ai.openvibe.services/release.json b/dist/ai.openvibe.services/release.json
iindex ccdedac..e348aaa 100644
---- a/dist/ai.openvibe.services/release.json
++++ b/dist/ai.openvibe.services/release.json
@@@ -1,11 +1,11 @@
{
"service": "ai",
-- "release": "7ee74be90e8a",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "fc601cbf3ea9",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/ai.openvibe.services/sitemap.xml b/dist/ai.openvibe.services/sitemap.xml
iindex 54bcba3..8eebf25 100644
---- a/dist/ai.openvibe.services/sitemap.xml
++++ b/dist/ai.openvibe.services/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://ai.openvibe.services/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://ai.openvibe.services/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/ai.openvibe.services/status.json b/dist/ai.openvibe.services/status.json
iindex 3fff8d2..332c0a5 100644
---- a/dist/ai.openvibe.services/status.json
++++ b/dist/ai.openvibe.services/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a public API with its own keys, quotas and playground; today only other OpenVibe services call it",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/api.openvibe.network/index.html b/dist/api.openvibe.network/index.html
iindex 289ade1..54dae29 100644
---- a/dist/api.openvibe.network/index.html
++++ b/dist/api.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="api.openvibe.network — The network, machine-readable.">
<meta name="twitter:description" content="api.openvibe.network is the planned home of the network&#39;s public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://api.openvibe.network/#site","url":"https://api.openvibe.network/","name":"api.openvibe.network","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://api.openvibe.network/#page","url":"https://api.openvibe.network/","name":"api.openvibe.network — The network, machine-readable.","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","isPartOf":{"@id":"https://api.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"api.openvibe.network","item":"https://api.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://api.openvibe.network/#site","url":"https://api.openvibe.network/","name":"api.openvibe.network","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://api.openvibe.network/#page","url":"https://api.openvibe.network/","name":"api.openvibe.network — The network, machine-readable.","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","isPartOf":{"@id":"https://api.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"api.openvibe.network","item":"https://api.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -330,7 +330,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/api.openvibe.network/release.json b/dist/api.openvibe.network/release.json
iindex d30a938..250f040 100644
---- a/dist/api.openvibe.network/release.json
++++ b/dist/api.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "api",
-- "release": "57d0965a86a0",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "abe7f4b266d7",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/api.openvibe.network/sitemap.xml b/dist/api.openvibe.network/sitemap.xml
iindex 9fe2624..770dc48 100644
---- a/dist/api.openvibe.network/sitemap.xml
++++ b/dist/api.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://api.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://api.openvibe.network/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/api.openvibe.network/status.json b/dist/api.openvibe.network/status.json
iindex dcc40a7..5749641 100644
---- a/dist/api.openvibe.network/status.json
++++ b/dist/api.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/auth.openvibe.network/index.html b/dist/auth.openvibe.network/index.html
iindex 02dcecb..b902ed0 100644
---- a/dist/auth.openvibe.network/index.html
++++ b/dist/auth.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="auth.openvibe.network — Sign in, once, for the whole network.">
<meta name="twitter:description" content="auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://auth.openvibe.network/#site","url":"https://auth.openvibe.network/","name":"auth.openvibe.network","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://auth.openvibe.network/#page","url":"https://auth.openvibe.network/","name":"auth.openvibe.network — Sign in, once, for the whole network.","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","isPartOf":{"@id":"https://auth.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"auth.openvibe.network","item":"https://auth.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://auth.openvibe.network/#site","url":"https://auth.openvibe.network/","name":"auth.openvibe.network","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://auth.openvibe.network/#page","url":"https://auth.openvibe.network/","name":"auth.openvibe.network — Sign in, once, for the whole network.","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","isPartOf":{"@id":"https://auth.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"auth.openvibe.network","item":"https://auth.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/auth.openvibe.network/release.json b/dist/auth.openvibe.network/release.json
iindex 7ce5cee..194d57f 100644
---- a/dist/auth.openvibe.network/release.json
++++ b/dist/auth.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "auth",
-- "release": "6eec453e0986",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "8c8b90c26d12",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/auth.openvibe.network/sitemap.xml b/dist/auth.openvibe.network/sitemap.xml
iindex 6366064..6963450 100644
---- a/dist/auth.openvibe.network/sitemap.xml
++++ b/dist/auth.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://auth.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://auth.openvibe.network/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/auth.openvibe.network/status.json b/dist/auth.openvibe.network/status.json
iindex e84ed6f..b765efd 100644
---- a/dist/auth.openvibe.network/status.json
++++ b/dist/auth.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openre.stream/index.html b/dist/openre.stream/index.html
iindex 7a5682e..81e7f0b 100644
---- a/dist/openre.stream/index.html
++++ b/dist/openre.stream/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.">
<meta name="twitter:description" content="OpenRe.Stream is OpenVibe&#39;s open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openre.stream/#site","url":"https://openre.stream/","name":"OpenRe.Stream","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openre.stream/#page","url":"https://openre.stream/","name":"OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","isPartOf":{"@id":"https://openre.stream/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenRe.Stream","item":"https://openre.stream/"}]}},{"@type":"FAQPage","@id":"https://openre.stream/#faq","mainEntity":[{"@type":"Question","name":"Can I stream without OBS?","acceptedAnswer":{"@type":"Answer","text":"Yes. Go live from your browser on OpenVibe.Live: press Go Live, allow your camera and microphone, and you are live. There is nothing to install."}},{"@type":"Question","name":"Do I need followers or subscribers to go live?","acceptedAnswer":{"@type":"Answer","text":"No. Every OpenVibe account can go live from the first minute, with no follower, subscriber or past-stream requirement."}},{"@type":"Question","name":"Can I stream from a Chromebook or a phone?","acceptedAnswer":{"@type":"Answer","text":"Yes. The broadcaster runs in Chrome, Edge, Firefox and Safari, on ChromeOS, Android and iOS as well as Windows, macOS and Linux."}},{"@type":"Question","name":"Can I restream to Twitch, YouTube and Kick at the same time?","acceptedAnswer":{"@type":"Answer","text":"Yes. One broadcast can go to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT server at once."}},{"@type":"Question","name":"Can I use OBS if I want to?","acceptedAnswer":{"@type":"Answer","text":"Yes. OBS and any RTMP encoder work, and so do WHIP encoders (OBS 30 and later, ffmpeg, GStreamer)."}}]}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openre.stream/#site","url":"https://openre.stream/","name":"OpenRe.Stream","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openre.stream/#page","url":"https://openre.stream/","name":"OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","isPartOf":{"@id":"https://openre.stream/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenRe.Stream","item":"https://openre.stream/"}]}},{"@type":"FAQPage","@id":"https://openre.stream/#faq","mainEntity":[{"@type":"Question","name":"Can I stream without OBS?","acceptedAnswer":{"@type":"Answer","text":"Yes. Go live from your browser on OpenVibe.Live: press Go Live, allow your camera and microphone, and you are live. There is nothing to install."}},{"@type":"Question","name":"Do I need followers or subscribers to go live?","acceptedAnswer":{"@type":"Answer","text":"No. Every OpenVibe account can go live from the first minute, with no follower, subscriber or past-stream requirement."}},{"@type":"Question","name":"Can I stream from a Chromebook or a phone?","acceptedAnswer":{"@type":"Answer","text":"Yes. The broadcaster runs in Chrome, Edge, Firefox and Safari, on ChromeOS, Android and iOS as well as Windows, macOS and Linux."}},{"@type":"Question","name":"Can I restream to Twitch, YouTube and Kick at the same time?","acceptedAnswer":{"@type":"Answer","text":"Yes. One broadcast can go to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT server at once."}},{"@type":"Question","name":"Can I use OBS if I want to?","acceptedAnswer":{"@type":"Answer","text":"Yes. OBS and any RTMP encoder work, and so do WHIP encoders (OBS 30 and later, ffmpeg, GStreamer)."}}]}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -344,7 +344,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openre.stream/release.json b/dist/openre.stream/release.json
iindex 92177e7..5a8e4aa 100644
---- a/dist/openre.stream/release.json
++++ b/dist/openre.stream/release.json
@@@ -1,11 +1,11 @@
{
"service": "stream",
-- "release": "d89063824a8f",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "6ca02230f052",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openre.stream/sitemap.xml b/dist/openre.stream/sitemap.xml
iindex 7184ab8..cca998f 100644
---- a/dist/openre.stream/sitemap.xml
++++ b/dist/openre.stream/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openre.stream/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openre.stream/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openre.stream/status.json b/dist/openre.stream/status.json
iindex 53e1973..d57c8fb 100644
---- a/dist/openre.stream/status.json
++++ b/dist/openre.stream/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the stream slots to move from OpenVibe.Live's ingest to OpenRe.Stream, one at a time; no stream uses it yet",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.actor/index.html b/dist/openvibe.actor/index.html
iindex e7b6e3a..dfc176d 100644
---- a/dist/openvibe.actor/index.html
++++ b/dist/openvibe.actor/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Actor — Every AI agent, every device, one command console.">
<meta name="twitter:description" content="OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe&#39;s own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — Every AI agent, every device, one command console.","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"Is this like OpenRouter?","acceptedAnswer":{"@type":"Answer","text":"Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."}},{"@type":"Question","name":"Which agent systems does it use?","acceptedAnswer":{"@type":"Answer","text":"OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."}},{"@type":"Question","name":"How does it choose?","acceptedAnswer":{"@type":"Answer","text":"For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."}},{"@type":"Question","name":"Can I keep my data on OpenVibe?","acceptedAnswer":{"@type":"Answer","text":"Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."}},{"@type":"Question","name":"Can it act without asking?","acceptedAnswer":{"@type":"Answer","text":"Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."}},{"@type":"Question","name":"Can an agent take full control of my computer?","acceptedAnswer":{"@type":"Answer","text":"Only if you set that Node to Full control on the device itself. It is time-boxed and recorded, you can see when an agent is in control, and a button, a hotkey or one command ends it. Most people use Trusted: routine actions run and risky ones ask first."}},{"@type":"Question","name":"Can I run Actor myself?","acceptedAnswer":{"@type":"Answer","text":"Yes. The router, the runtime, the console and the Node are open source and run on your own server with local models, and can link to openvibe.actor when you want hosted agents or the rest of the network."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."}}]}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — Every AI agent, every device, one command console.","description":"OpenVibe.Actor sends each task to the best agent for it, across hosted agent platforms, open-source runtimes, coding agents and OpenVibe's own, balanced live on price, speed and success. Install the OpenVibe Node on your computers, servers, Raspberry Pis and robots, and your agents can work on them for real, at the control level you choose, with a kill switch you hold. Run everything from one console, or host the whole thing yourself.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}},{"@type":"FAQPage","@id":"https://openvibe.actor/#faq","mainEntity":[{"@type":"Question","name":"Is this like OpenRouter?","acceptedAnswer":{"@type":"Answer","text":"Yes, for agents: one API and one bill for many agent systems, with live prices and rankings. Actor routes whole tasks rather than single model calls, and it checks the results before you get them."}},{"@type":"Question","name":"Which agent systems does it use?","acceptedAnswer":{"@type":"Answer","text":"OpenVibe's own runtime, hosted agent platforms from companies like OpenAI and Anthropic, coding agents, and open-source agents on OpenVibe's hardware. Each is an adapter, so new ones join quickly."}},{"@type":"Question","name":"How does it choose?","acceptedAnswer":{"@type":"Answer","text":"For each kind of task it compares price, speed, success rate and current health across agent systems, then applies your mode and budget. Every choice is recorded and explained."}},{"@type":"Question","name":"Can I keep my data on OpenVibe?","acceptedAnswer":{"@type":"Answer","text":"Yes. Private mode uses only OpenVibe's own runtime and open models on its own hardware."}},{"@type":"Question","name":"Can it act without asking?","acceptedAnswer":{"@type":"Answer","text":"Only as far as you allow. Anything with consequences, like publishing, spending or moving a robot, waits for your approval, and every action is logged."}},{"@type":"Question","name":"Can an agent take full control of my computer?","acceptedAnswer":{"@type":"Answer","text":"Only if you set that Node to Full control on the device itself. It is time-boxed and recorded, you can see when an agent is in control, and a button, a hotkey or one command ends it. Most people use Trusted: routine actions run and risky ones ask first."}},{"@type":"Question","name":"Can I run Actor myself?","acceptedAnswer":{"@type":"Answer","text":"Yes. The router, the runtime, the console and the Node are open source and run on your own server with local models, and can link to openvibe.actor when you want hosted agents or the rest of the network."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"You will be able to start without paying, within limits published before launch; bigger tasks and stronger agents will be paid, with the cost shown per task."}}]}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -425,7 +425,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.actor/release.json b/dist/openvibe.actor/release.json
iindex d7da84b..db1009e 100644
---- a/dist/openvibe.actor/release.json
++++ b/dist/openvibe.actor/release.json
@@@ -1,11 +1,11 @@
{
"service": "actor",
-- "release": "e6dada57d6ef",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "95a1b305f386",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.actor/sitemap.xml b/dist/openvibe.actor/sitemap.xml
iindex 282f8e9..b464681 100644
---- a/dist/openvibe.actor/sitemap.xml
++++ b/dist/openvibe.actor/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.actor/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.actor/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.actor/status.json b/dist/openvibe.actor/status.json
iindex 13fa6ad..56d9e0a 100644
---- a/dist/openvibe.actor/status.json
++++ b/dist/openvibe.actor/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the task router with its first agent adapters, then personal agents on OpenVibe.Network accounts",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.bot/index.html b/dist/openvibe.bot/index.html
iindex 12c27bd..d411a8d 100644
---- a/dist/openvibe.bot/index.html
++++ b/dist/openvibe.bot/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Bot — Get your robot online in minutes.">
<meta name="twitter:description" content="OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own: a Raspberry Pi robot, an ESP32, a ROS 2 robot, a phone, or a Cozmo. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own: a Raspberry Pi robot, an ESP32, a ROS 2 robot, a phone, or a Cozmo. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Get your robot online in minutes.","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own: a Raspberry Pi robot, an ESP32, a ROS 2 robot, a phone, or a Cozmo. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}},{"@type":"FAQPage","@id":"https://openvibe.bot/#faq","mainEntity":[{"@type":"Question","name":"Do I need to open ports on my router?","acceptedAnswer":{"@type":"Answer","text":"No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks."}},{"@type":"Question","name":"Is it only for streaming?","acceptedAnswer":{"@type":"Answer","text":"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."}},{"@type":"Question","name":"Which robot comes first?","acceptedAnswer":{"@type":"Answer","text":"The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed."}},{"@type":"Question","name":"Does it work with Cozmo?","acceptedAnswer":{"@type":"Answer","text":"Yes, built in. Cozmo makes its own Wi-Fi and runs closed firmware, so the OpenVibe agent runs on a computer next to it (a Raspberry Pi or a laptop) that joins Cozmo's Wi-Fi and stays online through another connection. You get driving, the head and lift, its camera, its face display, its voice, lights and cubes, and it stops at edges on its own. No phone app needed."}},{"@type":"Question","name":"What hardware works?","acceptedAnswer":{"@type":"Answer","text":"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."}},{"@type":"Question","name":"How does it keep the robot safe?","acceptedAnswer":{"@type":"Answer","text":"The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch."}}]}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own: a Raspberry Pi robot, an ESP32, a ROS 2 robot, a phone, or a Cozmo. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Get your robot online in minutes.","description":"OpenVibe.Bot is an open control panel for robots. Add a robot, pair it with one command or a QR code, and drive it from any browser with live video, real controls and a stop button that always works. Buy a ready-made bot or bring your own: a Raspberry Pi robot, an ESP32, a ROS 2 robot, a phone, or a Cozmo. Share control, automate it, hand it to your AI agent, and stream it to OpenVibe.Live or openre.stream when you want to.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}},{"@type":"FAQPage","@id":"https://openvibe.bot/#faq","mainEntity":[{"@type":"Question","name":"Do I need to open ports on my router?","acceptedAnswer":{"@type":"Answer","text":"No. The robot connects out to OpenVibe, and video and controls travel over WebRTC, so it works behind ordinary home and mobile networks."}},{"@type":"Question","name":"Is it only for streaming?","acceptedAnswer":{"@type":"Answer","text":"No. Streaming is optional. Bot is a control panel for your robot first: drive it, check on it, share it and automate it."}},{"@type":"Question","name":"Which robot comes first?","acceptedAnswer":{"@type":"Answer","text":"The Adeept 4WD Smart Car Kit for Raspberry Pi: four motors, a pan-tilt camera, distance and line sensors, lights and a buzzer. OpenVibe's device agent drives it directly, so its own open control port never has to be exposed."}},{"@type":"Question","name":"Does it work with Cozmo?","acceptedAnswer":{"@type":"Answer","text":"Yes, built in. Cozmo makes its own Wi-Fi and runs closed firmware, so the OpenVibe agent runs on a computer next to it (a Raspberry Pi or a laptop) that joins Cozmo's Wi-Fi and stays online through another connection. You get driving, the head and lift, its camera, its face display, its voice, lights and cubes, and it stops at edges on its own. No phone app needed."}},{"@type":"Question","name":"What hardware works?","acceptedAnswer":{"@type":"Answer","text":"A Raspberry Pi or another Linux board, an ESP32, a ROS 2 robot, an Android phone, or an ONVIF or RTSP camera. The curated kits list exactly what to buy."}},{"@type":"Question","name":"How does it keep the robot safe?","acceptedAnswer":{"@type":"Answer","text":"The device stops its motors by itself when commands or the connection stop. There is an emergency stop in the panel, limits on speed, range and time, and every command is logged."}},{"@type":"Question","name":"What will it cost?","acceptedAnswer":{"@type":"Answer","text":"Controlling your own robot will not cost anything. Limits and any paid extras will be published before launch."}}]}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -384,7 +384,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.bot/release.json b/dist/openvibe.bot/release.json
iindex d8b5d6e..06e7365 100644
---- a/dist/openvibe.bot/release.json
++++ b/dist/openvibe.bot/release.json
@@@ -1,11 +1,11 @@
{
"service": "bot",
-- "release": "5cbb5dbbdbf1",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "6367c7a17282",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.bot/sitemap.xml b/dist/openvibe.bot/sitemap.xml
iindex 24b44b5..5679941 100644
---- a/dist/openvibe.bot/sitemap.xml
++++ b/dist/openvibe.bot/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.bot/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.bot/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.bot/status.json b/dist/openvibe.bot/status.json
iindex 44a40d0..5c87690 100644
---- a/dist/openvibe.bot/status.json
++++ b/dist/openvibe.bot/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the Bot service, its device agent and the first robots paired",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.coupons/index.html b/dist/openvibe.coupons/index.html
iindex 0349f64..c09cf64 100644
---- a/dist/openvibe.coupons/index.html
++++ b/dist/openvibe.coupons/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Coupons — Codes that actually work.">
<meta name="twitter:description" content="OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.coupons/#site","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.coupons/#page","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons — Codes that actually work.","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","isPartOf":{"@id":"https://openvibe.coupons/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Coupons","item":"https://openvibe.coupons/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.coupons/#site","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.coupons/#page","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons — Codes that actually work.","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","isPartOf":{"@id":"https://openvibe.coupons/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Coupons","item":"https://openvibe.coupons/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.coupons/release.json b/dist/openvibe.coupons/release.json
iindex 626296d..d2c499e 100644
---- a/dist/openvibe.coupons/release.json
++++ b/dist/openvibe.coupons/release.json
@@@ -1,11 +1,11 @@
{
"service": "coupons",
-- "release": "8770f6d712a0",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "7cd4f316acce",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.coupons/sitemap.xml b/dist/openvibe.coupons/sitemap.xml
iindex e90896d..0923a3a 100644
---- a/dist/openvibe.coupons/sitemap.xml
++++ b/dist/openvibe.coupons/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.coupons/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.coupons/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.coupons/status.json b/dist/openvibe.coupons/status.json
iindex 90b0648..b9943f6 100644
---- a/dist/openvibe.coupons/status.json
++++ b/dist/openvibe.coupons/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a coupons source's terms and switch it on",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.deals/index.html b/dist/openvibe.deals/index.html
iindex c549d73..fc524a7 100644
---- a/dist/openvibe.deals/index.html
++++ b/dist/openvibe.deals/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Deals — Deals worth seeing.">
<meta name="twitter:description" content="OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.deals/#site","url":"https://openvibe.deals/","name":"OpenVibe.Deals","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.deals/#page","url":"https://openvibe.deals/","name":"OpenVibe.Deals — Deals worth seeing.","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","isPartOf":{"@id":"https://openvibe.deals/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Deals","item":"https://openvibe.deals/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.deals/#site","url":"https://openvibe.deals/","name":"OpenVibe.Deals","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.deals/#page","url":"https://openvibe.deals/","name":"OpenVibe.Deals — Deals worth seeing.","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","isPartOf":{"@id":"https://openvibe.deals/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Deals","item":"https://openvibe.deals/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.deals/release.json b/dist/openvibe.deals/release.json
iindex 56a29a0..cc60e07 100644
---- a/dist/openvibe.deals/release.json
++++ b/dist/openvibe.deals/release.json
@@@ -1,11 +1,11 @@
{
"service": "deals",
-- "release": "d020ff1ae119",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "fb9b0c9f6581",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.deals/sitemap.xml b/dist/openvibe.deals/sitemap.xml
iindex 238ca4e..41de023 100644
---- a/dist/openvibe.deals/sitemap.xml
++++ b/dist/openvibe.deals/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.deals/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.deals/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.deals/status.json b/dist/openvibe.deals/status.json
iindex 00d153d..c23c8c6 100644
---- a/dist/openvibe.deals/status.json
++++ b/dist/openvibe.deals/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a deals source's terms and switch it on",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.download/index.html b/dist/openvibe.download/index.html
iindex eb27d6b..87f365a 100644
---- a/dist/openvibe.download/index.html
++++ b/dist/openvibe.download/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Download — Upload anything. Share it anywhere.">
<meta name="twitter:description" content="OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.download/#site","url":"https://openvibe.download/","name":"OpenVibe.Download","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.download/#page","url":"https://openvibe.download/","name":"OpenVibe.Download — Upload anything. Share it anywhere.","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","isPartOf":{"@id":"https://openvibe.download/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Download","item":"https://openvibe.download/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.download/#site","url":"https://openvibe.download/","name":"OpenVibe.Download","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.download/#page","url":"https://openvibe.download/","name":"OpenVibe.Download — Upload anything. Share it anywhere.","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","isPartOf":{"@id":"https://openvibe.download/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Download","item":"https://openvibe.download/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.download/release.json b/dist/openvibe.download/release.json
iindex cdedca3..29cbc2e 100644
---- a/dist/openvibe.download/release.json
++++ b/dist/openvibe.download/release.json
@@@ -1,11 +1,11 @@
{
"service": "download",
-- "release": "fe3036a1a92f",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "0eb8d4bd74dc",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.download/sitemap.xml b/dist/openvibe.download/sitemap.xml
iindex 81c33d2..bd7ad97 100644
---- a/dist/openvibe.download/sitemap.xml
++++ b/dist/openvibe.download/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.download/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.download/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.download/status.json b/dist/openvibe.download/status.json
iindex add67b8..3d0bdf3 100644
---- a/dist/openvibe.download/status.json
++++ b/dist/openvibe.download/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the shared file service on OpenVibe.Media",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.events/index.html b/dist/openvibe.events/index.html
iindex 1de01d2..e9380dc 100644
---- a/dist/openvibe.events/index.html
++++ b/dist/openvibe.events/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Events — Events, queues and webhooks you can build on.">
<meta name="twitter:description" content="OpenVibe.Events is the network&#39;s event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.events/#site","url":"https://openvibe.events/","name":"OpenVibe.Events","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.events/#page","url":"https://openvibe.events/","name":"OpenVibe.Events — Events, queues and webhooks you can build on.","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","isPartOf":{"@id":"https://openvibe.events/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Events","item":"https://openvibe.events/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.events/#site","url":"https://openvibe.events/","name":"OpenVibe.Events","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.events/#page","url":"https://openvibe.events/","name":"OpenVibe.Events — Events, queues and webhooks you can build on.","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","isPartOf":{"@id":"https://openvibe.events/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Events","item":"https://openvibe.events/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.events/release.json b/dist/openvibe.events/release.json
iindex 114f209..908fcb9 100644
---- a/dist/openvibe.events/release.json
++++ b/dist/openvibe.events/release.json
@@@ -1,11 +1,11 @@
{
"service": "events",
-- "release": "215c667caeec",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "a605c9f9d88c",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.events/sitemap.xml b/dist/openvibe.events/sitemap.xml
iindex 265ddd0..ccb107d 100644
---- a/dist/openvibe.events/sitemap.xml
++++ b/dist/openvibe.events/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.events/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.events/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.events/status.json b/dist/openvibe.events/status.json
iindex 8ce378f..0826bbe 100644
---- a/dist/openvibe.events/status.json
++++ b/dist/openvibe.events/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the developer site and queue and stream primitives; the API runs at events.openvibe.network",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.food/index.html b/dist/openvibe.food/index.html
iindex 6f2e329..2a6228c 100644
---- a/dist/openvibe.food/index.html
++++ b/dist/openvibe.food/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Food — What should we eat?">
<meta name="twitter:description" content="OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network&#39;s AI. The food tools on OpenVibe.Tools will live here too.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.food/#site","url":"https://openvibe.food/","name":"OpenVibe.Food","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.food/#page","url":"https://openvibe.food/","name":"OpenVibe.Food — What should we eat?","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","isPartOf":{"@id":"https://openvibe.food/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Food","item":"https://openvibe.food/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.food/#site","url":"https://openvibe.food/","name":"OpenVibe.Food","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.food/#page","url":"https://openvibe.food/","name":"OpenVibe.Food — What should we eat?","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","isPartOf":{"@id":"https://openvibe.food/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Food","item":"https://openvibe.food/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.food/release.json b/dist/openvibe.food/release.json
iindex 2385fdc..1b1a8a8 100644
---- a/dist/openvibe.food/release.json
++++ b/dist/openvibe.food/release.json
@@@ -1,11 +1,11 @@
{
"service": "food",
-- "release": "f10c97817980",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "878d27edfc5d",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.food/sitemap.xml b/dist/openvibe.food/sitemap.xml
iindex 37b20ee..f6f619c 100644
---- a/dist/openvibe.food/sitemap.xml
++++ b/dist/openvibe.food/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.food/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.food/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.food/status.json b/dist/openvibe.food/status.json
iindex f11204d..c7eb3e7 100644
---- a/dist/openvibe.food/status.json
++++ b/dist/openvibe.food/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the food tools moving over from OpenVibe.Tools",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.help/index.html b/dist/openvibe.help/index.html
iindex d5cb16a..a5dd82b 100644
---- a/dist/openvibe.help/index.html
++++ b/dist/openvibe.help/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Help — Answers, support and a way to reach people.">
<meta name="twitter:description" content="OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.help/#site","url":"https://openvibe.help/","name":"OpenVibe.Help","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.help/#page","url":"https://openvibe.help/","name":"OpenVibe.Help — Answers, support and a way to reach people.","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","isPartOf":{"@id":"https://openvibe.help/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Help","item":"https://openvibe.help/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.help/#site","url":"https://openvibe.help/","name":"OpenVibe.Help","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.help/#page","url":"https://openvibe.help/","name":"OpenVibe.Help — Answers, support and a way to reach people.","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","isPartOf":{"@id":"https://openvibe.help/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Help","item":"https://openvibe.help/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.help/release.json b/dist/openvibe.help/release.json
iindex ba9b3d4..3a28931 100644
---- a/dist/openvibe.help/release.json
++++ b/dist/openvibe.help/release.json
@@@ -1,11 +1,11 @@
{
"service": "help",
-- "release": "a22dfa6141ae",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "607e29112e47",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.help/sitemap.xml b/dist/openvibe.help/sitemap.xml
iindex bc8e233..af26a65 100644
---- a/dist/openvibe.help/sitemap.xml
++++ b/dist/openvibe.help/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.help/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.help/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.help/status.json b/dist/openvibe.help/status.json
iindex ef2fba8..7dd51f4 100644
---- a/dist/openvibe.help/status.json
++++ b/dist/openvibe.help/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the ticket service and the Frame's Help button",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.homes/index.html b/dist/openvibe.homes/index.html
iindex 759e29d..58f4e3a 100644
---- a/dist/openvibe.homes/index.html
++++ b/dist/openvibe.homes/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Homes — Homes to own, clearly explained.">
<meta name="twitter:description" content="OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.homes/#site","url":"https://openvibe.homes/","name":"OpenVibe.Homes","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.homes/#page","url":"https://openvibe.homes/","name":"OpenVibe.Homes — Homes to own, clearly explained.","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","isPartOf":{"@id":"https://openvibe.homes/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Homes","item":"https://openvibe.homes/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.homes/#site","url":"https://openvibe.homes/","name":"OpenVibe.Homes","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.homes/#page","url":"https://openvibe.homes/","name":"OpenVibe.Homes — Homes to own, clearly explained.","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","isPartOf":{"@id":"https://openvibe.homes/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Homes","item":"https://openvibe.homes/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.homes/release.json b/dist/openvibe.homes/release.json
iindex c547cde..e1afc6a 100644
---- a/dist/openvibe.homes/release.json
++++ b/dist/openvibe.homes/release.json
@@@ -1,11 +1,11 @@
{
"service": "homes",
-- "release": "6de124d8b681",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "00705f1b0644",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.homes/sitemap.xml b/dist/openvibe.homes/sitemap.xml
iindex 4d2dc80..835ee80 100644
---- a/dist/openvibe.homes/sitemap.xml
++++ b/dist/openvibe.homes/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.homes/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.homes/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.homes/status.json b/dist/openvibe.homes/status.json
iindex 49dd8a9..4e2959d 100644
---- a/dist/openvibe.homes/status.json
++++ b/dist/openvibe.homes/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "verified listing and records sources",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.host/index.html b/dist/openvibe.host/index.html
iindex a2d3f34..a380289 100644
---- a/dist/openvibe.host/index.html
++++ b/dist/openvibe.host/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Host — Static sites for OpenVibe projects.">
<meta name="twitter:description" content="OpenVibe.Host is the network&#39;s deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network&#39;s host: deploys with automatic rollback, backups and restore drills for the network&#39;s own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at &lt;site&gt;.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.host/#site","url":"https://openvibe.host/","name":"OpenVibe.Host","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.host/#page","url":"https://openvibe.host/","name":"OpenVibe.Host — Static sites for OpenVibe projects.","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","isPartOf":{"@id":"https://openvibe.host/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Host","item":"https://openvibe.host/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.host/#site","url":"https://openvibe.host/","name":"OpenVibe.Host","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.host/#page","url":"https://openvibe.host/","name":"OpenVibe.Host — Static sites for OpenVibe projects.","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","isPartOf":{"@id":"https://openvibe.host/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Host","item":"https://openvibe.host/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.host/release.json b/dist/openvibe.host/release.json
iindex be92c0a..e9242c5 100644
---- a/dist/openvibe.host/release.json
++++ b/dist/openvibe.host/release.json
@@@ -1,11 +1,11 @@
{
"service": "host",
-- "release": "2233fb7572a6",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "176051f44fa8",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.host/sitemap.xml b/dist/openvibe.host/sitemap.xml
iindex 0311c0c..0c324a3 100644
---- a/dist/openvibe.host/sitemap.xml
++++ b/dist/openvibe.host/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.host/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.host/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.host/status.json b/dist/openvibe.host/status.json
iindex ecb7956..cdee529 100644
---- a/dist/openvibe.host/status.json
++++ b/dist/openvibe.host/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the owner's go on its launch checklist",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.news/index.html b/dist/openvibe.news/index.html
iindex fc997ca..0d3f7af 100644
---- a/dist/openvibe.news/index.html
++++ b/dist/openvibe.news/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.News — Sourced. Summarised. Many angles.">
<meta name="twitter:description" content="OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can&#39;t see.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.news/#site","url":"https://openvibe.news/","name":"OpenVibe.News","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.news/#page","url":"https://openvibe.news/","name":"OpenVibe.News — Sourced. Summarised. Many angles.","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","isPartOf":{"@id":"https://openvibe.news/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.News","item":"https://openvibe.news/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.news/#site","url":"https://openvibe.news/","name":"OpenVibe.News","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.news/#page","url":"https://openvibe.news/","name":"OpenVibe.News — Sourced. Summarised. Many angles.","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","isPartOf":{"@id":"https://openvibe.news/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.News","item":"https://openvibe.news/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.news/release.json b/dist/openvibe.news/release.json
iindex 9f373f7..e1338e0 100644
---- a/dist/openvibe.news/release.json
++++ b/dist/openvibe.news/release.json
@@@ -1,11 +1,11 @@
{
"service": "news",
-- "release": "afad07684f23",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "03ec9fdc3183",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.news/sitemap.xml b/dist/openvibe.news/sitemap.xml
iindex c747ce6..60e8b37 100644
---- a/dist/openvibe.news/sitemap.xml
++++ b/dist/openvibe.news/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.news/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.news/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.news/status.json b/dist/openvibe.news/status.json
iindex 7ddac85..cd6f95d 100644
---- a/dist/openvibe.news/status.json
++++ b/dist/openvibe.news/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a news source's terms and an editor to publish the first reviewed story",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.pics/index.html b/dist/openvibe.pics/index.html
iindex c02a228..f51e386 100644
---- a/dist/openvibe.pics/index.html
++++ b/dist/openvibe.pics/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Pics — Share pictures. Fast, open, yours.">
<meta name="twitter:description" content="OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.pics/#site","url":"https://openvibe.pics/","name":"OpenVibe.Pics","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.pics/#page","url":"https://openvibe.pics/","name":"OpenVibe.Pics — Share pictures. Fast, open, yours.","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","isPartOf":{"@id":"https://openvibe.pics/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Pics","item":"https://openvibe.pics/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.pics/#site","url":"https://openvibe.pics/","name":"OpenVibe.Pics","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.pics/#page","url":"https://openvibe.pics/","name":"OpenVibe.Pics — Share pictures. Fast, open, yours.","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","isPartOf":{"@id":"https://openvibe.pics/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Pics","item":"https://openvibe.pics/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.pics/release.json b/dist/openvibe.pics/release.json
iindex 0da5621..b1d4564 100644
---- a/dist/openvibe.pics/release.json
++++ b/dist/openvibe.pics/release.json
@@@ -1,11 +1,11 @@
{
"service": "pics",
-- "release": "35f8193c0d26",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "7cbb43882172",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.pics/sitemap.xml b/dist/openvibe.pics/sitemap.xml
iindex 2984c30..d292538 100644
---- a/dist/openvibe.pics/sitemap.xml
++++ b/dist/openvibe.pics/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.pics/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.pics/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.pics/status.json b/dist/openvibe.pics/status.json
iindex 1b5e737..8d066d9 100644
---- a/dist/openvibe.pics/status.json
++++ b/dist/openvibe.pics/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the shared image upload and processing service",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.quest/index.html b/dist/openvibe.quest/index.html
iindex c081962..e4f1309 100644
---- a/dist/openvibe.quest/index.html
++++ b/dist/openvibe.quest/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Quest — Quests across the whole network.">
<meta name="twitter:description" content="OpenVibe.Quest will be the network&#39;s shared quest and rewards system: quests that span every OpenVibe site, from a streamer&#39;s getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.quest/#site","url":"https://openvibe.quest/","name":"OpenVibe.Quest","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.quest/#page","url":"https://openvibe.quest/","name":"OpenVibe.Quest — Quests across the whole network.","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","isPartOf":{"@id":"https://openvibe.quest/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Quest","item":"https://openvibe.quest/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.quest/#site","url":"https://openvibe.quest/","name":"OpenVibe.Quest","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.quest/#page","url":"https://openvibe.quest/","name":"OpenVibe.Quest — Quests across the whole network.","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","isPartOf":{"@id":"https://openvibe.quest/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Quest","item":"https://openvibe.quest/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.quest/release.json b/dist/openvibe.quest/release.json
iindex f5949c4..7285edc 100644
---- a/dist/openvibe.quest/release.json
++++ b/dist/openvibe.quest/release.json
@@@ -1,11 +1,11 @@
{
"service": "quest",
-- "release": "4eba62984a98",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "13c554575eea",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.quest/sitemap.xml b/dist/openvibe.quest/sitemap.xml
iindex 0e93705..06830a0 100644
---- a/dist/openvibe.quest/sitemap.xml
++++ b/dist/openvibe.quest/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.quest/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.quest/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.quest/status.json b/dist/openvibe.quest/status.json
iindex 919a3ce..995243c 100644
---- a/dist/openvibe.quest/status.json
++++ b/dist/openvibe.quest/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the shared quest service",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.rent/index.html b/dist/openvibe.rent/index.html
iindex d14d440..fceab83 100644
---- a/dist/openvibe.rent/index.html
++++ b/dist/openvibe.rent/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Rent — Every rental, one search.">
<meta name="twitter:description" content="OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.rent/#site","url":"https://openvibe.rent/","name":"OpenVibe.Rent","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.rent/#page","url":"https://openvibe.rent/","name":"OpenVibe.Rent — Every rental, one search.","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","isPartOf":{"@id":"https://openvibe.rent/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Rent","item":"https://openvibe.rent/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.rent/#site","url":"https://openvibe.rent/","name":"OpenVibe.Rent","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.rent/#page","url":"https://openvibe.rent/","name":"OpenVibe.Rent — Every rental, one search.","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","isPartOf":{"@id":"https://openvibe.rent/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Rent","item":"https://openvibe.rent/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.rent/release.json b/dist/openvibe.rent/release.json
iindex 9d8ef7d..ca976a1 100644
---- a/dist/openvibe.rent/release.json
++++ b/dist/openvibe.rent/release.json
@@@ -1,11 +1,11 @@
{
"service": "rent",
-- "release": "98a920e4ebb8",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "d3d9c004a122",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.rent/sitemap.xml b/dist/openvibe.rent/sitemap.xml
iindex dba1984..aa49b13 100644
---- a/dist/openvibe.rent/sitemap.xml
++++ b/dist/openvibe.rent/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.rent/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.rent/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.rent/status.json b/dist/openvibe.rent/status.json
iindex 1a62c13..ff90850 100644
---- a/dist/openvibe.rent/status.json
++++ b/dist/openvibe.rent/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "verified listing sources and the shared discovery system",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.reviews/index.html b/dist/openvibe.reviews/index.html
iindex 9d1e84c..78ed13a 100644
---- a/dist/openvibe.reviews/index.html
++++ b/dist/openvibe.reviews/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Reviews — What people actually say.">
<meta name="twitter:description" content="OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.reviews/#site","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.reviews/#page","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews — What people actually say.","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","isPartOf":{"@id":"https://openvibe.reviews/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Reviews","item":"https://openvibe.reviews/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.reviews/#site","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.reviews/#page","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews — What people actually say.","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","isPartOf":{"@id":"https://openvibe.reviews/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Reviews","item":"https://openvibe.reviews/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.reviews/release.json b/dist/openvibe.reviews/release.json
iindex 3736831..5c613ed 100644
---- a/dist/openvibe.reviews/release.json
++++ b/dist/openvibe.reviews/release.json
@@@ -1,11 +1,11 @@
{
"service": "reviews",
-- "release": "7aabc2d9e18e",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "59eb15ee1486",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.reviews/sitemap.xml b/dist/openvibe.reviews/sitemap.xml
iindex 2eaa5ec..10d2f8a 100644
---- a/dist/openvibe.reviews/sitemap.xml
++++ b/dist/openvibe.reviews/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.reviews/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.reviews/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.reviews/status.json b/dist/openvibe.reviews/status.json
iindex a0fa9d9..ea5b592 100644
---- a/dist/openvibe.reviews/status.json
++++ b/dist/openvibe.reviews/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a person to verify a review source's terms and an editor to publish the first reviewed summary",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.run/index.html b/dist/openvibe.run/index.html
iindex 0bd2d5b..018ee62 100644
---- a/dist/openvibe.run/index.html
++++ b/dist/openvibe.run/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Run — Run anything, safely.">
<meta name="twitter:description" content="OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.run/#site","url":"https://openvibe.run/","name":"OpenVibe.Run","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.run/#page","url":"https://openvibe.run/","name":"OpenVibe.Run — Run anything, safely.","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","isPartOf":{"@id":"https://openvibe.run/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Run","item":"https://openvibe.run/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.run/#site","url":"https://openvibe.run/","name":"OpenVibe.Run","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.run/#page","url":"https://openvibe.run/","name":"OpenVibe.Run — Run anything, safely.","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","isPartOf":{"@id":"https://openvibe.run/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Run","item":"https://openvibe.run/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.run/release.json b/dist/openvibe.run/release.json
iindex 1c478ef..f380b0c 100644
---- a/dist/openvibe.run/release.json
++++ b/dist/openvibe.run/release.json
@@@ -1,11 +1,11 @@
{
"service": "run",
-- "release": "5f1846f79623",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "991a20968c60",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.run/sitemap.xml b/dist/openvibe.run/sitemap.xml
iindex 8485b5b..df67026 100644
---- a/dist/openvibe.run/sitemap.xml
++++ b/dist/openvibe.run/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.run/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.run/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.run/status.json b/dist/openvibe.run/status.json
iindex 1b1dbba..922db65 100644
---- a/dist/openvibe.run/status.json
++++ b/dist/openvibe.run/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the sandbox runtime",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.services/index.html b/dist/openvibe.services/index.html
iindex 0565171..18b4504 100644
---- a/dist/openvibe.services/index.html
++++ b/dist/openvibe.services/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Services — Build with the whole network.">
<meta name="twitter:description" content="OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.services/#site","url":"https://openvibe.services/","name":"OpenVibe.Services","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.services/#page","url":"https://openvibe.services/","name":"OpenVibe.Services — Build with the whole network.","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","isPartOf":{"@id":"https://openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Services","item":"https://openvibe.services/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.services/#site","url":"https://openvibe.services/","name":"OpenVibe.Services","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.services/#page","url":"https://openvibe.services/","name":"OpenVibe.Services — Build with the whole network.","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","isPartOf":{"@id":"https://openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Services","item":"https://openvibe.services/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.services/release.json b/dist/openvibe.services/release.json
iindex 3afbea4..d758059 100644
---- a/dist/openvibe.services/release.json
++++ b/dist/openvibe.services/release.json
@@@ -1,11 +1,11 @@
{
"service": "services",
-- "release": "8d2fa89ea9e3",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "d59da901e247",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.services/sitemap.xml b/dist/openvibe.services/sitemap.xml
iindex 43150af..97127b7 100644
---- a/dist/openvibe.services/sitemap.xml
++++ b/dist/openvibe.services/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.services/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.services/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.services/status.json b/dist/openvibe.services/status.json
iindex 8f446f6..9ca82e6 100644
---- a/dist/openvibe.services/status.json
++++ b/dist/openvibe.services/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the catalog and console over the services that already run (AI, Events, Media, Search, Sources, Host, Tools)",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.space/index.html b/dist/openvibe.space/index.html
iindex 282f664..c308ae2 100644
---- a/dist/openvibe.space/index.html
++++ b/dist/openvibe.space/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Space — Start a forum for anything.">
<meta name="twitter:description" content="OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.space/#site","url":"https://openvibe.space/","name":"OpenVibe.Space","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.space/#page","url":"https://openvibe.space/","name":"OpenVibe.Space — Start a forum for anything.","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","isPartOf":{"@id":"https://openvibe.space/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Space","item":"https://openvibe.space/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.space/#site","url":"https://openvibe.space/","name":"OpenVibe.Space","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.space/#page","url":"https://openvibe.space/","name":"OpenVibe.Space — Start a forum for anything.","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","isPartOf":{"@id":"https://openvibe.space/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Space","item":"https://openvibe.space/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.space/release.json b/dist/openvibe.space/release.json
iindex 1489bb5..9ea23fb 100644
---- a/dist/openvibe.space/release.json
++++ b/dist/openvibe.space/release.json
@@@ -1,11 +1,11 @@
{
"service": "space",
-- "release": "bce11705589a",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "7b78873f7f1a",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.space/sitemap.xml b/dist/openvibe.space/sitemap.xml
iindex dc8391c..f101e8d 100644
---- a/dist/openvibe.space/sitemap.xml
++++ b/dist/openvibe.space/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.space/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.space/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.space/status.json b/dist/openvibe.space/status.json
iindex 330455e..7e70ff8 100644
---- a/dist/openvibe.space/status.json
++++ b/dist/openvibe.space/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the forum engine moving over from OpenVibe.Community",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.tips/index.html b/dist/openvibe.tips/index.html
iindex a7dcfab..4081ecb 100644
---- a/dist/openvibe.tips/index.html
++++ b/dist/openvibe.tips/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Tips — Support the people you watch.">
<meta name="twitter:description" content="OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.tips/#site","url":"https://openvibe.tips/","name":"OpenVibe.Tips","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.tips/#page","url":"https://openvibe.tips/","name":"OpenVibe.Tips — Support the people you watch.","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","isPartOf":{"@id":"https://openvibe.tips/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Tips","item":"https://openvibe.tips/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.tips/#site","url":"https://openvibe.tips/","name":"OpenVibe.Tips","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.tips/#page","url":"https://openvibe.tips/","name":"OpenVibe.Tips — Support the people you watch.","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","isPartOf":{"@id":"https://openvibe.tips/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Tips","item":"https://openvibe.tips/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.tips/release.json b/dist/openvibe.tips/release.json
iindex 3609d47..ffffc24 100644
---- a/dist/openvibe.tips/release.json
++++ b/dist/openvibe.tips/release.json
@@@ -1,11 +1,11 @@
{
"service": "tips",
-- "release": "ef1de815fca3",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "f8cf93fd2abb",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.tips/sitemap.xml b/dist/openvibe.tips/sitemap.xml
iindex 92c4b46..ef9f282 100644
---- a/dist/openvibe.tips/sitemap.xml
++++ b/dist/openvibe.tips/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.tips/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.tips/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.tips/status.json b/dist/openvibe.tips/status.json
iindex 684d8a2..fff3fcf 100644
---- a/dist/openvibe.tips/status.json
++++ b/dist/openvibe.tips/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the payments cutover to OpenVibe.Billing and a security review; tips keep working on OpenVibe.Live meanwhile",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.trade/index.html b/dist/openvibe.trade/index.html
iindex 6c32571..e2ddf82 100644
---- a/dist/openvibe.trade/index.html
++++ b/dist/openvibe.trade/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Trade — Watch, discuss, decide.">
<meta name="twitter:description" content="OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.trade/#site","url":"https://openvibe.trade/","name":"OpenVibe.Trade","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.trade/#page","url":"https://openvibe.trade/","name":"OpenVibe.Trade — Watch, discuss, decide.","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","isPartOf":{"@id":"https://openvibe.trade/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Trade","item":"https://openvibe.trade/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.trade/#site","url":"https://openvibe.trade/","name":"OpenVibe.Trade","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.trade/#page","url":"https://openvibe.trade/","name":"OpenVibe.Trade — Watch, discuss, decide.","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","isPartOf":{"@id":"https://openvibe.trade/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Trade","item":"https://openvibe.trade/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.trade/release.json b/dist/openvibe.trade/release.json
iindex 91b7720..efd61f7 100644
---- a/dist/openvibe.trade/release.json
++++ b/dist/openvibe.trade/release.json
@@@ -1,11 +1,11 @@
{
"service": "trade",
-- "release": "7df1bf9642b6",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "79714d6af69e",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.trade/sitemap.xml b/dist/openvibe.trade/sitemap.xml
iindex c18629e..8342e48 100644
---- a/dist/openvibe.trade/sitemap.xml
++++ b/dist/openvibe.trade/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.trade/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.trade/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.trade/status.json b/dist/openvibe.trade/status.json
iindex 976efd2..ef3886b 100644
---- a/dist/openvibe.trade/status.json
++++ b/dist/openvibe.trade/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "a verified data source and editors adding the first instruments",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.video/index.html b/dist/openvibe.video/index.html
iindex 237e370..ea6665e 100644
---- a/dist/openvibe.video/index.html
++++ b/dist/openvibe.video/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Video — Your videos, everywhere.">
<meta name="twitter:description" content="OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.video/#site","url":"https://openvibe.video/","name":"OpenVibe.Video","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.video/#page","url":"https://openvibe.video/","name":"OpenVibe.Video — Your videos, everywhere.","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","isPartOf":{"@id":"https://openvibe.video/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Video","item":"https://openvibe.video/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.video/#site","url":"https://openvibe.video/","name":"OpenVibe.Video","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.video/#page","url":"https://openvibe.video/","name":"OpenVibe.Video — Your videos, everywhere.","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","isPartOf":{"@id":"https://openvibe.video/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Video","item":"https://openvibe.video/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.video/release.json b/dist/openvibe.video/release.json
iindex ddfac80..b1aab4b 100644
---- a/dist/openvibe.video/release.json
++++ b/dist/openvibe.video/release.json
@@@ -1,11 +1,11 @@
{
"service": "video",
-- "release": "9ee86614f867",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "1bea444871e9",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.video/sitemap.xml b/dist/openvibe.video/sitemap.xml
iindex 95cf994..5023331 100644
---- a/dist/openvibe.video/sitemap.xml
++++ b/dist/openvibe.video/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.video/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.video/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.video/status.json b/dist/openvibe.video/status.json
iindex 45e929f..c39a1fa 100644
---- a/dist/openvibe.video/status.json
++++ b/dist/openvibe.video/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the video service on OpenVibe.Media",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.vip/index.html b/dist/openvibe.vip/index.html
iindex 1fb1639..1018ddd 100644
---- a/dist/openvibe.vip/index.html
++++ b/dist/openvibe.vip/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.VIP — Memberships, network-wide.">
<meta name="twitter:description" content="OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.vip/#site","url":"https://openvibe.vip/","name":"OpenVibe.VIP","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.vip/#page","url":"https://openvibe.vip/","name":"OpenVibe.VIP — Memberships, network-wide.","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","isPartOf":{"@id":"https://openvibe.vip/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.VIP","item":"https://openvibe.vip/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.vip/#site","url":"https://openvibe.vip/","name":"OpenVibe.VIP","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.vip/#page","url":"https://openvibe.vip/","name":"OpenVibe.VIP — Memberships, network-wide.","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","isPartOf":{"@id":"https://openvibe.vip/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.VIP","item":"https://openvibe.vip/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.vip/release.json b/dist/openvibe.vip/release.json
iindex e0c09fb..f3db4d3 100644
---- a/dist/openvibe.vip/release.json
++++ b/dist/openvibe.vip/release.json
@@@ -1,11 +1,11 @@
{
"service": "vip",
-- "release": "a39b685cc155",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "12d281ba19f1",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.vip/sitemap.xml b/dist/openvibe.vip/sitemap.xml
iindex 1440620..ce669fa 100644
---- a/dist/openvibe.vip/sitemap.xml
++++ b/dist/openvibe.vip/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.vip/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.vip/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.vip/status.json b/dist/openvibe.vip/status.json
iindex 7b06ec6..5d21962 100644
---- a/dist/openvibe.vip/status.json
++++ b/dist/openvibe.vip/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": "the payments cutover to OpenVibe.Billing; checkout stays closed until then",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.watch/index.html b/dist/openvibe.watch/index.html
iindex decf9b9..c695b66 100644
---- a/dist/openvibe.watch/index.html
++++ b/dist/openvibe.watch/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Watch — Watch anything. Hear about what matters.">
<meta name="twitter:description" content="OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.watch/#site","url":"https://openvibe.watch/","name":"OpenVibe.Watch","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.watch/#page","url":"https://openvibe.watch/","name":"OpenVibe.Watch — Watch anything. Hear about what matters.","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","isPartOf":{"@id":"https://openvibe.watch/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Watch","item":"https://openvibe.watch/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.watch/#site","url":"https://openvibe.watch/","name":"OpenVibe.Watch","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.watch/#page","url":"https://openvibe.watch/","name":"OpenVibe.Watch — Watch anything. Hear about what matters.","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","isPartOf":{"@id":"https://openvibe.watch/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Watch","item":"https://openvibe.watch/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.watch/release.json b/dist/openvibe.watch/release.json
iindex 9d8729d..fc893f1 100644
---- a/dist/openvibe.watch/release.json
++++ b/dist/openvibe.watch/release.json
@@@ -1,11 +1,11 @@
{
"service": "watch",
-- "release": "520b6134c006",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "f1bb66bd706f",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.watch/sitemap.xml b/dist/openvibe.watch/sitemap.xml
iindex 962f6d0..27c1de7 100644
---- a/dist/openvibe.watch/sitemap.xml
++++ b/dist/openvibe.watch/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.watch/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.watch/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.watch/status.json b/dist/openvibe.watch/status.json
iindex 6d37379..ed9749a 100644
---- a/dist/openvibe.watch/status.json
++++ b/dist/openvibe.watch/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "the watch service on the shared queue and workers",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/openvibe.website/index.html b/dist/openvibe.website/index.html
iindex b903db8..7352a49 100644
---- a/dist/openvibe.website/index.html
++++ b/dist/openvibe.website/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="OpenVibe.Website — Websites that work, not just pages.">
<meta name="twitter:description" content="OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.website/#site","url":"https://openvibe.website/","name":"OpenVibe.Website","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.website/#page","url":"https://openvibe.website/","name":"OpenVibe.Website — Websites that work, not just pages.","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","isPartOf":{"@id":"https://openvibe.website/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Website","item":"https://openvibe.website/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.website/#site","url":"https://openvibe.website/","name":"OpenVibe.Website","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.website/#page","url":"https://openvibe.website/","name":"OpenVibe.Website — Websites that work, not just pages.","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","isPartOf":{"@id":"https://openvibe.website/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Website","item":"https://openvibe.website/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -329,7 +329,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.website/release.json b/dist/openvibe.website/release.json
iindex a2e5263..a36af79 100644
---- a/dist/openvibe.website/release.json
++++ b/dist/openvibe.website/release.json
@@@ -1,11 +1,11 @@
{
"service": "website",
-- "release": "c470104088ba",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "5acbba827178",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.website/sitemap.xml b/dist/openvibe.website/sitemap.xml
iindex 197b35a..b715b30 100644
---- a/dist/openvibe.website/sitemap.xml
++++ b/dist/openvibe.website/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://openvibe.website/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://openvibe.website/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/openvibe.website/status.json b/dist/openvibe.website/status.json
iindex 90b09f0..98cd59c 100644
---- a/dist/openvibe.website/status.json
++++ b/dist/openvibe.website/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": "tenant hosting on OpenVibe.Host (built, not launched) and the editor",
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/realtime.openvibe.network/index.html b/dist/realtime.openvibe.network/index.html
iindex a318c01..2aa9576 100644
---- a/dist/realtime.openvibe.network/index.html
++++ b/dist/realtime.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.">
<meta name="twitter:description" content="OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://realtime.openvibe.network/#site","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://realtime.openvibe.network/#page","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","isPartOf":{"@id":"https://realtime.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"realtime.openvibe.network","item":"https://realtime.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://realtime.openvibe.network/#site","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://realtime.openvibe.network/#page","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","isPartOf":{"@id":"https://realtime.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"realtime.openvibe.network","item":"https://realtime.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -318,7 +318,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/realtime.openvibe.network/release.json b/dist/realtime.openvibe.network/release.json
iindex dfa02d6..0c28112 100644
---- a/dist/realtime.openvibe.network/release.json
++++ b/dist/realtime.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "realtime",
-- "release": "0221dfe18e0e",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "ea26ec2c6ad5",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/realtime.openvibe.network/status.json b/dist/realtime.openvibe.network/status.json
iindex 0694149..a71a5f7 100644
---- a/dist/realtime.openvibe.network/status.json
++++ b/dist/realtime.openvibe.network/status.json
@@@ -11,6 +11,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/status.openvibe.network/index.html b/dist/status.openvibe.network/index.html
iindex cfaa680..9fdcc5b 100644
---- a/dist/status.openvibe.network/index.html
++++ b/dist/status.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="status.openvibe.network — Is OpenVibe up?">
<meta name="twitter:description" content="OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://status.openvibe.network/#site","url":"https://status.openvibe.network/","name":"status.openvibe.network","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://status.openvibe.network/#page","url":"https://status.openvibe.network/","name":"status.openvibe.network — Is OpenVibe up?","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","isPartOf":{"@id":"https://status.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"status.openvibe.network","item":"https://status.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://status.openvibe.network/#site","url":"https://status.openvibe.network/","name":"status.openvibe.network","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://status.openvibe.network/#page","url":"https://status.openvibe.network/","name":"status.openvibe.network — Is OpenVibe up?","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","isPartOf":{"@id":"https://status.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"status.openvibe.network","item":"https://status.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -359,7 +359,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/status.openvibe.network/release.json b/dist/status.openvibe.network/release.json
iindex a518ab7..1f70a0e 100644
---- a/dist/status.openvibe.network/release.json
++++ b/dist/status.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "status",
-- "release": "9b981c0c3e79",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "edbde187216d",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/status.openvibe.network/status.json b/dist/status.openvibe.network/status.json
iindex 6a126d8..4320702 100644
---- a/dist/status.openvibe.network/status.json
++++ b/dist/status.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}
ddiff --git a/dist/themes.openvibe.network/index.html b/dist/themes.openvibe.network/index.html
iindex cc8e076..1102f62 100644
---- a/dist/themes.openvibe.network/index.html
++++ b/dist/themes.openvibe.network/index.html
@@@ -24,7 +24,7 @@
<meta name="twitter:title" content="themes.openvibe.network — Your look, on every site.">
<meta name="twitter:description" content="themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.">
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
--<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://themes.openvibe.network/#site","url":"https://themes.openvibe.network/","name":"themes.openvibe.network","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://themes.openvibe.network/#page","url":"https://themes.openvibe.network/","name":"themes.openvibe.network — Your look, on every site.","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","isPartOf":{"@id":"https://themes.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"themes.openvibe.network","item":"https://themes.openvibe.network/"}]}}]}</script>
++<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://themes.openvibe.network/#site","url":"https://themes.openvibe.network/","name":"themes.openvibe.network","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://themes.openvibe.network/#page","url":"https://themes.openvibe.network/","name":"themes.openvibe.network — Your look, on every site.","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","isPartOf":{"@id":"https://themes.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-10-01","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"themes.openvibe.network","item":"https://themes.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
@@@ -328,7 +328,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
++<script src="/shared/navbar.js?v=017a740747b4"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/themes.openvibe.network/release.json b/dist/themes.openvibe.network/release.json
iindex 1480a68..c460334 100644
---- a/dist/themes.openvibe.network/release.json
++++ b/dist/themes.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "themes",
-- "release": "b6662abd3bc6",
-- "released_at": "2026-09-29T00:00:00.000Z",
++ "release": "9556c3c9f3e6",
++ "released_at": "2026-10-01T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.29.2"
++ "openvibe-shared": "2.3.1"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/themes.openvibe.network/sitemap.xml b/dist/themes.openvibe.network/sitemap.xml
iindex b78d297..23b1e6d 100644
---- a/dist/themes.openvibe.network/sitemap.xml
++++ b/dist/themes.openvibe.network/sitemap.xml
@@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-- <url><loc>https://themes.openvibe.network/</loc><lastmod>2026-09-29</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
++ <url><loc>https://themes.openvibe.network/</loc><lastmod>2026-10-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url>
</urlset>
ddiff --git a/dist/themes.openvibe.network/status.json b/dist/themes.openvibe.network/status.json
iindex 8881797..854bf4e 100644
---- a/dist/themes.openvibe.network/status.json
++++ b/dist/themes.openvibe.network/status.json
@@@ -18,6 +18,6 @@
"launchWaitsFor": null,
"factsAsOf": "2026-09-29",
"network": "https://openvibe.network",
-- "updated": "2026-09-29",
++ "updated": "2026-10-01",
"note": "Static page served by OpenVibers/OpenVibe.Sites; service facts come from each repository's STATUS.json and the Network registry (facts.json). Removed from sites.json in the same release that the real service takes over this domain."
}