The idea
Filmyuk is a YouTube-style video platform I build and run myself. Creators upload a video, it is transcoded into every quality the source can fill, from 144p up to 4K, and viewers watch it with a quality selector. I started it in 2023 to learn what a video platform has to do behind the play button.
How it works
The Go API stores the raw upload in S3-compatible storage and publishes a job to Kafka. A separate video-processor worker picks it up, makes a thumbnail, transcodes each rendition with FFmpeg, uploads them and updates the video row. It publishes progress as it goes, and the API forwards each event only to the WebSocket connections of the video's owner, so the studio shows progress live.

Playback uses HTTP range requests. The stream looks for the requested quality on local disk first, then in S3 through a presigned URL, and falls back to the default quality if that rendition is not there. If Kafka or S3 is not set up, the API transcodes in-process with the same FFmpeg code, so the whole platform also runs on one machine.

The rewrite
The first version was Express and TypeScript, with a Bull queue and Socket.IO. I rewrote the backend in Go, as a workspace with an API service, a worker and shared packages, and moved the queue to Kafka. What is still missing is on the list: a dead-letter topic for jobs that keep failing, CI, and end-to-end tests.
