Files
voculinux/web
xavierk a79f979090 fix(security): enforce https on model downloads and record reviewed findings
scripts/generate-model-checksums.py downloads the URLs that come from
remote model listings (the VOSK model-list.json and Hugging Face
responses), and urlopen would follow a file: URL there. _https() now
refuses anything but https before each request. The md5 digest is only
compared against the published listing, not used for security, so it is
marked usedforsecurity=False.

The remaining findings are false positives for this codebase, and each
gets a narrow nosemgrep on its own line with the reason:
- text_injector.py: argv lists without a shell; dictated text sits
  after "--" so it cannot be parsed as an option.
- layout_key_map.py: the KDE layout_memory.xml in the user's own session
  directory, not remote input.
- check_runtime.py: module names come from the literal tuples above.
- sync_flatpak_deps.py, verify_release.py: fixed https://pypi.org
  endpoint.
- web tests: walks this repo's own src/app tree; loopback dev-server
  probe in a test.
2026-11-06 19:29:21 +05:30
..

Voculinux website

Marketing site for voculinux.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: voculinux.com.

Manual path:

cd web
npm install
npm run deploy

That produces out/ with .nojekyll and a CNAME for voculinux.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 Voculinux project (AGPL-3.0).