Built on the best AI stack.
skills123 is not a monolith — we orchestrate specialized tools for avatars, slides, voice, video, payments and analytics. Every vendor is vetted and listed as a sub-processor on our privacy page.
HeyGen
Avatar video
Lifelike AI tutors deliver every lesson.
Read the deep dive ↓Gamma
Slides
On-brand slide decks generated from prompts.
Read the deep dive ↓ElevenLabs
Voice
Natural multilingual text-to-speech.
Read the deep dive ↓Mux
Video delivery
Adaptive HLS streaming and captions.
Read the deep dive ↓Stripe
Billing
Subscriptions, invoicing, and tax.
Read the deep dive ↓Resend
Transactional email and broadcasts.
Read the deep dive ↓PostHog
Analytics
Consented product analytics.
Read the deep dive ↓Sentry
Observability
Error monitoring and tracing.
Read the deep dive ↓How it fits together
A single lesson flows through four of these systems: the instructor drafts a prompt, Gamma builds the deck, ElevenLabs or HeyGen voices it, HeyGen animates the avatar, and Mux serves the final video to the learner. Stripe handles access; Resend sends the certificate; PostHog and Sentry keep us honest.
HeyGen
LiveLifelike AI tutors deliver every lesson.
We use HeyGen to generate lifelike AI tutor videos from lesson scripts. Every course lesson ships with a AI tutor that delivers content in natural speech, matched to a voice profile and visual style we configure per course. This lets us produce new courses in hours rather than weeks of studio production, with none of the scheduling or re-record cost when a curriculum needs an update. For learners the benefit is consistency: the same calm, on-brand instructor across every lesson, available in multiple languages without re-casting. We pipe the final script into HeyGen's API, poll until render completes, then cache the MP4 in our own R2 bucket so playback is fast and independent of any third-party outage window. Webhook callbacks notify the generation pipeline as soon as a render finishes.
Gamma
LiveOn-brand slide decks generated from prompts.
Gamma turns a lesson outline into a polished, on-brand slide deck that the avatar presents alongside its narration. Instead of asking instructors to design visuals, we hand Gamma the structured outline — sections, bullet points, examples — and receive a ready-to-use deck that matches our theme, typography, and color palette. Instructors can still edit any slide directly in Gamma before publishing, and the edits flow back through the API on the next sync. This means visual polish scales with content volume: a course with fifty lessons gets fifty professional decks without burning designer time. For learners it means every lesson has clean, readable slides that reinforce what the avatar is saying, with embedded images, code blocks, and diagrams rendered consistently across the catalog.
ElevenLabs
LiveNatural multilingual text-to-speech.
ElevenLabs powers the voice track when we need a language HeyGen's built-in voice cloning doesn't yet cover, or when an instructor wants to record with a custom cloned voice. We generate audio from the approved lesson script, then either feed it directly to HeyGen for lip-sync or mix it over slides with captions when a full avatar render isn't required. This split lets us support more locales faster — a single English master lesson can ship in a dozen languages without re-recording — and gives brand teams control over tone and pace. ElevenLabs' emotion and pacing controls mean the narration never sounds robotic; the model handles pauses, emphasis, and numbers naturally. We cache every generated MP3 in R2 so regenerating a single slide never costs a full relisten.
Mux
LiveAdaptive HLS streaming and captions.
Mux is our video CDN and transcoder. Once a HeyGen render completes, we upload the raw MP4 to Mux and get back an HLS manifest, adaptive bitrate renditions, thumbnails, and auto-generated English captions. Learners on slow connections automatically receive a lower-bitrate stream; learners on phones get a vertical-optimized poster. Mux Data tells us which lessons have playback stalls so we can investigate source-video issues before students complain. The integration lets us keep the player lightweight — a tiny React component backed by an HLS.js core — while offloading per-title encoding, signed-URL access control, and global edge caching to infrastructure purpose-built for video. Captions are forwarded into our own VTT store so search and accessibility features work offline from Mux.
Stripe
LiveSubscriptions, invoicing, and tax.
Stripe handles every cent that moves through skills123: monthly and annual subscriptions, lifetime passes, proration when students upgrade, invoicing for enterprise accounts, and Stripe Tax for VAT and sales-tax compliance across regions. Checkout is SCA-ready and uses Stripe's hosted customer portal so learners can update their card, download invoices, or cancel without emailing us. Webhook events drive our access model — a successful payment fires an event that flips a student's `Subscription.status` to ACTIVE in our database, and a failed renewal downgrades access automatically. We also use Stripe's idempotency keys and an event-replay table so duplicate webhook deliveries never double-bill. For the business this means cleaner books, lower refund friction, and audit trails that satisfy both accountants and auditors out of the box.
Resend
LiveTransactional email and broadcasts.
Resend sends every email skills123 generates: welcome messages after signup, enrollment receipts, payment confirmations, certificate PDFs when a student finishes a course, weekly streak recaps, abandoned-cart nudges, and the newsletter broadcasts authors compose in the admin panel. We chose Resend over a self-hosted MTA because deliverability is an engineering black hole we don't want to own — they handle SPF, DKIM, DMARC alignment, warmed-up IPs, and suppression lists. Bounces and spam complaints flow back through webhooks into our `NewsletterSubscriber` model, so we automatically stop emailing anyone who marks us as spam. Templates live in our repo as typed React components, rendered server-side into HTML, so the design system stays consistent with the product UI without bouncing between tools.
PostHog
BetaConsented product analytics.
PostHog lets us see which features students actually use, where they drop off inside a lesson, and which courses drive the longest engagement streaks. Every event is tied to an opt-in consent flag — we ship with analytics off by default and only enable the SDK after a user explicitly accepts the analytics cookie category, honoring Global Privacy Control signals automatically. The data powers internal funnel dashboards (signup to first-lesson, first-lesson to quiz-passed, quiz-passed to course-complete) and drives product decisions like which onboarding friction points to remove first. Because PostHog supports self-hosting and EU-resident cloud regions, we can route EU learners through the EU instance and keep their event data on that side of the Atlantic to stay aligned with GDPR data-residency expectations.
Sentry
LiveError monitoring and tracing.
Sentry catches every runtime exception across the web app, the Next.js server, and the background workers that run AI generation jobs. Each error arrives with a full stack trace, the affected user's session context (scrubbed of PII), the release SHA, and breadcrumb logs so we can reproduce the issue without asking the student to describe it. Performance traces surface slow database queries and long-running AI calls, which is how we notice when HeyGen rendering latency creeps up before learners complain. Sentry Releases let us tie each error to the exact deploy that introduced it, so rollbacks are targeted rather than speculative. For a solo-founder LMS this replaces a full SRE team at a fraction of the cost, and it is the single tool we rely on to keep the trust level between shipping fast and shipping safe.
On the integration roadmap
- • Slack & Microsoft Teams — learner notifications
- • Notion & Google Docs — import curricula
- • Zapier & n8n — custom automations
- • SCORM 2004 export — drop into any LMS
Don't see your tool?
We prioritize integrations by demand. Tell us what you use and we'll follow up when it ships.