v0.1.0 — first web release
NuinTalker v0.1.0
First public release of the web rewrite. Replaces the Flutter/Dart implementation (preserved at the v0-dart-archive tag).
Live site: https://ashmere.github.io/NuinTalker/
What's in this release
Tracking
- MediaPipe Tasks for Web FaceLandmarker (478 landmarks + iris) on-device
- Eye-corner-referenced iris position with One-Euro filter smoothing
- Head pitch + yaw from the facial transformation matrix as the dominant signal
- 9-point per-user affine calibration
- Dwell selector with configurable jitter tolerance, cool-down, and exit-grace
UI
- Flank-3x3 default layout: hardcoded "More" / "All Done" flank slots, paginated 9-cell centre
- Mulberry SVG symbols (CC BY-SA 4.0)
- Single ARASAAC pictogram for "stop" (CC BY-NC-SA 4.0 — see ADR 0005)
- Diagnostic HUD (
Cmd+D/Ctrl+D) - Carer-lock (
Cmd+S/Ctrl+S, or four-corner long-press) - Vocabulary tailored for tube-fed users (single "hunger" cell)
- Sentence bar with horizontal scroll keeps a stable height
Architecture
- Vite 7 + React 19 + TypeScript 6 strict
- Zustand stores, Tailwind v4, Web Speech API, idb-keyval, vite-plugin-pwa
- 106 Vitest units, Playwright e2e dwell-to-speak
Browser support
- Chrome / Edge: first-class
- Firefox: best-effort
- Safari: not supported (Web Speech voice quality,
getUserMediaconstraints)
Privacy
All face landmarking, gaze inference, dwell timing, TTS, and persistence happen in the browser on your device. No video, audio, transcript, gaze trace, or usage event leaves the device.
What this release does not do yet
- Open Board Format (OBF) import — drafted in
specs/002-obf-import, implementation comes next - Multi-profile UI (one profile per browser today)
- Word prediction
- Non-English voices beyond what Web Speech ships
Licence note
Shipping the ARASAAC stop.png symbol restricts the project to non-commercial use under CC BY-NC-SA 4.0. To enable a commercial path, replace that one file (the rest of the symbol set is Mulberry CC BY-SA 4.0). See NOTICE.