From c9be45d3c370a57e07dcf68e8527a670d4af054e Mon Sep 17 00:00:00 2001
From: Xavier Karma
Date: Fri, 6 Nov 2026 18:22:17 +0530
Subject: [PATCH] fix(web): link the fork's own source host and drop the
upstream star count
The header badge fetched the star count of VocaHQ/vocalinux at build time
and labelled it as Voculinux's. The fetch and the count are gone; the
header, footer and social "source" links now go to the fork repository at
git.bongbetic.com/xavierk/voculinux, as do the issue links, the docs
anchors, the home page JSON-LD and the xbps release card.
Upstream GitHub stays only where it is the real artefact or provenance and
is labelled as such: the install script, the AppImage release card, the
upstream card and the changelog release links. The changelog now says its
entries are upstream history, the open-source page no longer claims
VocaHQ membership or an active GitHub community, and the organization
JSON-LD drops the upstream author as founder. DESIGN.md and PRODUCT.md
follow.
---
web/DESIGN.md | 2 +-
web/PRODUCT.md | 2 +-
web/next.config.js | 29 +-------------------
web/src/app/changelog/page.tsx | 15 ++++++++---
web/src/app/faq/page.tsx | 6 ++---
web/src/app/install/page.tsx | 16 ++++++-----
web/src/app/layout.tsx | 11 +++-----
web/src/app/offline/page.tsx | 8 +++---
web/src/app/open-source/page.tsx | 16 +++++------
web/src/app/page.tsx | 40 +++++++++++++++-------------
web/src/app/privacy/page.tsx | 10 +++----
web/src/app/troubleshooting/page.tsx | 10 +++----
web/src/components/site-chrome.tsx | 24 +++++------------
web/src/lib/seo.ts | 8 +++++-
web/src/lib/site-nav.ts | 10 ++++---
web/src/styles/globals.css | 4 +--
16 files changed, 97 insertions(+), 114 deletions(-)
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() {
diff --git a/web/src/app/open-source/page.tsx b/web/src/app/open-source/page.tsx
index 60148c5..40fa856 100644
--- a/web/src/app/open-source/page.tsx
+++ b/web/src/app/open-source/page.tsx
@@ -14,7 +14,7 @@ import {
Zap,
} 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 = [
{
@@ -58,7 +58,7 @@ const vsProprietary = [
{ feature: "Linux Support", voculinux: "Native", proprietary: "Limited or none" },
{ feature: "Customization", voculinux: "Unlimited", proprietary: "Limited to vendor options" },
{ feature: "Vendor Dependency", voculinux: "None", proprietary: "High" },
- { feature: "Community Support", voculinux: "Active GitHub community", proprietary: "Paid support only" },
+ { feature: "Community Support", voculinux: "Public issue tracker", proprietary: "Paid support only" },
];
const techStack = [
@@ -87,7 +87,7 @@ const techStack = [
export const metadata: Metadata = buildPageMetadata({
title: "Open Source Dictation Software for Linux (AGPL-3.0)",
description:
- "Free, open source dictation software for Linux under AGPL-3.0. Offline speech recognition with whisper.cpp or VOSK, no required account, all code on GitHub.",
+ "Free, open source dictation software for Linux under AGPL-3.0. Offline speech recognition with whisper.cpp or VOSK, no required account, all code in the public repository.",
path: "/open-source",
keywords: [
"open source voice dictation",
@@ -141,14 +141,14 @@ export default function OpenSourcePage() {
Free & Open Source Voice Dictation
- Voculinux is 100% open source under the AGPL-3.0 license, and part of{" "}
+ Voculinux is 100% open source under the AGPL-3.0 license, a hard fork of{" "}
- VocaHQ
+ Vocalinux (upstream, by VocaHQ)
. No subscriptions, no vendor lock-in, no hidden costs. Local engines keep
audio on the machine. Remote API is optional.
@@ -289,13 +289,13 @@ export default function OpenSourcePage() {
translations - join the community.
- Fully open source under AGPL-3.0. Inspect the code yourself on GitHub. The installed
- app does not send usage telemetry.
+ Fully open source under AGPL-3.0. Inspect the code yourself in the Voculinux source
+ repository. The installed app does not send usage telemetry.
@@ -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.