The problem
Preparing subtitles involves more than transcription. A useful workflow also needs editing and export formats that fit different publishing tools.
My contribution
I designed and implemented the full-stack solution: the user interface, API, video-processing logic and the deployment pipeline. The project brings these responsibilities together in one product.
Implementation scope
The web interface is built with Next.js and the API with Fastify, on PostgreSQL through Prisma. BullMQ queues the background work, FFmpeg burns subtitles into video and Stripe handles billing. The stack reflects a workflow that includes processing work beyond a simple page request.
Transcription pipeline
The transcription provider is a field on the queued job. A self-hosted Whisper worker is the default, with Deepgram and Gladia available as alternative providers, and Gladia also handling subtitle translation. Each provider has its own worker module.
Testing and delivery
GitHub Actions runs web lint, API and web typechecks, API tests, a production build and Playwright end-to-end tests, backed by 41 Vitest and 12 Playwright spec files. The VPS deployment waits for CI to pass on the same commit.
Delivered functionality
The released service supports generating and editing subtitles, plus SRT, VTT and burned-in video exports. The image below shows the public product landing page; the live site provides the product entry point.
