How Streaming Tech TV+ Was Built
A full streaming platform built by a team of 6 AI agents and 1 human. Every line of code — backend, frontend, VOD pipeline, CMS, auth — was written by Claude Code agents, deployed on Eyevinn Open Source Cloud and served through CloudFront CDN.
The Team
| Role | Agent | Model |
|---|---|---|
| Team Lead | team-lead | Claude Opus |
| Architect | architect | Claude Opus |
| UX Designer | ux-designer | Claude Opus |
| Backend Dev | backend-dev | Claude Sonnet |
| Frontend Dev | frontend-dev | Claude Sonnet |
| QA Tester | tester | Claude Sonnet |
Human: Jonas Birmé — direction, testing, deployment decisions.
By the Numbers
6 AI agents working in parallel for ~36 wall-clock hours = ~150 cumulative agent-hours of coding, testing, and debugging.
Architecture
Browser
│ ┌──────────────────────┐
├───(analytics)─────▶│ EPAS Eventsink │
│ │ (Event collector) │
│ └──────────┬───────────┘
│ │
┌───▼──────────┐ ▼
│ CloudFront │ ◀──────── ┌──────────────┐
│ CDN │ │ ClickHouse │
└───┬──────────┘ │ (Analytics) │
│ └──────────────┘
┌───▼──────────┐ /api/* ┌──────────────┐ ┌──────────┐
│ Next.js │──(proxy)──▶│ Express API │────▶│ PostgreSQL│
│ Frontend │ │ Backend │ └──────────┘
│ (Web Runner)│ │ (Web Runner)│
└──────────────┘ └──────┬───────┘
│
┌──────▼───────┐
│ MinIO │ ◀── Upload (S3)
│ (S3 storage)│
└──────┬───────┘
│
┌────────────────▼────────────────┐
│ SVT Encore → Packager │
│ (Transcode) (HLS fMP4) │
└────────────────┬────────────────┘
│
┌────────────────▼────────────────┐
│ Auto-Subtitles │
│ (Whisper speech-to-text) │
└─────────────────────────────────┘Infrastructure (OSC Services)
| Service |
|---|
| CloudFront CDN |
| Web Runner (x2) |
| PostgreSQL |
| Valkey (x2) |
| App Config Service |
| MinIO |
| SVT Encore |
| Encore Callback Listener |
| Encore Packager |
| Auto Subtitles |
| Continue Watching API |
| EPAS Eventsink |
| ClickHouse |
| EPAS Worker |
Features Delivered
Key Debugging Moments
Presigned URLs don't work in OSC
MinIO presigned URLs require direct network access. Switched to proxying uploads through the backend.
Encore needs OSC auth
API calls to SVT Encore require an OSC Service Access Token (SAT). Had to implement PAT → SAT token exchange.
Separate Valkey instances
Config service and VOD pipeline queue MUST use separate Valkey instances. Sharing causes WRONGTYPE errors.
ZADD vs LPUSH
The Encore Packager expects jobs in a sorted set (ZADD), not a list (LPUSH). Subtle but critical.
MinIO proxy dropping connections
Encore's ffmpeg reads via HTTP over minutes. The proxy dropped the connection at 32MB. Fixed by using S3 protocol directly.
OSC reverse proxy body limit
125MB video upload failed with 413. Fixed with presigned URL multipart upload — 20MB chunks go directly to MinIO.
CDN caching stale 404s
Next.js ISR cached a 404 for the homepage when the API wasn't reachable during startup. CloudFront served the stale response.
Third-party cookie blocking
CDN on plus.streamingtech.se couldn't auth with API on a different domain. Fixed with Next.js API proxy for same-origin cookies.
Built with AI + Open Source
This project demonstrates what's possible when AI agents collaborate with humans on real-world software using open source infrastructure.