Files
voculinux/web
Jatin K MalikandGitHub 1f121546fb fix(release): attach the snap to GitHub Releases (#839)
* fix(release): attach the snap to GitHub Releases

v0.17.0 packed the snap, then Store review of uinput failed the job, so
the file never reached the tag. Build and attach first. A Store hold is
a warning, not a failed release. SHA256SUMS covers the .snap.

snap-backfill.yml rebuilds an existing tag, appends the snap to the
manifest, and attests only that file.

* fix(release): keep snap tags out of the shell and fail real Store errors

Pass the tag through the environment like verify-release.yml. Treat only
an allow-installation review as a successful Store publish. snap-backfill
runs verify_release.py after it rewrites SHA256SUMS.

* style(test): format snap-backfill shell-injection guard with black
2026-09-16 19:40:13 -07:00
..
2026-09-16 00:18:09 -07:00
2026-09-16 00:18:09 -07:00

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: 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)

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).