openvibers/openvibe.space Commits
openvibe.website names its other half: your own computer, through Connect (#187)
Changes
@@@ -27,6 +27,7 @@ const FAQ = [['When can I put it on my own address?', 'Publishing at yourname.openvibe.website or on your own domain opens with public hosting, once the automatic abuse checks, a designated DMCA agent and the domain\'s Public Suffix List entry are in place. Until then you build, edit and preview, and OpenVibe staff publish.'],['Do I need an account?', 'Not to start. Pick a template or describe your site and you get a private link to edit it, good for a week. Sign in with OpenVibe on openvibe.space to keep it; openvibe.website itself keeps no cookies, so no site here can touch your sign-in.'],['Can I take my site somewhere else?', 'Yes. A site is plain HTML, CSS and JavaScript; copy its files out of the editor whenever you like.'],++ ['Can I put something running on my own computer here?', 'Yes, with OpenVibe Connect: one port on your computer at its own address, like agents--you.openvibe.website, opened only by the people you pick after they sign in with OpenVibe. One file and Node, no router settings. Start at connect.openvibe.website.'],];/** The room's motif: the prompt types, then the bakery template's page assembles in its browser, block by block. */@@@ -88,6 +89,10 @@ ${sc.steps({ id: 'how', title: 'From idea to address', items: [<div><h2 id="wb-first-h">Sites made here</h2><p>None public yet: publishing opens with public hosting. Build yours now and it is ready on the first day.</p></div><a class="wb-btn" href="#templates">Pick a template</a></div></section>++<section class="sc-sec" id="your-computer" aria-labelledby="wb-connect-h"><div class="wb-first">++<div><h2 id="wb-connect-h">Or put your own computer on the web</h2><p>Running something at home or on your laptop? OpenVibe Connect gives one port its own address, like agents--you.openvibe.website, and only the people you pick can open it, signed in with OpenVibe.</p></div>++<a class="wb-btn" href="https://connect.openvibe.website/">Open Connect</a>++</div></section>${sc.faq({ id: 'questions', items: FAQ })}</div>`;return page({ base, title: `${NAME} · Websites that look finished`, canonicalPath: '/', body, jsonLd: [@@@ -53,7 +53,7 @@ function createWebsite({ sitesDomain, publicDir }) {name: 'OpenVibe.Website',summary: pages.DESCRIPTION,sections: [-- { title: 'Start', links: [{ title: 'Website templates', url: `${base}/#templates`, html: true }, { title: 'Build on OpenVibe.Space', url: 'https://openvibe.space/spaces/new', html: true }] },++ { title: 'Start', links: [{ title: 'Website templates', url: `${base}/#templates`, html: true }, { title: 'Build on OpenVibe.Space', url: 'https://openvibe.space/spaces/new', html: true }, { title: 'Put your own computer on the web (OpenVibe Connect)', url: 'https://connect.openvibe.website/', html: true }] },{ title: 'Templates', links: templates.sites().map((t) => ({ title: t.name, url: `${base}/templates/${t.id}`, html: true, note: t.description })) },],})));@@@ -38,6 +38,7 @@ assert.match(hostingSrc, /target\.kind === 'dashboard' \|\| target\.kind === 'weassert.match(r.text, /<link rel="canonical" href="https:\/\/openvibe\.website\/">/);assert.strictEqual((r.text.match(/<h1[\s>]/g) || []).length, 1, 'one h1');assert.ok(r.text.includes('"@type":"FAQPage"'), 'its questions are structured data');++ assert.ok(r.text.includes('href="https://connect.openvibe.website/"'), 'the other half of openvibe.website: your own computer, through Connect');});await check('no cookie, ever: none set, none read, no sign-in or API on this host', async () => {
@@ -27,6 +27,7 @@ const FAQ = [
@@ -27,6 +27,7 @@ const FAQ = [
['When can I put it on my own address?', 'Publishing at yourname.openvibe.website or on your own domain opens with public hosting, once the automatic abuse checks, a designated DMCA agent and the domain\'s Public Suffix List entry are in place. Until then you build, edit and preview, and OpenVibe staff publish.'],
['When can I put it on my own address?', 'Publishing at yourname.openvibe.website or on your own domain opens with public hosting, once the automatic abuse checks, a designated DMCA agent and the domain\'s Public Suffix List entry are in place. Until then you build, edit and preview, and OpenVibe staff publish.'],
['Do I need an account?', 'Not to start. Pick a template or describe your site and you get a private link to edit it, good for a week. Sign in with OpenVibe on openvibe.space to keep it; openvibe.website itself keeps no cookies, so no site here can touch your sign-in.'],
['Do I need an account?', 'Not to start. Pick a template or describe your site and you get a private link to edit it, good for a week. Sign in with OpenVibe on openvibe.space to keep it; openvibe.website itself keeps no cookies, so no site here can touch your sign-in.'],
['Can I take my site somewhere else?', 'Yes. A site is plain HTML, CSS and JavaScript; copy its files out of the editor whenever you like.'],
['Can I take my site somewhere else?', 'Yes. A site is plain HTML, CSS and JavaScript; copy its files out of the editor whenever you like.'],
+ ['Can I put something running on my own computer here?', 'Yes, with OpenVibe Connect: one port on your computer at its own address, like agents--you.openvibe.website, opened only by the people you pick after they sign in with OpenVibe. One file and Node, no router settings. Start at connect.openvibe.website.'],
];
];
/** The room's motif: the prompt types, then the bakery template's page assembles in its browser, block by block. */
/** The room's motif: the prompt types, then the bakery template's page assembles in its browser, block by block. */
@@ -88,6 +89,10 @@ ${sc.steps({ id: 'how', title: 'From idea to address', items: [
@@ -88,6 +89,10 @@ ${sc.steps({ id: 'how', title: 'From idea to address', items: [
<div><h2 id="wb-first-h">Sites made here</h2><p>None public yet: publishing opens with public hosting. Build yours now and it is ready on the first day.</p></div>
<div><h2 id="wb-first-h">Sites made here</h2><p>None public yet: publishing opens with public hosting. Build yours now and it is ready on the first day.</p></div>
<a class="wb-btn" href="#templates">Pick a template</a>
<a class="wb-btn" href="#templates">Pick a template</a>
</div></section>
</div></section>
+<section class="sc-sec" id="your-computer" aria-labelledby="wb-connect-h"><div class="wb-first">
+<div><h2 id="wb-connect-h">Or put your own computer on the web</h2><p>Running something at home or on your laptop? OpenVibe Connect gives one port its own address, like agents--you.openvibe.website, and only the people you pick can open it, signed in with OpenVibe.</p></div>
+<a class="wb-btn" href="https://connect.openvibe.website/">Open Connect</a>
+</div></section>
${sc.faq({ id: 'questions', items: FAQ })}
${sc.faq({ id: 'questions', items: FAQ })}
</div>`;
</div>`;
return page({ base, title: `${NAME} · Websites that look finished`, canonicalPath: '/', body, jsonLd: [
return page({ base, title: `${NAME} · Websites that look finished`, canonicalPath: '/', body, jsonLd: [
@@ -53,7 +53,7 @@ function createWebsite({ sitesDomain, publicDir }) {
@@ -53,7 +53,7 @@ function createWebsite({ sitesDomain, publicDir }) {
name: 'OpenVibe.Website',
name: 'OpenVibe.Website',
summary: pages.DESCRIPTION,
summary: pages.DESCRIPTION,
sections: [
sections: [
- { title: 'Start', links: [{ title: 'Website templates', url: `${base}/#templates`, html: true }, { title: 'Build on OpenVibe.Space', url: 'https://openvibe.space/spaces/new', html: true }] },
+ { title: 'Start', links: [{ title: 'Website templates', url: `${base}/#templates`, html: true }, { title: 'Build on OpenVibe.Space', url: 'https://openvibe.space/spaces/new', html: true }, { title: 'Put your own computer on the web (OpenVibe Connect)', url: 'https://connect.openvibe.website/', html: true }] },
{ title: 'Templates', links: templates.sites().map((t) => ({ title: t.name, url: `${base}/templates/${t.id}`, html: true, note: t.description })) },
{ title: 'Templates', links: templates.sites().map((t) => ({ title: t.name, url: `${base}/templates/${t.id}`, html: true, note: t.description })) },
],
],
})));
})));
@@ -38,6 +38,7 @@ assert.match(hostingSrc, /target\.kind === 'dashboard' \|\| target\.kind === 'we
@@ -38,6 +38,7 @@ assert.match(hostingSrc, /target\.kind === 'dashboard' \|\| target\.kind === 'we
assert.match(r.text, /<link rel="canonical" href="https:\/\/openvibe\.website\/">/);
assert.match(r.text, /<link rel="canonical" href="https:\/\/openvibe\.website\/">/);
assert.strictEqual((r.text.match(/<h1[\s>]/g) || []).length, 1, 'one h1');
assert.strictEqual((r.text.match(/<h1[\s>]/g) || []).length, 1, 'one h1');
assert.ok(r.text.includes('"@type":"FAQPage"'), 'its questions are structured data');
assert.ok(r.text.includes('"@type":"FAQPage"'), 'its questions are structured data');
+ assert.ok(r.text.includes('href="https://connect.openvibe.website/"'), 'the other half of openvibe.website: your own computer, through Connect');
});
});
await check('no cookie, ever: none set, none read, no sign-in or API on this host', async () => {
await check('no cookie, ever: none set, none read, no sign-in or API on this host', async () => {