diff --git a/web/DESIGN.md b/web/DESIGN.md index d23a69f..920d3d2 100644 --- a/web/DESIGN.md +++ b/web/DESIGN.md @@ -136,7 +136,7 @@ Flat fills, 1px borders, paper-window shadows. Small rotations only on decorativ - Long URLs wrap (`break-all` / `overflow-wrap`) so mobile never overflows ### Navigation -- Sticky paper bar, mark + name, 3–5 text links, GitHub stars on desktop +- Sticky paper bar, mark + name, 3–5 text links, a "Source" link to the fork repository on desktop (no star count) - Mobile menu keeps Install Voculinux as the conversion action - Real mobile disclosure with `aria-expanded` - Resource-rich footer, not a second mega-menu in the header diff --git a/web/PRODUCT.md b/web/PRODUCT.md index 241e0b8..99a6d13 100644 --- a/web/PRODUCT.md +++ b/web/PRODUCT.md @@ -22,7 +22,7 @@ Offline-first Linux voice typing with real desktop integration (system tray, X11 - System tray indicator and settings GUI (GTK) with searchable sidebar navigation and an always-visible sidebar footer for dictation status / Test Dictation / Close - Dictation into terminals, browsers, IDEs, office apps - Engines and models chosen for hardware (CPU, optional Vulkan GPU with discrete-device preference) -- Guides and comparison pages on voculinux.com; source on GitHub +- Guides and comparison pages on voculinux.com; source on the fork's own Gitea host (`https://git.bongbetic.com/xavierk/voculinux`); upstream GitHub is linked only as labelled provenance ## Capabilities and constraints diff --git a/web/next.config.js b/web/next.config.js index 063779c..a1b0e16 100644 --- a/web/next.config.js +++ b/web/next.config.js @@ -1,5 +1,3 @@ -import { PHASE_PRODUCTION_BUILD } from 'next/constants.js'; - // @ts-ignore /** @type {import("next").NextConfig} */ const config = { @@ -73,29 +71,4 @@ const config = { }, }; -// The header star count is fetched once per production build and inlined, so -// visitors never call api.github.com (Lighthouse flagged it as third-party -// code on every page). Any failure falls back to the plain "GitHub" label. -async function fetchGitHubStars() { - try { - const res = await fetch('https://api.github.com/repos/VocaHQ/vocalinux', { - headers: process.env.GITHUB_TOKEN - ? { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` } - : {}, - signal: AbortSignal.timeout(5000), - }); - if (!res.ok) return ''; - const data = await res.json(); - return data.stargazers_count ? String(data.stargazers_count) : ''; - } catch { - return ''; - } -} - -export default async function nextConfig(phase) { - if (phase !== PHASE_PRODUCTION_BUILD) return config; - return { - ...config, - env: { NEXT_PUBLIC_GITHUB_STARS: await fetchGitHubStars() }, - }; -} +export default config; diff --git a/web/src/app/changelog/page.tsx b/web/src/app/changelog/page.tsx index 12cbe62..5d04d38 100644 --- a/web/src/app/changelog/page.tsx +++ b/web/src/app/changelog/page.tsx @@ -11,7 +11,11 @@ import { Zap, } from "lucide-react"; import { SeoSubpageShell } from "@/components/seo-subpage-shell"; -import { absoluteUrl, buildPageMetadata } from "@/lib/seo"; +import { + absoluteUrl, + buildPageMetadata, + UPSTREAM_REPO_URL, +} from "@/lib/seo"; const releases = [ { @@ -574,6 +578,11 @@ export default function ChangelogPage() { Track every release and see how Voculinux has evolved. From initial alpha to stable releases, follow the journey of Linux voice dictation.

+

+ Fork status: the releases below are the upstream Vocalinux history + this fork is ported from. Voculinux fork releases are not published + yet, so each release link goes to upstream GitHub Releases. +

@@ -644,13 +653,13 @@ export default function ChangelogPage() {
- View release on GitHub + View upstream release on GitHub
diff --git a/web/src/app/faq/page.tsx b/web/src/app/faq/page.tsx index b3100bf..fb0e167 100644 --- a/web/src/app/faq/page.tsx +++ b/web/src/app/faq/page.tsx @@ -12,7 +12,7 @@ import { Zap, } from "lucide-react"; import { SeoSubpageShell } from "@/components/seo-subpage-shell"; -import { buildPageMetadata } from "@/lib/seo"; +import { buildPageMetadata, SOURCE_REPO_URL } from "@/lib/seo"; const faqCategories = [ { @@ -239,12 +239,12 @@ export default function FaqPage() { - Open an issue on GitHub + Open an issue in the Voculinux repository diff --git a/web/src/app/install/page.tsx b/web/src/app/install/page.tsx index 79242a9..623d7bb 100644 --- a/web/src/app/install/page.tsx +++ b/web/src/app/install/page.tsx @@ -3,7 +3,11 @@ import { type Metadata } from "next"; import { ChevronRight, Cpu, Laptop, Terminal } from "lucide-react"; import { SeoSubpageShell } from "@/components/seo-subpage-shell"; import { TerminalBlock } from "@/components/terminal-block"; -import { buildPageMetadata } from "@/lib/seo"; +import { + buildPageMetadata, + SOURCE_REPO_URL, + UPSTREAM_REPO_URL, +} from "@/lib/seo"; const installCommand = "curl -fsSL https://raw.githubusercontent.com/VocaHQ/vocalinux/main/install.sh -o /tmp/vl.sh && bash /tmp/vl.sh --interactive"; @@ -116,7 +120,7 @@ export default function InstallGuidesPage() {

No installer

@@ -128,7 +132,7 @@ export default function InstallGuidesPage() {

New

@@ -174,14 +178,14 @@ export default function InstallGuidesPage() {

From source

Build it yourself

- Clone the repo and run ./install.sh. The upstream - install guide has the full source path. + Clone the repo and run ./install.sh. The install + guide in the Voculinux repository has the full source path.

diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx index 4648b84..cc4a807 100644 --- a/web/src/app/layout.tsx +++ b/web/src/app/layout.tsx @@ -6,7 +6,7 @@ import { absoluteUrl, DEFAULT_OG_IMAGE_ALT, DEFAULT_OG_IMAGE_PATH, - GITHUB_REPO_URL, + SOURCE_REPO_URL, SITE_NAME, SITE_URL, TWITTER_HANDLE, @@ -128,12 +128,7 @@ const organizationJsonLd = { url: absoluteUrl("/"), logo: absoluteUrl("/voculinux.png"), description: "Open-source, offline voice dictation software for Linux.", - sameAs: [GITHUB_REPO_URL, "https://bongbetic.com"], - founder: { - "@type": "Person", - name: "Jatin K Malik", - url: "https://github.com/jatinkrmalik", - }, + sameAs: [SOURCE_REPO_URL, "https://bongbetic.com"], }; const webSiteJsonLd = { @@ -152,7 +147,7 @@ const webSiteJsonLd = { "@type": "SearchAction", target: { "@type": "EntryPoint", - urlTemplate: `${GITHUB_REPO_URL}/issues?q={search_term_string}`, + urlTemplate: `${SOURCE_REPO_URL}/issues?q={search_term_string}`, }, "query-input": { "@type": "PropertyValueSpecification", diff --git a/web/src/app/offline/page.tsx b/web/src/app/offline/page.tsx index 13eaadb..5fb911a 100644 --- a/web/src/app/offline/page.tsx +++ b/web/src/app/offline/page.tsx @@ -11,7 +11,7 @@ import { XCircle, } from "lucide-react"; import { SeoSubpageShell } from "@/components/seo-subpage-shell"; -import { absoluteUrl, buildPageMetadata } from "@/lib/seo"; +import { absoluteUrl, buildPageMetadata, SOURCE_REPO_URL } from "@/lib/seo"; const benefits = [ { @@ -252,14 +252,14 @@ export default function OfflinePage() {
@@ -283,12 +283,12 @@ export default function PrivacyPage() { please reach out:

- Open an issue on GitHub + Open an issue in the Voculinux repository diff --git a/web/src/app/troubleshooting/page.tsx b/web/src/app/troubleshooting/page.tsx index eac924a..4789dac 100644 --- a/web/src/app/troubleshooting/page.tsx +++ b/web/src/app/troubleshooting/page.tsx @@ -10,7 +10,7 @@ import { Wrench, } from "lucide-react"; import { SeoSubpageShell } from "@/components/seo-subpage-shell"; -import { absoluteUrl, buildPageMetadata } from "@/lib/seo"; +import { absoluteUrl, buildPageMetadata, SOURCE_REPO_URL } from "@/lib/seo"; const troubleshootingItems = [ { @@ -221,7 +221,7 @@ export default function TroubleshootingPage() {

Having issues with Voculinux? Find solutions to common problems below. - Can't find your issue? Open a GitHub issue for help. + Can't find your issue? Open an issue in the Voculinux repository for help.

@@ -320,12 +320,12 @@ export default function TroubleshootingPage() { - Search existing issues on GitHub + Search existing issues in the Voculinux repository @@ -334,7 +334,7 @@ export default function TroubleshootingPage() { -