Web App
Client (Flutter)
Options — pick one
Section titled “Options — pick one”Nothing to install — runs in any modern browser (desktop or mobile).
- Start your server (Docker / binary / cargo)
- Open Web App —
https://lutgaru.github.io/Sinsajo/app/ - Settings → set Server IP (e.g.
192.168.1.100:8765) → tap mic → speak
The Web App on GitHub Pages is built from sinsajo_client via:
flutter build web --release --base-href /Sinsajo/app/In CI it is merged into docs-site/dist/app/ for a single Pages deploy. Preview locally:
cd docs-site && npm run build# PowerShell: Copy-Item -Recurse -Force ../sinsajo_client/build/web/* dist/app/# Bash: cp -r ../sinsajo_client/build/web/* dist/app/For Android phones/tablets — distribute via link or QR without recompiling.
Install:
- Download
app-release.apkfrom client-latest - Enable Install unknown apps on Android → install → open → Settings → set server IP
Build yourself (optional):
cd sinsajo_clientflutter pub getflutter build apk --releaseBuilt automatically on every client/v* tag via GitHub Actions. Do not commit APKs to git — link to the Release or generate a QR.
Minimum: Android device meeting Flutter 3.x requirements.
For any platform meeting client requirements (Flutter 3.x): Android, iOS, Linux, macOS, Windows, Web.
git clone https://github.com/lutgaru/Sinsajo.gitcd Sinsajo/sinsajo_clientflutter pub getflutter run # runs on connected device/emulator/desktop# or target a platform:flutter build apk --releaseflutter build ios --releaseflutter build linux --releaseflutter build web --release --base-href /Sinsajo/app/Configure the default server URL in code (overridden in Settings UI):
const String kWsUrl = 'ws://192.168.1.100:8765';Other in-app Settings: microphone gain, audio source, save_audio + format wav/ogg, target_language (enabled per model_info.languages from server).
Voice Activity Detection
Section titled “Voice Activity Detection”In lib/services/audio_service.dart:
await _vadHandler.startListening( model: 'v5', frameSamples: 512, positiveSpeechThreshold: 0.5, negativeSpeechThreshold: 0.35, redemptionFrames: 8, preSpeechPadFrames: 1, minSpeechFrames: 3,);Tuning:
- Lower
positiveSpeechThresholdto0.3for quiet voices - Lower
negativeSpeechThresholdto0.2to keep segments longer - Increase
redemptionFramesto12to avoid cutting pauses - Package:
vad(pub.dev) — Silero VAD v5 via ONNX Runtime
State & Protocol
Section titled “State & Protocol”Riverpod 2.x manages WebSocket lifecycle and transcription state. Check transcription_provider.dart for transcription, partial, final and model_info handlers. See Protocol for the full WebSocket spec.
Choosing quickly
Section titled “Choosing quickly”APK
From source