Personal project
DubSub Studio
Voice AI and TTS platform for Vietnamese creators
- Role
- Full-stack developer
- Links
- dubsub.vercel.app ↗
- Stack
Overview
Clone a voice, save it as a preset, then call it by @name inside a script. DubSub turns writing dialogue into directing a cast, backed by a queue-driven pipeline across several TTS providers.
What I built
- Built and deployed a Voice AI/TTS platform for Vietnamese creators with Next.js, NestJS, PostgreSQL, Redis/BullMQ and Cloudflare R2.
- An async pipeline for credit reservation, job queuing and provider processing: VoxCPM2 on Modal/RunPod with Google TTS as fallback.
- Audio storage with idempotent, error-classified processing so retries never double-charge or double-render.
System design
Script studio in Next.js
A writing surface where saved voices are called by @name, so a creator can direct several characters in one script.
Credit reservation first
Credits are reserved before a job is queued and settled when it finishes, which keeps billing correct even when a render fails halfway.
BullMQ on Redis
NestJS pushes render jobs into BullMQ queues; workers pick them up, call the providers and report progress back.
GPU providers with fallback
VoxCPM2 runs on Modal or RunPod. When it is unavailable, jobs fall back to Google TTS instead of failing.
Idempotent storage on R2
Finished audio lands in Cloudflare R2. Processing is idempotent and errors are classified, so only retryable failures are retried.
Gallery

