feat(web): rebrand marketing site to Voculinux
Names, wordmarks, package and install references move to voculinux; site domain to voculinux.com with renamed public assets. Layout keeps Carbon spacing/type/motion discipline remapped to the house palette (teal interactive, warm paper, system stacks, red reserved). Header and footer gain Bongbetic attribution chrome linking hosted brand assets; no brand binaries vendored. Engine copy states whisper.cpp as guaranteed default, others as best-effort extras, remote API as user-configured with audio leaving the machine. Nix page carries a fork-status note (upstream flake installs Vocalinux). Refs #24
This commit is contained in:
@@ -10,7 +10,7 @@ import { chromium } from "playwright-core";
|
||||
|
||||
const root = join(dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const pub = join(root, "public");
|
||||
const mark = join(pub, "brand/vocalinux-mark-circle.svg");
|
||||
const mark = join(pub, "brand/voculinux-mark-circle.svg");
|
||||
const chrome =
|
||||
process.env.CHROME_PATH ||
|
||||
["/usr/bin/chromium-browser", "/usr/bin/chromium"].find(Boolean);
|
||||
@@ -33,15 +33,15 @@ const skipIcons = process.env.OG_ONLY === "1";
|
||||
const sizes = [
|
||||
[16, join(pub, "favicon-16x16.png")],
|
||||
[32, join(pub, "favicon-32x32.png")],
|
||||
[32, join(pub, "vocalinux-32x32.png")],
|
||||
[64, join(pub, "vocalinux-64x64.png")],
|
||||
[32, join(pub, "voculinux-32x32.png")],
|
||||
[64, join(pub, "voculinux-64x64.png")],
|
||||
[96, join(pub, "favicon-96x96.png")],
|
||||
[96, join(pub, "vocalinux-96x96.png")],
|
||||
[192, join(pub, "vocalinux-192x192.png")],
|
||||
[96, join(pub, "voculinux-96x96.png")],
|
||||
[192, join(pub, "voculinux-192x192.png")],
|
||||
[192, join(pub, "icon-192x192.png")],
|
||||
[512, join(pub, "vocalinux-512x512.png")],
|
||||
[512, join(pub, "voculinux-512x512.png")],
|
||||
[512, join(pub, "icon-512x512.png")],
|
||||
[512, join(pub, "vocalinux.png")],
|
||||
[512, join(pub, "voculinux.png")],
|
||||
];
|
||||
|
||||
if (!skipIcons) {
|
||||
@@ -50,8 +50,8 @@ if (!skipIcons) {
|
||||
if (dest.endsWith(".png") && !dest.includes("favicon-")) {
|
||||
const webp = dest.replace(/\.png$/i, ".webp");
|
||||
if (
|
||||
dest.includes("vocalinux-") ||
|
||||
dest.endsWith("/vocalinux.png")
|
||||
dest.includes("voculinux-") ||
|
||||
dest.endsWith("/voculinux.png")
|
||||
) {
|
||||
toWebp(dest, webp);
|
||||
}
|
||||
@@ -119,7 +119,7 @@ const ogHtml = `<!doctype html>
|
||||
<div class="copy">
|
||||
<div class="brand">
|
||||
<img src="${markData}" alt="" />
|
||||
Vocalinux
|
||||
Voculinux
|
||||
</div>
|
||||
<h1>Dictate locally.<br><em>In any app.</em></h1>
|
||||
<p class="lede">Hold Right Alt. Text lands in the focused window. Local engines by default.</p>
|
||||
@@ -128,11 +128,11 @@ const ogHtml = `<!doctype html>
|
||||
<span>No telemetry</span>
|
||||
<span>AGPL-3.0</span>
|
||||
</div>
|
||||
<p class="url">vocalinux.com</p>
|
||||
<p class="url">voculinux.com</p>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="workbench">
|
||||
<div class="panel"><span>Vocalinux</span><span><i class="rec"></i>listening</span></div>
|
||||
<div class="panel"><span>Voculinux</span><span><i class="rec"></i>listening</span></div>
|
||||
<div class="window">
|
||||
<div class="titlebar"><span>notes.txt</span><span class="dots" aria-hidden="true"><i></i><i></i><i class="close"></i></span></div>
|
||||
<div class="body">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Viewport QA for the Vocalinux marketing home page.
|
||||
* Viewport QA for the Voculinux marketing home page.
|
||||
* Uses system Google Chrome via playwright-core (no browser download).
|
||||
*
|
||||
* Usage:
|
||||
@@ -74,7 +74,7 @@ try {
|
||||
scrollWidth: de.scrollWidth,
|
||||
clientWidth: de.clientWidth,
|
||||
overflowX,
|
||||
hasVocalinux: bodyText.includes("Vocalinux"),
|
||||
hasVoculinux: bodyText.includes("Voculinux"),
|
||||
hasInstallCta: !!document.querySelector('a[href="#install"]'),
|
||||
hasGradientText: !!document.querySelector('[class*="bg-clip-text"]'),
|
||||
h1: hero ? hero.innerText.trim() : null,
|
||||
@@ -128,7 +128,7 @@ try {
|
||||
|
||||
const ok =
|
||||
!metrics.overflowX &&
|
||||
metrics.hasVocalinux &&
|
||||
metrics.hasVoculinux &&
|
||||
metrics.hasInstallCta &&
|
||||
!metrics.hasGradientText &&
|
||||
metrics.heroInBounds &&
|
||||
|
||||
Reference in New Issue
Block a user