* fix(web): stop doubled title suffix and correct stale page claims - buildPageMetadata now emits titles that already end in the brand (e.g. "... | Vocalinux") as absolute, so the layout template no longer renders "| Vocalinux | Vocalinux" on 15 existing pages - autostart: Start on Login moved out of the tray menu in v0.18.1; point readers at Settings -> General and the first-run prompt - wayland: align compositor support with docs/DISTRO_COMPATIBILITY.md (sway good, Hyprland experimental, river untested) * docs(web): add guides for v0.17-v0.18 features and more distros New pages for features that only had changelog one-liners: /parakeet/, /faster-whisper/, /dictation-pad/, /transcribe-audio-files/, /custom-dictionary/, /multilingual-dictation/, /pipewire/, /global-shortcuts/, /hyprland-sway/, /local-gateway/, /flatpak/, /install/nixos/, plus /install/debian/, /install/opensuse/, /install/linux-mint/ and /install/pop-os/ via the distro route. Each page is checked against src/ and docs/ at v0.18.5, carries TechArticle/HowTo/FAQPage JSON-LD built from the visible content, and links to existing guides. The distro route now lists support levels from the compatibility matrix instead of unsourced "tested on" claims, uses the documented install commands, adds AUR and native package options, and drops its duplicate breadcrumb. Registration: sitemap entries, breadcrumb titles, a Features footer group, links from the install hub, homepage engine chips and the reliability page, and a test that every static route is in the sitemap. The homepage VocaPhone card now says Android is on Google Play.
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).