* fix(web): SEO fixes from Search Console and Lighthouse audit
Technical:
- Emit BreadcrumbList JSON-LD from the same trail as the visual breadcrumbs
on every SeoSubpageShell page.
- absoluteUrl() no longer appends a trailing slash to file paths. The
Organization and publisher logo URLs pointed at /vocalinux.png/, a 404.
- Fetch the GitHub star count once at build time in next.config.js and
drop the client-side api.github.com fetch and preconnect (Lighthouse
"third-party code" on every page). Falls back to the "GitHub" label.
- Fix h1 -> h3 heading skips on 11 pages by promoting the leading card
headings to h2; new .subpage-card-title keeps the old h3 sizing.
- Header and footer logo get alt="" next to the visible "Vocalinux" text.
- Footer links every guide, distro and feature page, so the pages added in
#1038 and /vs-nerd-dictation/ (Discovered, not indexed) and /writers/
(no inbound links) are linked sitewide.
Titles and descriptions:
- Rewrite titles/descriptions for pages with high impressions and low CTR
in Search Console (home, FAQ, compare, languages, open-source, GPU,
alternatives, offline, install) to lead with the queries they rank for.
- Distro pages use "<Distro> Speech to Text: Offline Voice Typing Setup"
as the search title; the on-page h1 is unchanged.
- Remove brand repetition and shorten 75+ character titles.
- Bump sitemap lastmod for the rewritten pages.
* fix(web): keep home install card titles styled
The home page's install cards still use h3; only /install/ moved to h2.
Style both so the home cards keep their size and spacing.
* fix(site): align Phone chip, Cost copy, and privacy with GA
Use the official Android beta / iOS TestFlight chip on #ecosystem.
Replace Free forever with Free and open source on privacy and open-source.
Disclose vocalinux.com Google Analytics and scope no-telemetry claims to the installed app.
Fixes#867
* fix(site): make privacy GA disclosure match the live gtag
Spell out page views, the client-ID cookie, and IP/device processing for
G-7NBBNJNNQ7. Align Data Collection with PRODUCT.md, drop the hidden
telemetry weasel, and correct config.json plus the voice-storage row.
* web: restyle vocalinux.com to the Voca family workbench
Bring the Linux marketing site onto the same paper, ink, and teal language
as VocaHQ, VocaMac, VocaPhone, and VocaGateway. Drop the site-wide dark
mode so the canvas stays paper-only, matching the other product sites.
* web: loop the home ribbon without a gap or jump
The ticker used a stretched full-width track, so a -50% slide left an empty
right edge before snapping back. Two equal groups, each wider than the
viewport, scroll by exactly one group width.
* web: match vocahq.com ribbon speed and teal band
The looped ticker was covering six item cycles in 32s, so it raced.
It now spends 28s per cycle like vocahq.com, uses the same dark-teal
band, and pauses when the tab is hidden.
* web: drive the hero panel clock from the visitor's local time
Replace the static 11:24 mock with a 24-hour HH:MM clock in the client
timezone, updated on the minute.
* web: add official platform marks on the family cards
Use the .github brand platform SVGs (Linux, Apple, Android, Windows)
plus the HQ server mark for VocaGateway, matching vocahq.com's product row.
* web: restore a Light/Dark flip on the screenshots page
The captured GTK shots exist in both appearances. A page-local switch
defaults to prefers-color-scheme and stores a tab override. The rest of
the site stays paper-only.
* web: make the homepage CTA say Install, not Get
The button already jumps to the one-line installer. Name that action,
note that there is no account, and keep the same copy in the closer
and the mobile menu.
* web: style install commands as GTK terminals
Command boxes use a headerbar with copy, a centered title, and
window controls on the right. The prompt is user@linux:~$, not
Mac traffic-light chrome.
* web: stop repeating the engine list in the hero
The proof line, the notes window, and the tray terminal all said
the same whisper.cpp / Whisper / VOSK / Remote API line. Engines
stay on the window chips. Proof is now desktop and license facts.
The terminal shows launching into the tray.
* web: reflow copy, color prompts, and add install paths
Drop pretty/balance wrapping so titles and ledes follow the
shell width. Color the user@linux prompt. Hero terminal now
says audio stays on this machine. Ribbon adds project words.
AppImage and source-build sit under the install command.
* web: put X, Discord, and GitHub by the footer mark
Official family social marks sit next to the Vocalinux logo.
Footer columns are Product, Install, Guides, and Project.
The bottom line is Part of VocaHQ, without X11 or whisper.cpp.
* web: add hello@vocahq.com to the footer social row
The official mail mark sits with X, Discord, and GitHub and opens
the family hello@vocahq.com address.
* web: use the circular mark in the header and footer
Header and footer now use the official teal circle lockup instead
of the square app icon.
* web: ship a circular favicon and a family OG card
Favicons use the teal circle lockup. The Open Graph image is redone
in the paper workbench language with the current homepage line.
* web: set the hero to Dictate locally / In any app
Shorter couplet in the VocaHQ display size, with a matching
lede and Open Graph card.
* web: gray the hero terminal note as a comment
The second line was reading as part of the vocalinux command.
It is now a dim # comment under the prompt.
* fix(web): drop stale 100% offline copy and mark VocaWin alpha
vocalinux.com still called VocaWin planned and said the Linux app was
100% offline. Local engines stay on the machine. Remote API is opt-in.
VocaWin is developer alpha: unsigned NSIS (~12 MB) and MSI (~34 MB),
latest prerelease v0.1.0-alpha.1.
Fixes#709
* fix(web): drop leftover never-leaves claims
Open source and privacy pages still said voice data never leaves the
machine. Local engines stay local. Remote API is opt-in.
Repo links, install one-liners, and release checks now use
github.com/VocaHQ/vocalinux. The site mentions VocaHQ without a redesign.
The Codeberg mirror, personal email, and X handle are unchanged.
* feat(web): deslop marketing site with workstation craft identity
Replace generic AI SaaS landing patterns with a deliberate Linux desk
utility look: cool paper palette, Bricolage + Source Sans, solid type,
editorial feature rows, and terminal install as first-class proof.
Adds PRODUCT.md, DESIGN.md, and WEB-DESLOP-NOTES.md. Drops unused geist
and react-intersection-observer. No product claim changes.
* chore(web): drop local deslop working notes from PR
WEB-DESLOP-NOTES.md was a firstmate/session artifact, not product docs.
* fix(web): stop mobile horizontal overflow and harden viewport layout
Long install URLs expanded the page past the phone width. Constrain
terminal pre with break-all, min-w-0 columns, and overflow-x clip.
Tighten mobile hero type and full-width CTAs. Add Playwright viewport
QA script and jest checks that assert no overflow at desktop/tablet/mobile.
* refactor(web): drop browser speech preview from marketing home
Remove the cloud SpeechRecognition demo section and nav Demo link.
Keep product truth: hero install, features, screenshots, engines.
Fold shortcut/engine/audio links into the features intro.
Delete unused LiveDemo component and its unit test.
* chore(web): remove orphaned demo overlay and double-press hook
Only LiveDemo used these; gone with the browser preview section.
* feat(web): borrow PR #546 craft language into deslop home
Merge closed redesign language onto feat/web-deslop-craft: pure white
and near-black iron surfaces, emerald-committed palette, asymmetric
hero with real app screenshots, full-bleed install strip, feature bento
with tray/settings shots, and install-to-dictation steps.
Keep Bricolage + Source Sans (not Geist), no browser speech demo, and
mobile overflow guards. Update screenshots homepage expectations.
* docs(design): align DESIGN.md tokens with PR #546 iron/emerald palette
* fix(web): drop settings screenshot from installer details
Uninstall sat too far below the list once the general-settings shot
was in that column. Keep checklist, requirements, and uninstall only.
* fix(web): raise light-mode primary and footer contrast
Darken light emerald so white button text hits ~5:1 (was 3.4).
Brighten install-strip and footer secondary text for legibility.
Verified light/dark × desktop/tablet/mobile with no overflow.
* fix(web): compact feature cards to kill empty vertical space
Right-column tiles were h-full + justify-between next to a tall
screenshot, so short copy left large voids. Use content-height cards
with denser padding and inline link rows instead.
* fix(web): pair settings shot with full feature rail
Replace three orphan cards beside a tall dialog with a six-row
feature panel that stretches with the screenshot frame. Crop the
settings image with object-cover/object-top so heights match and
no void sits next to the UI shot.
* feat(web): apply homepage craft language to SEO child pages
Rewrite SeoSubpageShell chrome (fixed nav, install pill, iron footer)
to match the deslop home. Add subpage utilities and retoken all
templated child routes: borders, radii, mono kickers, single emerald
accent, terminal panels, no rainbow icon tiles or gradient cards.
* fix(web): avoid invalid @apply hover:border-primary/40 in subpage-card
* fix(web): rewrite subpage CSS without invalid Tailwind @apply
* fix(web): color comparison X icons rose-red on alternatives
Use soft rose (#c45c5c / #e08b8b) for no/cons marks so they read as
distinct from emerald yes/checks without looking like form errors.
* docs(web): move product/design docs under web/ and drop impeccable markers
Keep PRODUCT.md and DESIGN.md next to the Next app (not repo root), add
web/AGENTS.md as the entry point, and point the root AGENTS website
section at those files. Strip tool-specific schema comments.
* fix(web): use icon-only copy control on install terminal
Replace the chunky Copy/Copied chip with a quiet clipboard icon that
turns into a check on success.
* fix(web): restyle system requirements as a spec rail
Replace the nested bullet card with mono-label / value pairs under the
installer section so it matches the craft language used elsewhere.
* fix(web): center engine rows and quiet the Default badge
Align name/badge with multi-line engine details on sm+; replace the
filled green pill with a small mono outline chip.
* feat(web): add v0.10.1 updates and 5 new SEO pages
## New SEO Pages (5)
- /vs-nerd-dictation/ - Vocalinux vs Nerd Dictation comparison
- /whisper-model-guide/ - Whisper model sizes explained
- /voice-typing-vscode/ - How to dictate in VS Code on Linux
- /writers/ - Voice dictation for writers on Linux
- /gnome-kde/ - Voice typing on GNOME vs KDE Plasma
## Existing Page Updates
- homepage: Update JSON-LD featureList with v0.10.1 features, add new FAQs, link new pages in footer
- troubleshooting: Add suspend/resume recovery, tray resources, settings dialog fixes
- shortcuts: Add sound effects toggle, left/right modifier distinction, PTT improvements
- wayland: Add keyboard layout preservation, clipboard fallback note
- compare: Add engine switching safety notes
- faq: Add suspend/resume and keyboard layout FAQs
- alternatives: Link to new Nerd Dictation comparison
- seo-subpage-shell: Add new pages to navigation
- sitemap: Add 5 new URLs
Fixes#257 (SEO expansion)
* fix(web): add theme toggle to subpages, fix dark mode button contrast, simplify footer nav
- Add light/dark theme toggle to SeoSubpageShell header (all subpages)
- Fix duplicate useState/useEffect imports causing build error
- Fix unclosed div in header markup
- Add dark:text-black to CTA buttons across all 15 subpages for contrast on bright green bg
- Add dark:text-black to footer CTA button in SeoSubpageShell
- Simplify subpage footer to mainNavCategories (5 condensed categories) instead of full navCategories
* fix(web): fix list items stacking, add all new pages to nav, restructure footer
- Fix inline-flex → flex on all li elements across 13 pages so bullet points
always stack on separate lines instead of running together horizontally
- Add all 5 new SEO pages to subpage nav mainNavCategories (Whisper Models,
For Writers, VS Code, GNOME vs KDE under Features/Use Cases; new Compare
dropdown with vs Nerd Dictation, Alternatives, Offline, Open Source)
- Add /vs-nerd-dictation/ to homepage footer Learn column
- Restructure homepage footer from 2 crowded columns into 4 lean categorised
columns (Get Started, Learn, Use Cases, Support) — responsive 2-col on
mobile/tablet, 5-col on desktop
* feat(web): add 8 new SEO-optimized pages for organic traffic
## New Pages Added
| Page | Purpose | SEO Value |
|------|---------|-----------|
| `/languages/` | Multilingual support (9+ languages) | International SEO, language-specific keywords |
| `/wayland/` | Wayland support guide | Technical SEO, Linux display server queries |
| `/rsi-prevention/` | Health & accessibility focus | High-intent health keywords |
| `/gpu-acceleration/` | GPU/Vulkan support | Performance-focused technical SEO |
| `/open-source/` | FOSS & privacy positioning | Open source community keywords |
| `/autostart/` | v0.7.0 feature highlight | Linux desktop integration keywords |
| `/for-developers/` | Developer use cases | Developer productivity keywords |
| `/offline/` | Privacy-first positioning | Privacy-conscious user keywords |
## Navigation Improvements
- Redesigned header with hamburger menu for mobile
- Categorized navigation with 5 sections: Get Started, Features, Use Cases, Privacy & Ethics, Support
- Added breadcrumbs for better UX and SEO
- Footer with complete site map organized by category
## Technical Updates
- Updated sitemap.xml with all 21 pages
- All pages include JSON-LD structured data (Article schema)
- Full SEO metadata with targeted keywords per page
## Build Verification
- All 21 pages generated successfully (including dynamic install/[distro] pages)
- Build passes without errors
* feat(web): add dropdown navigation to SEO subpages
- Desktop: 5 dropdown menus (Get Started, Features, Use Cases, Privacy & Ethics, Support)
- Mobile: Hamburger menu with categorized pages
- All pages now accessible from any SEO subpage
- Click outside to close dropdowns
- Breadcrumbs and footer links remain unchanged
* fix(web): make SEO header dropdowns open on hover and focus
* fix(web): remove dead zone between dropdown trigger and menu