ESdemy
Full-stack - frontend, services, and infrastructure
ESdemy is a course platform built around one idea: a lesson is rarely just a video. A course here mixes video, readable documents, and quizzes in a single track a student moves through at their own pace, with livestreams and an AI study assistant alongside it.
The front end is a Vue 3 single-page app - Pinia for state, vue-router, and no UI library, so every screen is hand-built. Behind it sit ten Go services that talk to each other over gRPC and protobuf, with NGINX in front as the only door the client knocks on.
Most of the engineering effort is in the parts a user never sees: video transcoding orchestrated through Temporal, a Postgres master-slave pair load-balanced by Pg-Pool, and a cache layer that has to know what is worth caching and what is not.
Built with
Frontend
Services
Data
Edge
What went into it
- Ten services, one contract
- auth, user, course, video, livestream, chat, ai, payment, and a pair of ffmpeg workers - each with its own database, all sharing generated protobuf types rather than copied .proto files.
- Adaptive video up to 1080p
- Uploads land in SeaweedFS, then Temporal drives ffmpeg workers that produce HLS renditions, so playback adapts to the viewer's connection instead of stalling.
- NGINX does real work
- It is the reverse proxy, the rate limiter, and a selective cache - caching the endpoints that benefit and deliberately leaving the ones that must stay fresh alone.
- Documents read in the browser
- PDFs render through pdf.js and Word documents through mammoth, so course material opens in place instead of becoming a download.
- Sessions that survive
- JWT access tokens with a refresh-token rotation, enforced by middleware at the gateway so no service has to trust its caller.
Live Demo - Username: Test; Password: Test;
The real Vue 3 front end, built and running here. Sign in with the credentials above to reach the student dashboard, courses, livestreams, and cart. The ten Go services are not deployed, so the screens behind the login render their empty states rather than real course data.
Open full sizeScreens
Captured from the running dev build. The dashboards, course builder, and livestream views sit behind an authenticated session against the Go services, so what is shown here is the surface that renders standalone.
Landing page - the three content types a course is built from. Sign in - issues the access and refresh token pair. Registration, where an account picks its student or lecturer role.