From 4edccb6caa344bc4c9965a4d2632f1762ad586eb Mon Sep 17 00:00:00 2001 From: Xavier Karma Date: Fri, 6 Nov 2026 21:25:42 +0530 Subject: [PATCH] fix(web): remove upstream links and unpublished channels from the site Install, home and FAQ describe the signed Void xbps repository only. Pages for Flatpak, NixOS, the distro guides, changelog and local gateway are notices outside navigation and the sitemap. The JSON-LD author is the fork maintainer. The Twitter handle, Discord, X and VocaHQ links are removed, and the one footer credit stays. The web rebrand test allow-lists the exact upstream lines. --- web/PRODUCT.md | 14 +- web/README.md | 2 +- .../.well-known/org.flathub.VerifiedApps.txt | 0 web/public/brand/social/discord.svg | 4 - web/public/brand/social/mail.svg | 4 - web/public/brand/social/x.svg | 4 - web/public/sitemap.xml | 66 -- web/src/app/__tests__/seo-assets.test.ts | 24 +- web/src/app/advanced-settings/page.tsx | 4 +- web/src/app/alternatives/page.tsx | 4 +- web/src/app/autostart/page.tsx | 4 +- web/src/app/changelog/page.tsx | 706 +----------------- web/src/app/compare/page.tsx | 32 +- web/src/app/custom-dictionary/page.tsx | 6 +- web/src/app/desktop-reliability/page.tsx | 23 +- web/src/app/dictation-pad/page.tsx | 20 +- web/src/app/faq/page.tsx | 6 +- web/src/app/faster-whisper/page.tsx | 69 +- web/src/app/flatpak/page.tsx | 490 +----------- web/src/app/for-developers/page.tsx | 4 +- web/src/app/global-shortcuts/page.tsx | 23 +- web/src/app/gnome-kde/page.tsx | 4 +- web/src/app/gpu-acceleration/page.tsx | 4 +- web/src/app/hyprland-sway/page.tsx | 8 +- web/src/app/install/[distro]/page.tsx | 662 +--------------- web/src/app/install/nixos/page.tsx | 424 +---------- web/src/app/install/page.tsx | 271 ++----- web/src/app/languages/page.tsx | 4 +- web/src/app/layout.tsx | 22 +- web/src/app/local-gateway/page.tsx | 472 +----------- web/src/app/multilingual-dictation/page.tsx | 4 +- web/src/app/not-found.tsx | 1 - web/src/app/offline/page.tsx | 4 +- web/src/app/open-source/page.tsx | 12 +- web/src/app/page.tsx | 253 ++----- web/src/app/parakeet/page.tsx | 85 +-- web/src/app/pipewire/page.tsx | 12 +- web/src/app/privacy/page.tsx | 6 +- web/src/app/remote-api/page.tsx | 4 +- web/src/app/rsi-prevention/page.tsx | 4 +- web/src/app/screenshots/page.tsx | 6 +- web/src/app/shortcuts/page.tsx | 4 +- web/src/app/transcribe-audio-files/page.tsx | 4 +- web/src/app/troubleshooting/page.tsx | 8 +- web/src/app/use-cases/page.tsx | 4 +- web/src/app/voice-activity-detection/page.tsx | 16 +- web/src/app/voice-typing-vscode/page.tsx | 4 +- web/src/app/vs-nerd-dictation/page.tsx | 4 +- web/src/app/wayland/page.tsx | 4 +- web/src/app/whisper-model-guide/page.tsx | 4 +- web/src/app/writers/page.tsx | 4 +- .../__tests__/not-found-extras.test.tsx | 6 +- web/src/components/channel-notice.tsx | 53 ++ web/src/components/site-chrome.tsx | 2 +- .../lib/__tests__/voculinux-rebrand.test.ts | 445 +++++++---- web/src/lib/api/util.ts | 594 --------------- web/src/lib/seo.ts | 9 +- web/src/lib/site-nav.ts | 17 +- web/src/lib/void-channel.ts | 22 + web/src/styles/globals.css | 2 +- 60 files changed, 782 insertions(+), 4195 deletions(-) delete mode 100644 web/public/.well-known/org.flathub.VerifiedApps.txt delete mode 100644 web/public/brand/social/discord.svg delete mode 100644 web/public/brand/social/mail.svg delete mode 100644 web/public/brand/social/x.svg create mode 100644 web/src/components/channel-notice.tsx delete mode 100644 web/src/lib/api/util.ts create mode 100644 web/src/lib/void-channel.ts diff --git a/web/PRODUCT.md b/web/PRODUCT.md index 99a6d13..fe1d014 100644 --- a/web/PRODUCT.md +++ b/web/PRODUCT.md @@ -18,11 +18,11 @@ Offline-first Linux voice typing with real desktop integration (system tray, X11 ## Operating context -- Install via a one-line shell installer, AppImage from GitHub Releases, AUR, Snap (`--edge`), or Flatpak release bundle; then run from PATH, app menu, or the AppImage binary +- Install from the signed Void Linux xbps repository (glibc, x86_64), then run `voculinux` from PATH or the application menu; source checkouts use the install script - 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 the fork's own Gitea host (`https://git.bongbetic.com/xavierk/voculinux`); upstream GitHub is linked only as labelled provenance +- Guides and comparison pages on voculinux.com; source, issues and releases on the fork's own host (`https://git.bongbetic.com/xavierk/voculinux`); the upstream project is credited once, in the site footer ## Capabilities and constraints @@ -43,21 +43,21 @@ Offline-first Linux voice typing with real desktop integration (system tray, X11 - Optional JSONL persistence of transcription history to disk (off by default) - Settings Proxy page: outbound SOCKS5 or HTTP CONNECT proxy (optional auth) for model downloads and update checks - Speech Model Advanced pickers stage engine/size/variant/language changes until Download is confirmed -- In-app update checker (stable/nightly) with tray notification when a newer GitHub release is available -- Settings About page groups this app, upstream project links retained as provenance, and talk-to-us links (GitHub, Discord, X, email) +- In-app update checker (stable/nightly) with tray notification when a newer release is available on the fork's release host; packaged installs point to xbps for updates +- Settings About page groups this app, with the website, the source and issues links, and one labelled upstream credit; no Discord, X or email - Optional disable of the missing-tray warning dialog - Settings → Audio tone picker (Lift, Flick, Ember, Step, Voca, Soft, Chirp, Scale, Drop, Glass, Off) with Preview; new installs default to Voca; catalog files are the preview WAVs - Vulkan discrete GPU auto-select with manual device override in Advanced settings - Native GTK installs follow the OS dark/light preference unless `GTK_THEME` is already set - Wayland: IBus when `ibus-wayland` is running, including on compositors previously treated as unbridged -- Packaging: install.sh (distro python3-gi required; no pip sdist of PyGObject), .deb/.rpm (x86_64/aarch64), AppImage (x86_64/aarch64), AUR, Flatpak (local/Flathub status as documented); uv.lock pins Python deps; Justfile replaces Makefile +- Packaging: the signed Void Linux xbps repository (glibc, x86_64) is the only published channel; source checkouts use install.sh (distro python3-gi required; no pip sdist of PyGObject); uv.lock pins Python deps; Justfile replaces Makefile - No usage telemetry in the installed app - AGPL-3.0; marketing version string is tracked in site package/version surfaces - Website is Next.js marketing + SEO guides (static export); languages page documents per-engine support honestly ## Brand commitments -- Name: Voculinux, a hard fork of Vocalinux for Void Linux (glibc, Wayland-primary under niri). Upstream project links are retained as provenance; the fork site carries the new name everywhere a user looks +- Name: Voculinux, a hard fork for Void Linux (glibc, Wayland-primary under niri). The only upstream link is the labelled provenance credit in the site footer; the fork site carries the new name everywhere a user looks - Mark: fork mic for the app icon, tray states, and site favicons (`public/`); Bongbetic appears only as attribution chrome in the site header and footer, linking the hosted brand assets at `https://bongbetic.com/branding/` — no brand binaries are vendored into the repository - Visual system: Carbon-mapped — Carbon spacing, type-role, motion, and contrast discipline remapped to the house palette (warm paper canvas, teal interactive colour, system type stacks only, red reserved for recording/destructive); no Carbon blue, no remote webfonts - Engine promise: whisper.cpp is the guaranteed default engine (packaged, checksum-pinned, budgeted); Faster Whisper, Whisper, VOSK, and Parakeet are best-effort installable extras; the Remote API engine is user-configured and audio leaves the machine — stated plainly wherever remote is described @@ -66,7 +66,7 @@ Offline-first Linux voice typing with real desktop integration (system tray, X11 ## Evidence on hand - Real app screenshots in `public/screenshots/` -- Install/uninstall commands pointing at GitHub raw install scripts +- Install commands for the signed Void xbps repository (the install guide and the home page), with the repository key fingerprint - JSON-LD on the home page (software application, FAQ, how-to) - Do not invent user counts, testimonials, or benchmarks diff --git a/web/README.md b/web/README.md index ab24458..557c2a2 100644 --- a/web/README.md +++ b/web/README.md @@ -73,7 +73,7 @@ web/ - Custom domain: `deploy` script writes `out/CNAME` - Subdirectory deploy: set `basePath` in `next.config.js` if needed -- Family workbench UI: warm paper, system type, same language as VocaHQ ([DESIGN.md](DESIGN.md)) +- Visual system: warm paper, system type, documented in [DESIGN.md](DESIGN.md) ## Troubleshooting diff --git a/web/public/.well-known/org.flathub.VerifiedApps.txt b/web/public/.well-known/org.flathub.VerifiedApps.txt deleted file mode 100644 index e69de29..0000000 diff --git a/web/public/brand/social/discord.svg b/web/public/brand/social/discord.svg deleted file mode 100644 index 43868fa..0000000 --- a/web/public/brand/social/discord.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/web/public/brand/social/mail.svg b/web/public/brand/social/mail.svg deleted file mode 100644 index 0ae8952..0000000 --- a/web/public/brand/social/mail.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/web/public/brand/social/x.svg b/web/public/brand/social/x.svg deleted file mode 100644 index 843ef66..0000000 --- a/web/public/brand/social/x.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/web/public/sitemap.xml b/web/public/sitemap.xml index 1191293..0971c36 100644 --- a/web/public/sitemap.xml +++ b/web/public/sitemap.xml @@ -12,36 +12,12 @@ weekly 0.9 - - https://voculinux.com/install/ubuntu/ - 2026-11-01 - monthly - 0.8 - - - https://voculinux.com/install/fedora/ - 2026-11-01 - monthly - 0.8 - - - https://voculinux.com/install/arch/ - 2026-11-01 - monthly - 0.8 - https://voculinux.com/compare/ 2026-11-01 monthly 0.8 - - https://voculinux.com/changelog/ - 2026-06-11 - weekly - 0.7 - https://voculinux.com/screenshots/ 2026-07-14 @@ -241,46 +217,4 @@ monthly 0.7 - - https://voculinux.com/local-gateway/ - 2026-11-01 - monthly - 0.7 - - - https://voculinux.com/flatpak/ - 2026-11-01 - monthly - 0.7 - - - https://voculinux.com/install/nixos/ - 2026-11-01 - monthly - 0.8 - - - https://voculinux.com/install/debian/ - 2026-11-01 - monthly - 0.8 - - - https://voculinux.com/install/opensuse/ - 2026-11-01 - monthly - 0.8 - - - https://voculinux.com/install/linux-mint/ - 2026-11-01 - monthly - 0.8 - - - https://voculinux.com/install/pop-os/ - 2026-11-01 - monthly - 0.8 - diff --git a/web/src/app/__tests__/seo-assets.test.ts b/web/src/app/__tests__/seo-assets.test.ts index e17a234..3221390 100644 --- a/web/src/app/__tests__/seo-assets.test.ts +++ b/web/src/app/__tests__/seo-assets.test.ts @@ -41,9 +41,6 @@ describe("SEO Assets", () => { const expectedUrls = [ "https://voculinux.com/", "https://voculinux.com/install/", - "https://voculinux.com/install/ubuntu/", - "https://voculinux.com/install/fedora/", - "https://voculinux.com/install/arch/", "https://voculinux.com/compare/", "https://voculinux.com/remote-api/", "https://voculinux.com/voice-activity-detection/", @@ -59,13 +56,6 @@ describe("SEO Assets", () => { "https://voculinux.com/pipewire/", "https://voculinux.com/global-shortcuts/", "https://voculinux.com/hyprland-sway/", - "https://voculinux.com/local-gateway/", - "https://voculinux.com/flatpak/", - "https://voculinux.com/install/nixos/", - "https://voculinux.com/install/debian/", - "https://voculinux.com/install/opensuse/", - "https://voculinux.com/install/linux-mint/", - "https://voculinux.com/install/pop-os/", ]; expectedUrls.forEach((url) => { @@ -101,8 +91,16 @@ describe("SEO Assets", () => { (match) => match[1], ); expect(new Set(locs).size).toBe(locs.length); - routes.forEach((url) => { - expect(locs).toContain(url); - }); + + // Notice routes stay in the app but are dropped from navigation and the + // sitemap, so they are the only static routes allowed to be absent. + const NOTICE_ROUTES = [ + "https://voculinux.com/flatpak/", + "https://voculinux.com/install/nixos/", + "https://voculinux.com/changelog/", + "https://voculinux.com/local-gateway/", + ]; + const missing = routes.filter((url) => !locs.includes(url)); + expect(missing.sort()).toEqual([...NOTICE_ROUTES].sort()); }); }); diff --git a/web/src/app/advanced-settings/page.tsx b/web/src/app/advanced-settings/page.tsx index c49448f..59bdcf5 100644 --- a/web/src/app/advanced-settings/page.tsx +++ b/web/src/app/advanced-settings/page.tsx @@ -84,8 +84,8 @@ export default function AdvancedSettingsPage() { dateModified: "2026-06-11", author: { "@type": "Person", - name: "Jatin K Malik", - url: "https://github.com/jatinkrmalik", + name: "Xavier Karma", + url: "https://bongbetic.com", }, publisher: { "@type": "Organization", diff --git a/web/src/app/alternatives/page.tsx b/web/src/app/alternatives/page.tsx index 0a70375..97c6f73 100644 --- a/web/src/app/alternatives/page.tsx +++ b/web/src/app/alternatives/page.tsx @@ -79,8 +79,8 @@ export default function AlternativesPage() { dateModified: "2026-02-19", author: { "@type": "Person", - name: "Jatin K Malik", - url: "https://github.com/jatinkrmalik", + name: "Xavier Karma", + url: "https://bongbetic.com", }, publisher: { "@type": "Organization", diff --git a/web/src/app/autostart/page.tsx b/web/src/app/autostart/page.tsx index fbaf473..7cf4203 100644 --- a/web/src/app/autostart/page.tsx +++ b/web/src/app/autostart/page.tsx @@ -121,8 +121,8 @@ export default function AutostartPage() { dateModified: "2026-11-01", author: { "@type": "Person", - name: "Jatin K Malik", - url: "https://github.com/jatinkrmalik", + name: "Xavier Karma", + url: "https://bongbetic.com", }, publisher: { "@type": "Organization", diff --git a/web/src/app/changelog/page.tsx b/web/src/app/changelog/page.tsx index 5d04d38..721b3c3 100644 --- a/web/src/app/changelog/page.tsx +++ b/web/src/app/changelog/page.tsx @@ -1,697 +1,29 @@ -import Link from "next/link"; import { type Metadata } from "next"; -import { - BookOpen, - CheckCircle2, - ChevronRight, - Clock, - Download, - Sparkles, - Tag, - Zap, -} from "lucide-react"; -import { SeoSubpageShell } from "@/components/seo-subpage-shell"; -import { - absoluteUrl, - buildPageMetadata, - UPSTREAM_REPO_URL, -} from "@/lib/seo"; - -const releases = [ - { - version: "v0.18.5", - date: "2026-10-27", - type: "stable", - highlights: [ - "A stop pressed while a recording is starting can no longer leave the microphone recording forever (PR #1023)", - "A microphone that stalls mid-read can no longer hang dictation in PROCESSING; capture reads happen outside the buffer lock (PR #1023)", - "Keyboards survive suspend and the GNOME lock screen again: the evdev grab is released when forwarding cannot run (PR #1025)", - "Dictation Pad and Settings no longer bind to other windows or travel workspaces together on Wayland (PR #1024)", - "Ctrl+mouse-wheel zoom works again in Firefox and other apps (PR #967)", - "install.sh gains an upgrade mode that keeps your existing configuration and models (PR #1026)", - "Paste-injection copies are marked sensitive on wl-clipboard 2.2+, so clipboard managers that honor the hint keep dictated text out of history (PR #956); AUR source publication is gated on attested sdists (PR #1020)", - "Tray prefers libayatana-appindicator (PR #1019), the Snap lists PulseAudio microphones (PR #1018), and the Wayland fallback overlay survives dock closes (PR #1017)", - ], - }, - { - version: "v0.18.4", - date: "2026-10-21", - type: "stable", - highlights: [ - "Long push-to-talk dictations are queued in segments before the buffer cap, so nothing after the first two minutes is lost (PR #976)", - "Model downloads only start after you confirm them, Cancel cancels the whole change without freezing Settings, and switching models keeps your language settings (PR #1006)", - "Test Dictation always shows its own result; the Dictation Pad routing toggle moves to Settings > Dictation (PR #1005)", - "The GPU picker follows ggml's device list and CPU runs use most of your cores instead of 2 threads (PR #1001)", - "Press the recording hotkey again to cancel a slow transcription; nothing is typed or saved (PR #1004)", - "Wayland fixes: unique RemoteDesktop portal request tokens (PR #996), xdotool for XWayland apps outside IBus (PR #1003), and the first recording keeps focus on GNOME (PR #998)", - "Flatpak bundles onnxruntime for Silero VAD (PR #1002) and uses the X11 hotkey listener on X11 sessions (PR #997); keyboards with pointer axes like the Logitech K860 work again (PR #978)", - "Parakeet installs work again (PR #1000), update checks follow the build channel and can be turned off (PR #999), and Slovenian is supported (PR #995)", - ], - }, - { - version: "v0.18.3", - date: "2026-10-17", - type: "stable", - highlights: [ - "\"new line\" and \"new paragraph\" voice commands insert real line breaks, standalone and mid-utterance, with no stray punctuation left behind (PR #958, #962)", - "Hotkeys work again on GNOME Shell X11: the evdev backend is preferred there over pynput (PR #963)", - "Quitting no longer collapses multi-layout keyboards; the IBus engine restore is skipped when a real engine is live (PR #963)", - "Snap, Flatpak, AppImage and .deb/.rpm builds compile pywhispercpp at the portable x86-64 baseline, ending SIGILL crashes on pre-Haswell CPUs (PR #959)", - "Snap recipe drops the denied `uinput` plug so new revisions clear Store review; Wayland typing uses the RemoteDesktop portal (PR #960)", - "Transcribe File's modal download dialog releases its grab once TinyDiarize lands, so the transcript's Copy and Save As buttons work (PR #965)", - "Flatpak remote publish warns loudly when unconfigured instead of skipping silently (PR #961); README gains install-format badges and a Nix section (PR #949)", - ], - }, - { - version: "v0.18.2", - date: "2026-10-12", - type: "stable", - highlights: [ - "Dictation overlay orb pulses and ripples with live microphone level (PR #940)", - "Nix flake package with NixOS and Home Manager modules (PR #936), plus Vulkan GPU inference for pywhispercpp on Nix (PR #942)", - "Held keyboards are left ungrabbed at startup, so typing during launch cannot strand a key (PR #941)", - "Bundled pywhispercpp builds drop -march=native, fixing AppImage and Flatpak crashes on older CPUs (PR #939)", - "Piped curl | bash install keeps the script on stdin and prompts via /dev/tty (PR #935)", - "Installer covers cairo headers on openSUSE, Void, Solus and Alpine; evdev monitors remapper virtual keyboards ungrabbed (PR #937, #932)", - "CI gates the remote curl | bash install path end to end (PR #898)", - ], - }, - { - version: "v0.18.1", - date: "2026-10-08", - type: "stable", - highlights: [ - "Settings > Proxy page for model downloads and update checks behind SOCKS5 or HTTP CONNECT proxies, with optional auth (PR #909, fixes #655)", - "Opt-in JSONL transcript persistence: a transcript survives restarts and failed text injections instead of being lost (PR #907, fixes #758)", - "Native .deb and .rpm packages for Debian/Ubuntu and Fedora, x86_64 and aarch64, attached to the GitHub Release (PR #913)", - "Slimmer tray menu: Start on Login and About now live only in Settings (PR #905, fixes #654)", - "Speech Model Advanced pickers stage changes until you confirm Download instead of starting a fetch per click (PR #908, fixes #894)", - "Dictation Pad no longer ghosts away after sitting idle under a Wayland compositor (PR #912, fixes #896)", - "evdev keyboard discovery stops grabbing Logitech mice, Goodix touchpads, and power buttons as keyboards (PR #902, #917, #918, fixes #900, #914, #915)", - "KDE Plasma 6 Wayland: KWin VirtualKeyboard detection fixed, so dictated letter case stops scrambling (PR #919, fixes #911)", - "Text injection ends option parsing before typed text, so a chunk starting with a hyphen no longer truncates dictation (PR #922, fixes #921)", - "Startup reuses an on-disk same-size whisper.cpp weight instead of re-resolving it (PR #923, fixes #916)", - "uninstall.sh no longer deletes files in the directory you ran it from (PR #901, fixes #897)", - "Settings > Advanced Initial Prompt accepts typed input again, and transcript and log saves no longer double the .txt extension (PR #927)", - "deb declares python3-socks, rpm declares python3-pysocks; snap attach keeps checksums on failure; remote curl | bash install gated end to end (PR #920, #899, #906)", - ], - }, - { - version: "v0.18.0", - date: "2026-10-02", - type: "stable", - highlights: [ - "Dictation Pad: in-app window receives dictation and you copy text out by hand, so Wayland injection quirks cannot touch it (PR #887, fixes #726)", - "Hotkey suppression: evdev grabs the dictation shortcut and forwards everything else through a uinput clone; the key no longer types into the focused app, and still works when /dev/uinput is write-only (PR #873, #893, fixes #871)", - "PipeWire capture path with microphone and system-audio sources (PR #889, #883, fixes #751, #760)", - "RemoteDesktop portal text injection on Wayland, no ydotoold needed (PR #885, fixes #750)", - "Per-language dictation shortcuts, follow the active keyboard layout while dictating, and recent dictations in the tray menu (PR #880, #837, #487, fixes #805, #821)", - "File transcription with TinyDiarize per-speaker labels via --transcribe-file and the tray (PR #884, fixes #756)", - "Opt-in D-Bus activation so compositor global shortcuts and scripts can start dictation (PR #568, fixes #761)", - "Combined custom dictionary with transcript corrections, postprocessing script hook, bilingual dictation candidates (PR #890, #479, #424)", - "Floating glowing dictation overlay, lower other audio while dictating, keep recording while an idle model reloads (PR #516, #861, #851)", - "config.json can pin the text-injection backend (PR #649, fixes #476)", - "GNOME Wayland: Alt+Shift and Win+Space layout switching keeps working; IBus guard no longer flips GNOME/X11 to a US layout (PR #876, #827, fixes #848)", - "Shortcut recorder learns unmapped F19/F24 and XF86-aliased F13-F23 (PR #844, fixes #843)", - "Vosk refuses a model that would exceed available memory instead of tripping the OOM killer (PR #850, fixes #676)", - "Model downloads cancel stalled fetches; the download dialog shows verifying instead of a stalled 100% (PR #888, #864, fixes #679, #863)", - "Update checker falls back when GitHub API rate-limits (PR #846, fixes #845)", - "Settings: scrollable category list, Dictation Tone grayed while sounds are off, Test Dictation artifact and missing transcription fixed (PR #886, #877, #853, fixes #678, #849, #847, #720)", - "AUR voculinux-bin ships the AppImage with per-arch digests; releases publish a signed self-hosted Flatpak remote; snap-promote workflow gates stable promotion; snap gains hardware-observe (PR #879, #875, #881, #858, fixes #817, #785, #783, #857)", - "Installer: hash-pinned dependencies and build tools, sourced modules, generated distro package map (PR #856, #862, #872)", - "Optional verified Orukeet model for Parakeet; VocaGateway runs locally from Settings > Advanced (PR #840, #774)", - ], - }, - { - version: "v0.17.0", - date: "2026-09-16", - type: "stable", - highlights: [ - "Faster Whisper engine: CTranslate2 / INT8 Whisper on CPU, optional extra, installer --engine=faster_whisper (PR #543)", - "Parakeet TDT 0.6B via sherpa-onnx: default v3-european bundle or v2-english, installer --engine=parakeet (PR #802)", - "Speech Model simple setup: language + speed/accuracy first; engine/size under Advanced (PR #801)", - "First run seeds recognition language from keyboard layout / locale (PR #796, #777)", - "Language picker filters while the list is open (PR #798)", - "Recommended model button sets size and specialization together and will not ignore a file already on disk (PR #797, #778)", - "Localized punctuation voice commands for it/fr/de/es/pt/nl/pl/ru (PR #642, #640)", - "Bare F1–F24 push-to-talk shortcuts (PR #815)", - "Snap packaging with ydotool and uinput for native Wayland; the Store denied the uinput grant, so later revisions drop the plug and type via the RemoteDesktop portal (PR #519, #823, #822)", - "Release workflow attaches Voculinux--{x86_64,aarch64}.flatpak (PR #786, #784)", - "XWayland clipboard paste instead of layout-garbled xdotool type (PR #680, #657)", - "Layout-aware Ctrl+V paste; ydotool releases Ctrl after a timed-out paste (PR #788, #675, #658)", - "Read WM_CLASS with xprop so xdotool stops dumping core on KDE Plasma Wayland (PR #807)", - "Settings freeze on already-downloaded model, English whisper.cpp .en variant, PTT tray redraw, sink-wake audio cues, Parakeet decode survival (PR #790, #795, #780, #809, #804, #803)", - "English-only models no longer hide other languages; picking Polish or auto-detect switches to the multilingual sibling (PR #826)", - "Speech Model copy and Unused downloads as a sibling expander of Advanced; VocaWin on the About family grid (PR #826)", - "install.sh: Faster Whisper is CPU CTranslate2/INT8; GPU backend does not install the CUDA toolkit (PR #826)", - "HDA analog mics (3-8 channel) open at native layout instead of forced 2ch/48kHz; capture is downmixed to mono (PR #829, fixes #813)", - "Native GTK installs (AUR / install.sh) follow OS dark/light; skipped when GTK_THEME is set so AppImage and user overrides stay in charge (PR #830, fixes #816)", - "Lock-derived Flatpak/AUR deps, hash-pinned exports for every engine extra, published-release verification, install.sh distro matrix (PR #819, #828, #791, #810)", - ], - }, - { - version: "v0.16.2", - date: "2026-09-05", - type: "stable", - highlights: [ - "KDE: skip leftover IBus when it is not the session IM so dictation types into Kate, browsers, and terminals (PR #753, fixes #752)", - "Wayland shortcuts: wtype and ydotool deliver real chords instead of refusing or silently doing nothing (PR #715)", - "IBus shortcuts: route X11_IBUS through xdotool and WAYLAND_IBUS through wtype/ydotool (PR #716)", - "Voice command delete that: send real BackSpace key events instead of U+0008 text (PR #714)", - "Installer: Fedora and Arch need glslc/shaderc packages, not glslang (PR #763, #604)", - "Nightly: stamp version.py before python -m build so wheel metadata matches the filename (PR #762)", - "Release integrity: checksums, signatures, and pinned builders for release artifacts (PR #759, epic #701 phase 5)", - "CI: gate AUR PKGBUILD builds on every PR; test the distros the docs promise and fix docs drift (PR #772, #773)", - "Site: VocaGateway family card is Beta; README logo, badges, and privacy copy (PR #765, #764)", - "Deps: bump the github-actions group (PR #766)", - "Snap 0.16.2 edge (rev 7) has no uinput plug: snap connect voculinux:uinput fails, and dictation only reaches XWayland apps. Later revisions ship the RemoteDesktop portal instead; the Store denied the uinput grant (PR #823)", - ], - }, - { - version: "v0.16.1", - date: "2026-08-30", - type: "stable", - highlights: [ - "Startup uses the engine's own model size instead of a leftover generic key; the model is saved only after it loaded (PR #684, #685, fixes #681)", - "Unused leftover-model list shows every row; one ConfigManager so Settings writes stick (PR #686, #691, fixes #683, #689)", - "Tray stays idle after leftover transcription on toggle stop, and the missing-model notification can download the recommended model (PR #741, #687)", - "Terminals get Ctrl+Shift+V paste; GNOME XWayland layout is restored after scoped IBus inject (PR #734, #742)", - "Installer requires Python 3.11, verifies model downloads, and no longer invents GPUs (PR #713, #736)", - "AppImage built against a glibc floor that boots on Debian 12 through current Fedora (PR #743, #744)", - "AUR: build against Arch extra setuptools 84, and skip context_params on AUR pywhispercpp 1.4 so the app starts", - "Settings dropdowns share a width; About is quieter with family platform marks (PR #754)", - ], - }, - { - version: "v0.16.0", - date: "2026-08-23", - type: "stable", - highlights: [ - "In-app update checker (stable/nightly) plus tray Update Available when GitHub has a newer release (PR #631, #645)", - "New installs default to hold Right Alt push-to-talk; existing configs keep their shortcut (PR #648)", - "Searchable language list and delete unused downloaded speech models (PR #672, #671)", - "Family dictation tone picker in Settings → Audio: Lift, Flick, Ember, Step, Voca, Soft, Chirp, Scale, Drop, Glass, Off, plus Preview. New installs default to Voca. Catalog tones are the family preview WAVs, not synthesized files (PR #707, #708)", - "License migrated to AGPL-3.0 (PR #660)", - "App icon, tray states, and site favicons use the shared Voca family mic instead of the old Linux rounded-rect (PR #704)", - "Installer hardened with Justfile and uv lockfiles; distro python3-gi required (no pip sdist of PyGObject). Epic #701 remains open (PR #700, #705, #706)", - "Test Dictation no longer reports no speech when recognition never started (PR #702)", - "IBus/X11 reliability: restorable scoped injection, engine restore after teardown, XKB layout restore (PR #623, #643, #665)", - "Audio, clipboard, and AppImage/GPU packaging fixes (PR #629, #673, #588, #646, #674, #637)", - "Settings About page groups this app, the VocaHQ family, and talk-to-us links (PR #718)", - "voculinux.com restyled to the Voca family workbench; Discord and X links point at VocaHQ (PR #728, #729, #722, #717)", - ], - }, - { - version: "v0.15.0", - date: "2026-07-28", - type: "stable", - highlights: [ - "Searchable sidebar settings with live search replace the seven-tab notebook (PR #601)", - "AppImage packages for x86_64 and aarch64 on GitHub Releases (PR #573, #602)", - "Expanded speech-language catalog (~33 languages + Auto-detect), including Hungarian; VOSK only lists languages with official models (PR #616, fixes #565)", - "Settings: dictation status / mic level / Test Dictation / Close live in the sidebar footer (PR #618)", - "Settings: Custom Shortcut Record/Set controls show again (PR #619)", - "Languages: English (India) maps to Whisper code en for whisper.cpp / Whisper / remote API (PR #617)", - "Auto-capitalize after sentence punctuation; trailing space so the next utterance does not glue on (PR #554, #608)", - "Auto-pause competing apps and idle model keep-alive unload for battery/GPU headroom (PR #592, closes #445, #591)", - "Vulkan: auto-select discrete GPU and pick a device in Advanced settings (PR #590, closes #589)", - "Wayland: use IBus on previously unbridged compositors when ibus-wayland is running (PR #614, closes #607)", - "IBus: keep engine teardown correct when parent destroy fails (PR #613, fixes #606)", - "CLI: voculinux --version (PR #563, closes #555)", - "Settings info notices flattened; Bluetooth mic heap-corruption fix; KDE unbridged-IBus skip when ibus-wayland is absent; xdotool focus preserve; installer/AUR fixes (PR #615, #599, #577, #564, #583, #569, #597, #579, #586)", - "Marketing site redesign; languages page per-engine badges; robots.txt indexing fix (PR #582, #616, #610)", - ], - }, - { - version: "v0.14.2", - date: "2026-07-17", - type: "stable", - highlights: [ - "IBus: restore engine process launch after Flatpak XDG path import so the engine no longer dies with ImportError and falls back to ydotool/clipboard paste (PR #534)", - "IBus: wait for FocusIn before commit on scoped injection so the first dictation of a session is not dropped on GNOME Wayland (PR #533, fixes #523)", - "Settings UI: notebook tabs scroll so the dialog fits the monitor; wheel events from unfocused combos/spins reach the tab scroller (PR #538, #541)", - ], - }, - { - version: "v0.14.1", - date: "2026-07-17", - type: "stable", - highlights: [ - "Flatpak packaging for universal distribution: whisper.cpp engine, XDG sandbox paths, global hotkeys via evdev, Wayland text injection via wl-copy + ydotool (PR #484, closes #167)", - "AUR package and CI publish path for Arch Linux (PR #518)", - "Layout-aware combo keys so custom shortcuts work on non-US keyboard layouts (PR #514)", - "Installer fix for sg not found on Ubuntu 26.04 / Debian 13 (PR #524)", - "Text injection treats XIM none as unset (PR #512)", - "Website screenshot gallery refresh and Dependabot npm alert fixes (PR #521, #515)", - ], - }, - { - version: "v0.14.0-beta", - date: "2026-07-13", - type: "beta", - highlights: [ - "Configurable modifier+key hotkeys: set custom shortcuts with any combination of Ctrl, Alt, Shift, and Super plus a letter/number key, e.g. Alt+R or Ctrl+Shift+V (PR #493)", - "Remote API engine now supports FunASR/SenseVoice models via OpenAI-compatible endpoints; SenseVoice metadata labels are stripped before text injection (PR #468)", - "GNOME Wayland IBus text injection restored when only a bare xkb engine is configured; engine restore fallback now picks the correct IM engine (PR #506, #500)", - "KDE Plasma Wayland IBus text-injection path restored after recent compositor-detection regressions (PR #502)", - "Wayland text injection now waits for held modifiers to release before typing, preventing accidental shortcut triggers and garbled output (PR #494)", - "Shortcuts UI keeps preset and custom shortcut selection exclusive: selecting a preset clears the custom field, and setting a custom combo selects the Custom Shortcut preset (PR #509)", - "whisper.cpp no longer defaults to all CPU cores on hybrid processors, improving UI responsiveness and battery life (PR #492)", - "Fixed a crash on recording start when the selected audio device index no longer matches the current system enumeration (PR #499)", - "Installer includes xsel as a fallback for the Wayland clipboard path when xclip is unavailable (PR #496)", - "Removed an outdated long comment about whisper.cpp default thread counts (PR #505)", - ], - }, - { - version: "v0.13.0-beta", - date: "2026-06-30", - type: "beta", - highlights: [ - "Guided whisper.cpp model selection: pick a size plus a specialization (English-only, quantized Q5/Q8, or Large v3 Turbo) through split Model Size and Specialization dropdowns with in-app guidance; the --model flag also accepts exact IDs like medium.en-q5_0 and large-v3-turbo (PR #465)", - "Dictation now keeps a space between segments spoken with a pause in between, so words no longer run together after a silence (PR #464)", - "Keyboard shortcuts now work on keyboards hotplugged after Voculinux starts, with the evdev backend rescanning for new devices and recovering from disconnects (PR #467)", - "Voculinux now detects KDE Plasma Wayland sessions and points you to enable IBus Wayland for reliable text injection, surfaced during install and when wtype injection fails (PR #466)", - "Wayland: fixed garbled text on non-US keyboard layouts (AZERTY/QWERTZ/Dvorak) and a clipboard-copy hang; ydotool now pastes through the clipboard, which is layout-independent (PR #480)", - "Wayland: use wtype/ydotool instead of IBus on compositors that don't bridge it to native apps like COSMIC, Sway, and Hyprland, fixing silent text drops (PR #486)", - "Wayland/IBus: require a real IM engine before using IBus, so a bare xkb layout no longer causes silent text drops on GNOME/Mutter and other compositors (#478)", - "Wayland: keep the keyboard layout intact by not running setxkbmap, which was flipping XWayland apps to us after dictation (#474)", - "Faster ydotool text injection via an explicit --key-delay (PR #488)", - "Settings dialog height capped on high-resolution displays (PR #465)", - "Refreshed website docs with new feature pages for Remote API, Silero VAD, advanced whisper.cpp settings, and desktop reliability, plus responsive layout polish (PR #470)", - ], - }, - { - version: "v0.12.0-beta", - date: "2026-06-07", - type: "beta", - highlights: [ - "Remote API speech recognition engine with installation and configuration support (PR #335)", - "Silero VAD drops silence-only buffers for cleaner dictation when ONNX Runtime support is available (PR #447)", - "Thread safety hardening for Remote API, IBus, and text injection paths (PR #452)", - "IBus preserves user engines for dead keys and captures the current engine during scoped activation (PR #457, #458)", - "Remote Server settings now respect the Advanced toggle and the settings dialog fits lower-resolution screens (PR #454, #456)", - "CUDA diagnostics now include auto-remediation and behavioral tests (PR #451)", - "Corrected whisper.cpp and VOSK model download size metadata (PR #453)", - "Startup now works without the pynput backend (PR #448)", - "Remote API developer test server documentation (PR #455)", - "Website speech demo browser support clarification (PR #449) and GitHub Sponsors funding configuration", - ], - }, - { - version: "v0.11.0-beta", - date: "2026-05-30", - type: "beta", - highlights: [ - "New Advanced Settings tab with whisper.cpp anti-hallucination parameters - temperature, no_speech_threshold, max segment length, and more (PR #415)", - "IBus engine readiness probe at startup with hardened retries (PR #391)", - "IBus runtime failure recovery without app restart (PR #411)", - "IBus engine instance destruction handled on keyboard layout switch (fixes #388, closes #389)", - "Preserve final speech on stop - no more truncated transcriptions (fixes #401)", - "Play stop sound immediately on release and after audio thread joins (PR #426, #436)", - "Repair pywhispercpp library loading in installer (PR #433)", - "Reduce whisper.cpp CPU threads and ensure GPU backend builds in dev mode (PR #439)", - "Correct openSUSE Tumbleweed dependencies with fallback handling (PR #418, #420)", - "Harden Debian compatibility layer in installer (PR #437)", - "Add Python 3.14 support and bump lxml>=6.1.0 (fixes #404)", - "Validate pyproject.toml/setup.py content before entering local repo mode (fixes #396)", - "Reuse existing whispercpp builds during install (PR #421)", - "Refresh ldconfig after openSUSE typelib install, clarify python3XY placeholder convention (PR #438)", - "Clean up runtime log noise and cache hardware detection", - "Test coverage: recognition internals, IBus edge cases, CI notification suppression (PR #410, #414)", - "Clarify PyPI installation requirements (PR #423)", - "Dependency bumps: Next.js security updates (PR #399, #429), PostCSS", - ], - }, - { - version: "v0.10.2-beta", - date: "2026-04-08", - type: "beta", - highlights: [ - "Handle non-ASCII characters (á, é, ñ, etc.) with ydotool via clipboard paste fallback (fixes #362, PR #376)", - "Detect IBus on Wayland without legacy env vars and fix text injection (PR #381)", - "Start IBus engine process before checking registration to fix startup on some systems (fixes #360, PR #361)", - "Add missing dependencies for Pop!_OS and Ubuntu 24.04+ including cmake, libcairo2-dev, libgirepository (PR #379)", - "Systematic code quality refactor across 20 dimensions (PR #377)", - "Clarify missing GNOME AppIndicator support on Debian (PR #385)", - "Redesigned OG image for voculinux.com - cleaner, professional, text-based layout (PR #392)", - "Test coverage improvements: mock Notify module, tray degraded-startup, IBus socket-readiness branches (PR #384, #386, #390)", - ], - }, - { - version: "v0.10.1-beta", - date: "2026-03-30", - type: "beta", - highlights: [ - "Bundled package resources to prevent missing system tray icons (fixes #349, PR #354)", - "Stopped recognition before engine switches to prevent segfaults (fixes #350, PR #355)", - "Added a dedicated Close button in Settings for better WM compatibility (fixes #323, PR #356)", - "Preserved XKB layout state during Voculinux IBus activation (fixes #292, PR #343)", - "Auto-recover speech recognition after system suspend/resume via new D-Bus handler (fixes #367, PR #369)", - "Restart keyboard shortcut backend after resume to keep shortcuts working (PR #371)", - "Delayed keyboard restart to allow USB re-enumeration after resume (PR #372)", - "Fixed premature transcription during push-to-talk silence (fixes #358, PR #359)", - "Disabled copy-to-clipboard by default in Settings (PR #370)", - "Maintenance updates: npm/yarn dependency refresh and brace-expansion dev dependency bump (PR #346, #357)", - ], - }, - { - version: "v0.10.0-beta", - date: "2026-03-25", - type: "beta", - highlights: [ - "Generalized keyboard modifier alias matching across layouts for more reliable shortcuts", - "Audio channel probing now validates device-supported sample rates before selection", - "evdev now handles SYN_DROPPED to prevent stale modifier state", - "IBus engine activation now uses register_component for stronger text-injection startup", - "Settings dialog forces window decorations to prevent missing-titlebar behavior", - "Tray icon refresh now uses icon names for better AppIndicator compatibility", - "Coverage increased to 80%+ with additional IBus launch/main-entry tests", - "Installer and CI polish: latest-tag fallback via GitHub API, Node 24 deploy, and path-filtered workflows", - ], - }, - { - version: "v0.9.0-beta", - date: "2026-03-14", - type: "beta", - highlights: [ - "Left/right modifier key distinction - choose Left Ctrl vs Right Ctrl for your shortcut", - "Sound effects toggle - enable or disable audio feedback from Settings", - "Wayland clipboard fallback - auto-copies text when virtual keyboard injection isn't available", - "Display availability check - graceful error when running in headless environments", - "Fixed unwanted leading space at the start of each new transcription session", - "Fixed shortcut mode (toggle/push-to-talk) not applying on startup", - "Improved Debian/pipx installation guidance and cross-distro error messages", - "Grouped shortcut selector UI - shortcuts organised by Either/Left/Right side", - ], - }, - { - version: "v0.8.0-beta", - date: "2026-03-01", - type: "beta", - highlights: [ - "Push-to-talk shortcut mode (hold to speak, release to stop)", - "Optional voice commands with VOSK auto-enable behavior", - "Improved shortcut mode switching and callback reliability", - "IBus active-method detection before text injection", - "Audio hardware compatibility fixes (sample rate and channel count)", - "Fedora startup dialog stability fix", - "Web SEO expansion and homepage visual refresh", - ], - }, - { - version: "v0.7.0-beta", - date: "2026-02-22", - type: "beta", - highlights: [ - "Autostart on login support (XDG autostart)", - "Tabbed settings dialog (Speech Engine, Recognition, Text Injection, Audio Feedback, General)", - "Intel GPU compatibility detection - auto fallback to CPU for incompatible GPUs", - "Single instance prevention - prevents multiple Voculinux running", - "Evdev device management - removes disconnected devices to prevent CPU spin", - "Improved GPU detection - avoids false positives on systems without dev libraries", - "IBus fallback - skip setup when daemon not running", - "Fedora dnf check-update fix", - "Web SEO - 7 new optimized pages", - ], - }, - { - version: "v0.6.3-beta", - date: "2026-02-19", - type: "beta", - highlights: [ - "Fixed installer default tag pointing to correct version", - "Added missing psutil dependency for fresh installs", - "Process check and interactive prompts in install/uninstall", - "Removed leading space from first speech transcription", - ], - }, - { - version: "v0.6.2-beta", - date: "2026-02-18", - type: "beta", - highlights: [ - "Interactive backend selection (GPU/CPU)", - "Enhanced welcome message", - "Simplified install commands", - "Better GPU support and Vulkan detection", - ], - }, - { - version: "v0.6.0-beta", - date: "2026-02-12", - type: "beta", - highlights: [ - "whisper.cpp as default engine", - "Multi-language support with auto-detection", - "System tray indicator", - "Full Wayland support", - "IBus text injection engine", - ], - }, - { - version: "v0.5.0-beta", - date: "2026-02-06", - type: "beta", - highlights: [ - "First beta release", - "Stable core functionality", - "Multiple speech engine support", - "Improved text injection", - ], - }, - { - version: "v0.4.1-alpha", - date: "2026-01-29", - type: "alpha", - highlights: [ - "Language selector UI", - "App drawer launch fix", - "Better commit handling", - "Improved update mechanism", - ], - }, - { - version: "v0.4.0-alpha", - date: "2026-01-29", - type: "alpha", - highlights: [ - "Multi-language support (French, German, Russian)", - "Debian 13+ compatibility", - "Python 3.12+ support", - "Tag-based version selection in installer", - ], - }, - { - version: "v0.3.0-alpha", - date: "2026-01-21", - type: "alpha", - highlights: [ - "Initial public alpha", - "Basic speech recognition", - "X11 text injection", - "VOSK engine support", - ], - }, -]; - -const getTypeStyles = (type: string) => { - switch (type) { - case "stable": - return { - badge: - "bg-primary/10 text-primary", - label: "Stable", - }; - case "beta": - return { - badge: - "bg-primary/10 text-primary", - label: "Beta", - }; - case "alpha": - return { - badge: - "bg-muted text-muted-foreground", - label: "Alpha", - }; - default: - return { - badge: "bg-muted text-muted-foreground", - label: type, - }; - } -}; +import { ChannelNotice } from "@/components/channel-notice"; +import { buildPageMetadata, SOURCE_REPO_URL } from "@/lib/seo"; export const metadata: Metadata = buildPageMetadata({ - title: "Changelog and Release Notes", + title: "Changelog: Voculinux Release Notes", description: - "Track Voculinux release history and version updates. See what's new in each version of our Linux voice dictation software.", + "Voculinux release notes are on the fork's releases page. The upstream changelog is not published for Voculinux.", path: "/changelog", - keywords: [ - "voculinux changelog", - "voculinux release notes", - "voice dictation linux updates", - "speech to text linux versions", - ], }); -export default function ChangelogPage() { - const articleJsonLd = { - "@context": "https://schema.org", - "@type": "Article", - headline: "Voculinux Changelog - Release History", - description: - "Complete release history for Voculinux, the offline voice dictation software for Linux.", - dateModified: "2026-10-27", - author: { - "@type": "Person", - name: "Jatin K Malik", - url: "https://github.com/jatinkrmalik", - }, - publisher: { - "@type": "Organization", - name: "Voculinux", - logo: { - "@type": "ImageObject", - url: absoluteUrl("/voculinux.png"), - }, - }, - mainEntityOfPage: absoluteUrl("/changelog"), - }; - +export default function ChangelogNoticePage() { return ( - -