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.