How manish-qw/meet-scribe works
1. System shape
- Meet Scribe is a two-tier app: a React/Vite frontend and a FastAPI backend.
- The backend is not just an API; it also owns the meeting bot runtime, real-time transcript streaming, and AI summarization pipeline.
2. Frontend boundary
- frontend/src is the presentation layer: landing/login/dashboard/meeting pages plus reusable UI components.
- src/lib/api.ts is the HTTP client boundary to the backend.
- src/hooks/useMeetingSocket.ts is the real-time boundary for live meeting updates.
- src/lib/firebase.ts and useAuth.ts show the frontend relies on Firebase Auth for user identity/session state.
3. User-facing flows
- The main user path is: sign in → submit a Google Meet link → monitor live transcript/status → view summary/dashboard history.
- ProtectedRoute.tsx indicates authenticated access gates around dashboard/meeting views.
- DashboardPage, MeetingPage, and LandingPage reflect a split between marketing, authenticated workspace, and live session UI.
4. Backend API layer
- backend/app/api/routes/auth.py and meetings.py expose the HTTP endpoints.
- This layer likely handles login/token validation, meeting creation/history lookup, and returning persisted meeting artifacts.
- backend/app/core/dependencies.py and config.py centralize request-scoped wiring and environment-driven configuration.
5. Real-time event path
- backend/app/api/websocket/manager.py and events.py implement the WebSocket channel used for low-latency transcript/status delivery.
- Data flow is backend-push rather than polling: the frontend subscribes, and the backend streams updates as the bot captures them.
- This is the key live-telemetry boundary in the architecture.
6. Bot execution subsystem
- backend/app/bot/browser.py and meet_bot.py are the autonomous meeting worker.
- It uses Playwright + headless Chromium to join Google Meet and capture captions/transcript content.
- This subsystem is isolated from the API process logic, which is important for reliability and resource control.
7. Process management and cleanup
- backend/app/core/process_pool.py suggests bot work is dispatched into separate processes rather than running inline with HTTP handlers.
- zombie_reaper.py indicates the backend actively cleans up orphaned worker/bot processes.
- This separation prevents long-running meeting joins from blocking API responsiveness.
8. Transcript and synthesis pipeline
- backend/app/bot/transcript.py likely normalizes raw caption stream into usable transcript chunks.
- backend/app/services/gemini.py is the AI synthesis layer, producing summaries, action items, and key takeaways after or during the meeting.
- The architecture is therefore: capture text → stream live → finalize into structured AI output.
9. Persistence and external services
- firebase_service.py points to Firebase/Firestore as the primary metadata and user-data backend.
- firebase_storage.py and s3_storage.py indicate artifact storage is abstracted behind service adapters, likely for transcripts/exports or media-like assets.
- External dependencies that materially affect the architecture are Firebase Auth, Firestore, Google Gemini, and Google Meet.
10. Deployment topology
- The repo is containerized with docker-compose.yml and separate Dockerfiles for backend and frontend.
- The frontend also has an Nginx config, implying production builds are served as static assets behind a web server.
- Environment-specific files (frontend/.firebaserc, firebase.json, backend env/config patterns) show the app is designed for Firebase-hosted frontend plus containerized backend services.
11. What to draw in an architecture diagram
- Show four major zones: browser UI, FastAPI API/WebSocket layer, bot worker process, and external services.
- Draw the main data path from frontend → API → bot worker → transcript stream → WebSocket → frontend, then API/bot → Gemini → Firestore/storage for persistence.
- Treat the bot worker as a distinct runtime boundary, not just a function call inside the API.
Main entry points: meetings.py Meeting routes · meet_bot.py Bot worker · DashboardPage.tsx Dashboard · MeetingPage.tsx Meeting
Components 27
Frontend
React/Vite browser app and UI state boundaries
- Landing · Marketing and entry page
frontend/src/pages/LandingPage.tsx - Login · Firebase-backed sign-in flow
frontend/src/pages/LoginPage.tsx - Dashboard · Authenticated meeting history and overview
frontend/src/pages/DashboardPage.tsx - Meeting · Live meeting session view
frontend/src/pages/MeetingPage.tsx - Protected route · Authenticated access boundary
frontend/src/components/layout/ProtectedRoute.tsx - Meeting input · Submit Google Meet link
frontend/src/components/meeting/MeetingInput.tsx - Live status · Transcript and status display
frontend/src/components/meeting/LiveStatusCard.tsx - Summary card · Meeting summary display
frontend/src/components/meeting/SummaryCard.tsx - API client · Frontend boundary to backend routes
frontend/src/lib/api.ts - Meeting socket · WebSocket subscription for live updates
frontend/src/hooks/useMeetingSocket.ts - Auth hook · Frontend auth/session state management
frontend/src/hooks/useAuth.ts
Backend
FastAPI API, websocket, bot runtime, and services
- Auth routes · Backend authentication and token validation endpoints
backend/app/api/routes/auth.py - Meeting routes · Backend meeting creation and history endpoints
backend/app/api/routes/meetings.py - WS manager · Connection lifecycle and broadcast management
backend/app/api/websocket/manager.py - WS events · Transcript and status event definitions
backend/app/api/websocket/events.py - Process pool · Runs bot work out of process
backend/app/core/process_pool.py - Bot worker · Joins meetings and captures captions
backend/app/bot/meet_bot.py - Browser runner · Headless Chromium / Playwright meeting session
backend/app/bot/browser.py - Transcript parser · Normalizes raw captions into transcript chunks
backend/app/bot/transcript.py - Gemini service · Generates summaries and action items
backend/app/services/gemini.py - Firebase service · Firestore-backed metadata and user data access
backend/app/services/firebase_service.py - Artifact storage · Firebase Storage and S3 persistence layer
backend/app/services/firebase_storage.py
External Services
Identity, AI, storage, and meeting platform dependencies
- Firebase Auth · User authentication and session identity
- Firestore · Persistent meeting and user records
- Google Meet · Target meeting environment joined by bot
- Gemini API · External model backend for synthesis
- S3 · Optional artifact storage backend
Connections 27
- Landing → Login: sign in · Entry into authenticated flow
- Login → Auth hook: session · Loads and tracks user identity
- Auth hook → Firebase Auth: auth · Uses Firebase for identity/session state
- Meeting input → API client: create meeting · Sends Meet link and request payload
- API client → Meeting routes: HTTP · Backend meeting API call
- API client → Auth routes: HTTP · Token validation and auth-related calls
- Protected route → Dashboard: gate · Authenticated access to workspace
- Protected route → Meeting: gate · Authenticated access to live session
- Dashboard → Meeting input: start meeting · User submits a meeting link
- Meeting → Meeting socket: subscribe · Receives live transcript and status
- Meeting socket → WS manager: WS · Connects to backend websocket channel
- WS manager → WS events: emit · Broadcasts structured live events
- Meeting routes → Process pool: dispatch · Launches meeting bot work asynchronously
- Process pool → Bot worker: spawn · Isolates long-running bot execution
- Bot worker → Browser runner: join · Uses headless browser to enter meeting
- Browser runner → Google Meet: connect · Joins Google Meet session
- Bot worker → Transcript parser: capture · Parses live captions into chunks
- Transcript parser → WS manager: stream · Sends live transcript/status updates
- Bot worker → Gemini service: summarize · Generates meeting summary output
- Gemini service → Gemini API: llm · External synthesis service
- Gemini service → Meeting routes: result · Returns structured summary artifacts
- Meeting routes → Firebase service: persist · Stores meeting metadata and outcomes
- Firebase service → Firestore: read/write · Primary metadata persistence
- Meeting routes → Artifact storage: artifacts · Stores exports and generated files
- Artifact storage → S3: object store · Optional artifact backend
- Dashboard → Summary card: view summary · Displays meeting synthesis
- Meeting → Live status: view live · Displays live transcript/status