How manoj2883/vireo works
Vireo is a browser-based speaking-practice coach. The user chooses a situation, warms up, speaks while live transcription and on-device speech/camera analysis provide cues, then reviews field notes, retakes, and compares progress. The browser stores sessions and stories locally; the server issues transcription tokens and generates evidence-checked notes and tightened answers. README documents the overall flow; some internal links are supported only by imports or references in the source index, so unsampled details are not expanded.
Main entry points: LiveSessionEngine.ts Session engine · app.js HTTP API · FieldNotesPage.tsx Field notes screen · WarmUpPage.tsx Situation warm-up
Components 26
Practice experience
- App routes
src/routes.tsx - Situation warm-up
src/pages/WarmUpPage.tsx - Practice situations
src/session/situations.ts - Live session screen
src/pages/LivePage.tsx
Live analysis
- Session engine
src/live/LiveSessionEngine.ts - Speech metrics
src/live/metrics - Pitch tracking
src/audio/pitch/PitchTracker.ts - Camera analysis
src/vision/cameraTracker.ts - Sonogram display
src/components/sonogram/Sonogram.tsx - Deepgram transcription
src/live/deepgramLiveClient.ts
Review and history
- Local session store
src/storage/localDb.ts - Story Bank
src/pages/StoriesPage.tsx - Field notes screen
src/pages/FieldNotesPage.tsx - Field notes client
src/session/fieldNotesApi.ts - Tighten client
src/session/tightenApi.ts - Retake comparison
src/components/notes/BeforeAfter.tsx - Share and reports
src/components/notes/TakeItWithYou.tsx
Server services
- HTTP API
server/app.js - Token grants
server/stt.js - Notes generation
server/llm/index.js - Evidence checking
server/llm/evidence.js - LLM providers
server/llm/providers
Other components
- Speaker
- Microphone
- Camera
- Upstash Redis
Connections 29
- Speaker → App routes: uses
- App routes → Situation warm-up: routes to
src/routes.tsx - Situation warm-up → Practice situations: offers
src/session/situations.ts - Situation warm-up → Live session screen: starts practice
- Microphone → Session engine: captures speech
- Camera → Camera analysis: provides frames
- Live session screen → Session engine: runs
src/live/LiveSessionEngine.ts - Session engine → Speech metrics: computes
src/live/LiveSessionEngine.ts - Session engine → Pitch tracking: uses
src/live/LiveSessionEngine.ts - Session engine → Camera analysis: starts analysis
src/live/LiveSessionEngine.ts - Session engine → Deepgram transcription: transcribes via
src/live/LiveSessionEngine.ts - Deepgram transcription → HTTP API: requests token
- Session engine → Sonogram display: feeds live display
- Session engine → Local session store: stores sessions
src/storage/localDb.ts - Situation warm-up → Local session store: loads practice data
src/pages/WarmUpPage.tsx - App routes → Field notes screen: routes to
src/routes.tsx - Field notes screen → Field notes client: requests notes
src/pages/FieldNotesPage.tsx - Field notes screen → Tighten client: requests rewrite
src/pages/FieldNotesPage.tsx - Field notes screen → Local session store: updates session
src/pages/FieldNotesPage.tsx - Field notes screen → Retake comparison: shows retakes
src/pages/FieldNotesPage.tsx - Field notes screen → Share and reports: offers export
src/pages/FieldNotesPage.tsx - Story Bank → Local session store: reads stories
- Field notes client → HTTP API: posts transcript
- Tighten client → HTTP API: posts transcript
server/app.js - HTTP API → Token grants: grants token
server/app.js - HTTP API → Notes generation: requests generation
server/app.js - Notes generation → LLM providers: dispatches to
server/llm/index.js - HTTP API → Evidence checking: verifies notes
server/app.js - HTTP API → Upstash Redis: limits usage