How we built skills123 on Next.js 15 and HeyGen
A tour through our stack: App Router, Prisma on Postgres, HeyGen for avatars, Gamma for slides, and why we chose DigitalOcean over the usual suspects.
We wanted a stack that was boring in the right places and novel where it mattered. Next.js 15 gave us a modern rendering model without reinventing the wheel — App Router, server actions, and streaming felt like the path forward for a content-heavy platform that also needs interactivity.
For avatars we evaluated four vendors over six weeks. HeyGen won on three axes: rendering latency (sub-two-minute for a five-minute lesson), voice quality that holds up on cheap laptop speakers, and an API we could script dynamically at runtime. The ability to pass a generated transcript and get back a finished video is the core unlock of our pipeline.
Slides come from Gamma. Their API lets us template brand styles, feed in a markdown outline, and export embeddable HTML — all via a short script. We never round-trip through PowerPoint or Keynote. The turn-around from Claude outline to published deck is under four minutes.
"Choosing boring infrastructure in the right places let us spend our novelty budget on the AI pipeline — where it actually compounds into product value."
— Praveen L.
The database is Postgres via Prisma. We picked Prisma because the migration story is sane, the type-safety end-to-end is genuine, and the ORM layer doesn't fight you when you need raw SQL for analytics queries. Our schema is 27 models; Prisma makes refactoring feel safe.
Key Insight
The database is Postgres via Prisma. We picked Prisma because the migration story is sane, the type-safety end-to-end is genuine, and the ORM layer doesn't fight you when you need raw SQL for analytics queries. Our schema is 27 models; Prisma makes refactoring feel safe.
DigitalOcean hosts everything on two droplets and a managed Postgres instance. It's not glamorous. The combined monthly bill would barely cover a round of drinks at a San Francisco bar. We're not opposed to AWS eventually — but every dollar we don't spend on DevOps overhead goes into the AI budget, and that compounds faster.
The biggest architectural lesson: resist the urge to over-engineer the infrastructure. The work that creates unique value is the AI pipeline — the prompt engineering, the branching logic, the assessment generation. That's where we invest our complexity budget.
If you're curious about specific implementation details — how we handle webhook retries, our Inngest job architecture, or the Mux video encoding pipeline — drop us a line at the engineering blog email. We're planning a deep-dive series starting next month.
Ready to start learning on skills123?
Free to sign up — explore sample lessons before you subscribe.