* 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.
Vocalinux website
Marketing site for vocalinux.com, built with Next.js and deployed as a static export (GitHub Pages).
Product claims and design constraints: PRODUCT.md, DESIGN.md. Agent notes: AGENTS.md.
Development
npm install
npm run dev
Production build
npm install
npm run build
Static output is written to out/.
Local preview of the build
cd out
python3 -m http.server 3000
Open http://localhost:3000.
Scripts
| Script | Purpose |
|---|---|
npm run dev |
Dev server |
npm run build |
Production static export |
npm run deploy |
Build and prepare GitHub Pages (.nojekyll, CNAME) |
npm run lint |
ESLint |
npm run typecheck |
TypeScript |
Deployment
Push to main triggers the site workflow. Production host: vocalinux.com.
Manual path:
cd web
npm install
npm run deploy
That produces out/ with .nojekyll and a CNAME for vocalinux.com.
Layout
web/
├── src/
│ ├── app/ # Next.js app routes
│ ├── components/
│ │ ├── site-chrome.tsx
│ │ └── ui/ # Reusable UI components
│ ├── hooks/
│ └── lib/
├── public/ # Static assets and screenshots
├── out/ # Build output (generated)
└── package.json
Configuration notes
- Custom domain:
deployscript writesout/CNAME - Subdirectory deploy: set
basePathinnext.config.jsif needed - Family workbench UI: warm paper, system type, same language as VocaHQ (DESIGN.md)
Troubleshooting
| Symptom | Check |
|---|---|
| Module not found | npm install |
| Type errors | npm run typecheck |
| Lint errors | npm run lint |
| 404 on GitHub Pages | Ensure out/.nojekyll exists |
| Assets 404 | Confirm basePath matches deploy path |
License
Same as the main Vocalinux project (AGPL-3.0).