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 ( - -