An ultra-lightweight, real-time voice interview summarization app. Runs 100% client-side with neural AI inference via ONNX Runtime WebAssembly β achieving <30MB model size and <50ms inference latency.
π Built for hackathon constraints: No server calls, offline-capable, real-time performance.
| Feature | Description |
|---|---|
| π€ Real-time Transcription | Web Speech API with 50ms VAD polling |
| π§ Neural Summarization | Extractive summarization via sentence embeddings |
| β‘ O(1) Incremental Updates | Only new sentences trigger inference |
| π Off-Thread Audio Processing | AudioWorklet prevents UI blocking |
| π£οΈ Context-Aware Fillers | AI-selected phrases during processing pauses |
| π± Offline Capable | Model cached in IndexedDB after first load |
| π Live Metrics | Load time, inference latency, model size display |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT-SIDE ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β β MAIN THREAD β β AUDIO THREAD β β INFERENCE WORKER ββ
β β (SvelteKit) β β (AudioWorklet) β β (ONNX/WASM + SIMD) ββ
β ββββββββ¬ββββββββ ββββββββββ¬βββββββββ ββββββββββββββββ¬ββββββββββββββββ
β β β β β
β β ββββββββββββββββββββ΄ββββββββββββββ β β
β β β VAD Processor β β β
β β β β’ RMS voice level detection β β β
β β β β’ Runs in audio render thread β β β
β β β β’ No UI blocking β β β
β β ββββββββββββββββββββββββββββββββββ β β
β β β β
β βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β INCREMENTAL SUMMARIZATION β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β 1. New sentence arrives β β β
β β β 2. Embed ONLY new sentence (single forward pass) β β β
β β β 3. Update running sum β O(1) centroid calculation β β β
β β β 4. Cosine similarity ranking (cached embeddings, no model) β β β
β β β 5. Return top-k sentences β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Model: Xenova/all-MiniLM-L6-v2 (Quantized Int8) β β
β β β’ 384-dimensional embeddings β β
β β β’ ~23MB ONNX model β β
β β β’ WASM backend with SIMD acceleration β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Optimization | Before | After | Impact |
|---|---|---|---|
| VAD Polling | 500ms | 50ms | 10x faster pause detection |
| Summarization | O(N) per call | O(k) new only | No freeze on long interviews |
| Audio Processing | Main thread | AudioWorklet | Zero UI jank |
| Filler Context | Re-embed every pause | Cached | Near-zero latency for repeats |
| Constraint | Target | Achieved | Status |
|---|---|---|---|
| Model Size | β€30MB | ~23MB | β PASS |
| Inference Latency | <50ms | <50ms | β PASS |
| Client-Side | 100% | 100%* | β PASS |
| Real-Time | Yes | Yes | β PASS |
| Offline Capable | Yes | Yes | β PASS |
*Web Speech API uses cloud STT. See Offline STT Options for true offline mode.
# Clone the repository
git clone https://github.com/KUNALSHAWW/AI_Interviewer_summarizer.git
cd AI_Interviewer_summarizer
# Install dependencies
npm install
# Start development server
npm run dev
http://localhost:5173 in Chrome/EdgeAI_Interviewer_summarizer/
βββ src/
β βββ lib/
β β βββ components/ # Svelte 5 UI components
β β β βββ InferenceProvider.svelte # ONNX worker orchestration
β β β βββ TranscriptFeed.svelte # Live transcript display
β β β βββ SummarySidebar.svelte # AI summary panel
β β β βββ ...
β β β
β β βββ workers/
β β β βββ onnx-inference.worker.ts # Incremental neural inference
β β β βββ vad-worklet.ts # Off-thread VAD (AudioWorklet)
β β β
β β βββ voice/
β β β βββ engine.ts # Speech recognition + TTS + VAD
β β β
β β βββ stores/ # Svelte reactive stores
β β βββ types/ # TypeScript definitions
β β βββ utils/ # Performance utilities
β β
β βββ routes/
β βββ +page.svelte # Main application
β
βββ scripts/
β βββ quantize_model.py # ONNX model quantization script
β
βββ static/ # Static assets
βββ CODE_REVIEW.md # Original technical review
βββ REFACTORING_SUMMARY.md # Applied fixes documentation
βββ package.json
# Run unit tests
npm test
# Watch mode
npm run test:watch
# Coverage report
npm run test:coverage
# .env (for Supabase persistence)
PUBLIC_SUPABASE_URL=your_supabase_url
PUBLIC_SUPABASE_ANON_KEY=your_anon_key
// src/lib/workers/onnx-inference.worker.ts
const MODEL_ID = 'Xenova/all-MiniLM-L6-v2'; // ~23MB, 384-dim
// Alternatives:
// 'Xenova/paraphrase-MiniLM-L3-v2' // ~17MB (smaller, less accurate)
Web Speech API uses cloud servers. For true offline mode, choose:
| Option | STT Model | Summarization | Total Size |
|---|---|---|---|
| Current | Web Speech (cloud) | Neural (~23MB) | ~23MB |
| Offline A | Vosk (~40MB) | TF-IDF (0MB) | ~40MB |
| Offline B | Whisper-tiny (~40MB) | TF-IDF (0MB) | ~40MB |
β οΈ Cannot have Neural STT + Neural Summarization under 30MB.
| Browser | Speech Recognition | WASM+SIMD | Status |
|---|---|---|---|
| Chrome 91+ | β | β | Recommended |
| Edge 91+ | β | β | Recommended |
| Firefox | β | β | No voice input |
| Safari 16.4+ | β οΈ | β | Limited STT |
# Build for production
npm run build
# Preview production build
npm run preview
npx vercel
The app is configured for static deployment via @sveltejs/adapter-static.
| Command | Description |
|---|---|
npm run dev | Start dev server |
npm run build | Production build |
npm run check | TypeScript check |
npm run lint | Lint code |
npm run format | Format with Prettier |
| Shortcut | Action |
|---|---|
Ctrl+S | Start/Stop recording |
Ctrl+P | Pause/Resume |
Ctrl+E | Generate summary |
Ctrl+Shift+C | Clear session |
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)π° CodeRabbit is enabled for automatic PR reviews!
MIT License - see LICENSE for details.
Built with β€οΈ for real-time AI inference on the edge
2 commits
1 commits
TypeScript
46.5%
Svelte
44.9%
Python
3.5%
CSS
2.4%
PLpgSQL
1.5%
An ultra-lightweight, real-time voice interview summarization app. Runs 100% client-side with neural AI inference via ONNX Runtime WebAssembly β achieving <30MB model size and <50ms inference latency.
π Built for hackathon constraints: No server calls, offline-capable, real-time performance.
| Feature | Description |
|---|---|
| π€ Real-time Transcription | Web Speech API with 50ms VAD polling |
| π§ Neural Summarization | Extractive summarization via sentence embeddings |
| β‘ O(1) Incremental Updates | Only new sentences trigger inference |
| π Off-Thread Audio Processing | AudioWorklet prevents UI blocking |
| π£οΈ Context-Aware Fillers | AI-selected phrases during processing pauses |
| π± Offline Capable | Model cached in IndexedDB after first load |
| π Live Metrics | Load time, inference latency, model size display |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT-SIDE ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β β MAIN THREAD β β AUDIO THREAD β β INFERENCE WORKER ββ
β β (SvelteKit) β β (AudioWorklet) β β (ONNX/WASM + SIMD) ββ
β ββββββββ¬ββββββββ ββββββββββ¬βββββββββ ββββββββββββββββ¬ββββββββββββββββ
β β β β β
β β ββββββββββββββββββββ΄ββββββββββββββ β β
β β β VAD Processor β β β
β β β β’ RMS voice level detection β β β
β β β β’ Runs in audio render thread β β β
β β β β’ No UI blocking β β β
β β ββββββββββββββββββββββββββββββββββ β β
β β β β
β βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β INCREMENTAL SUMMARIZATION β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β 1. New sentence arrives β β β
β β β 2. Embed ONLY new sentence (single forward pass) β β β
β β β 3. Update running sum β O(1) centroid calculation β β β
β β β 4. Cosine similarity ranking (cached embeddings, no model) β β β
β β β 5. Return top-k sentences β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Model: Xenova/all-MiniLM-L6-v2 (Quantized Int8) β β
β β β’ 384-dimensional embeddings β β
β β β’ ~23MB ONNX model β β
β β β’ WASM backend with SIMD acceleration β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Optimization | Before | After | Impact |
|---|---|---|---|
| VAD Polling | 500ms | 50ms | 10x faster pause detection |
| Summarization | O(N) per call | O(k) new only | No freeze on long interviews |
| Audio Processing | Main thread | AudioWorklet | Zero UI jank |
| Filler Context | Re-embed every pause | Cached | Near-zero latency for repeats |
| Constraint | Target | Achieved | Status |
|---|---|---|---|
| Model Size | β€30MB | ~23MB | β PASS |
| Inference Latency | <50ms | <50ms | β PASS |
| Client-Side | 100% | 100%* | β PASS |
| Real-Time | Yes | Yes | β PASS |
| Offline Capable | Yes | Yes | β PASS |
*Web Speech API uses cloud STT. See Offline STT Options for true offline mode.
# Clone the repository
git clone https://github.com/KUNALSHAWW/AI_Interviewer_summarizer.git
cd AI_Interviewer_summarizer
# Install dependencies
npm install
# Start development server
npm run dev
http://localhost:5173 in Chrome/EdgeAI_Interviewer_summarizer/
βββ src/
β βββ lib/
β β βββ components/ # Svelte 5 UI components
β β β βββ InferenceProvider.svelte # ONNX worker orchestration
β β β βββ TranscriptFeed.svelte # Live transcript display
β β β βββ SummarySidebar.svelte # AI summary panel
β β β βββ ...
β β β
β β βββ workers/
β β β βββ onnx-inference.worker.ts # Incremental neural inference
β β β βββ vad-worklet.ts # Off-thread VAD (AudioWorklet)
β β β
β β βββ voice/
β β β βββ engine.ts # Speech recognition + TTS + VAD
β β β
β β βββ stores/ # Svelte reactive stores
β β βββ types/ # TypeScript definitions
β β βββ utils/ # Performance utilities
β β
β βββ routes/
β βββ +page.svelte # Main application
β
βββ scripts/
β βββ quantize_model.py # ONNX model quantization script
β
βββ static/ # Static assets
βββ CODE_REVIEW.md # Original technical review
βββ REFACTORING_SUMMARY.md # Applied fixes documentation
βββ package.json
# Run unit tests
npm test
# Watch mode
npm run test:watch
# Coverage report
npm run test:coverage
# .env (for Supabase persistence)
PUBLIC_SUPABASE_URL=your_supabase_url
PUBLIC_SUPABASE_ANON_KEY=your_anon_key
// src/lib/workers/onnx-inference.worker.ts
const MODEL_ID = 'Xenova/all-MiniLM-L6-v2'; // ~23MB, 384-dim
// Alternatives:
// 'Xenova/paraphrase-MiniLM-L3-v2' // ~17MB (smaller, less accurate)
Web Speech API uses cloud servers. For true offline mode, choose:
| Option | STT Model | Summarization | Total Size |
|---|---|---|---|
| Current | Web Speech (cloud) | Neural (~23MB) | ~23MB |
| Offline A | Vosk (~40MB) | TF-IDF (0MB) | ~40MB |
| Offline B | Whisper-tiny (~40MB) | TF-IDF (0MB) | ~40MB |
β οΈ Cannot have Neural STT + Neural Summarization under 30MB.
| Browser | Speech Recognition | WASM+SIMD | Status |
|---|---|---|---|
| Chrome 91+ | β | β | Recommended |
| Edge 91+ | β | β | Recommended |
| Firefox | β | β | No voice input |
| Safari 16.4+ | β οΈ | β | Limited STT |
# Build for production
npm run build
# Preview production build
npm run preview
npx vercel
The app is configured for static deployment via @sveltejs/adapter-static.
| Command | Description |
|---|---|
npm run dev | Start dev server |
npm run build | Production build |
npm run check | TypeScript check |
npm run lint | Lint code |
npm run format | Format with Prettier |
| Shortcut | Action |
|---|---|
Ctrl+S | Start/Stop recording |
Ctrl+P | Pause/Resume |
Ctrl+E | Generate summary |
Ctrl+Shift+C | Clear session |
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)π° CodeRabbit is enabled for automatic PR reviews!
MIT License - see LICENSE for details.
Built with β€οΈ for real-time AI inference on the edge
2 commits
1 commits
TypeScript
46.5%
Svelte
44.9%
Python
3.5%
CSS
2.4%
PLpgSQL
1.5%