Category · Workflow
Typie
A two-service workflow that uploads audio to Google Drive, takes payment through Stripe, transcribes with OpenAI Whisper, and returns an editable timestamped transcript.
Web app + API repository · Processing service repository · Architecture
Status: Both repositories require access. The former live sites are unavailable, and no separate API or architecture site is published.
System architecture
flowchart LR
U[React app and editor] --> E[Express API]
U --> G[Google Drive]
E --> S[Stripe]
E --> M[(MongoDB)]
S --> P[FastAPI processor]
P --> Q[Single-job queue]
Q --> G
Q --> A[FFmpeg audio chunks]
A --> W[OpenAI Whisper]
W --> M
U -->|Poll, edit, export| E
Data flow
- The user signs in with Google and uploads audio directly to Drive.
- Express checks the file, calculates the price, and creates a Stripe payment.
- A successful payment starts the FastAPI worker, which downloads, converts, splits, and transcribes the audio.
- Timestamped text is saved to MongoDB, then the client loads it for editing and TXT, Markdown, or HTML export.
Engineering highlights and trade-offs
- Direct Drive uploads: Large files skip the application server, reducing server storage needs but depending on valid Google access tokens.
- Audio processing: FFmpeg normalizes files and long recordings are split before sending smaller chunks to Whisper.
- Safe retries: A unique payment ID prevents the same job from being transcribed twice.
- Editable output: Transcripts are stored as structured editor data, enabling timestamp playback, autosave, and multiple export formats.
- Queue trade-off: The simple in-memory queue handles one job at a time and is not durable if the processor restarts.
Supported input size
The transcription workflow accepts audio files up to 250 MB and three hours long.
Testing, observability, and security
- Testing: No working automated tests or coverage reports are tracked.
- Observability: The processor writes per-job logs, reports queue state, records stage errors, and cleans temporary files. Central monitoring is not configured.
- Security: OAuth tokens are encrypted and Stripe webhooks are verified. Committed Google credential files should be revoked, rotated, and removed from history. The app also needs stronger cookie settings, rate limiting, and protection for processor admin routes.