VOD Docs

Local development

How the local stack is put together and the day-to-day development loop.

Setup steps are in Getting started. This page explains how the local environment works.

Architecture diagram · placeholder
Local dev topology: pnpm dev (frontend :3000) + Docker stack behind Caddy (:80) + dev tools

Show which ports you open in the browser and which are container-internal.

What runs where

ProcessHowPort
Frontendpnpm dev in app/ (on your machine, not in Docker)3000
Docs sitemake docs (on your machine)3001
CaddyDocker80
APIDocker, source mounted, auto-reload8000 (use Caddy on 80 instead)
WorkerDocker, concurrency 3—
PostgreSQLDocker5432
RedisDocker6379
MinIODocker9000 (API), 9001 (console)
tusdDockervia Caddy /files
pgAdminDocker5050
FlowerDocker5555
RedisInsightDocker5540

The edit loop

You changeTo see it
Frontend codeNothing: Next.js hot-reloads
API code (backend/app/apis, services, …)Nothing: the API container mounts backend/ with uvicorn --reload
Celery task code (backend/app/tasks)make build: the worker runs the code baked into its image
requirements.txtmake build
A modelWrite an Alembic migration, then alembic upgrade head in make shell
infra/local.envmake restart

Debugging tools

ToolUse it for
Swagger at http://localhost/docsCalling API endpoints by hand
Flower at http://localhost:5555Watching Celery tasks: state, arguments, retries, errors
pgAdmin at http://localhost:5050Inspecting tables (for example processing_status of recent videos)
RedisInsight at http://localhost:5540Inspecting the processing lock and admission keys
MinIO console at http://localhost:9001Browsing buckets and HLS output
make logs s=workerFollowing the pipeline, including [queue] lines

Useful queries

-- Recent videos and where they are in the pipeline
SELECT id, title, processing_status, processing_error, created_at
FROM videos ORDER BY created_at DESC LIMIT 10;

Common problems

On this page