System architecture

Current deployment layout and service status. Recorder state is read from the shared recordings volume.

Architecture diagram

┌─────────────┐
│   Browser   │
└──────┬──────┘
       │ http
       ▼
┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   nginx     │────▶│  Web (Next)   │────▶│  Media API  │
│   :80       │     │  :3000        │     │  :8081      │
└─────────────┘     └──────────────┘     └──────┬──────┘
                                                 │
                        ┌────────────────────────┘
                        │ RECORD_DIR (e.g. /recordings)
                        ▼
                 ┌─────────────┐     ┌─────────────────┐
                 │  Recorder   │────▶│ /dev/video0     │
                 │  :8080      │     │ /dev/snd (opt)  │
                 └──────┬──────┘     └─────────────────┘
                        │
                        ▼
                 index.json, .mp4 segments, .recorder_status.json
                 .recorder_errors.jsonl

┌─────────────────────────────────────────────────────────┐
│  AWS: CodeCommit → CodePipeline → CodeBuild → (Sonar)   │
└─────────────────────────────────────────────────────────┘

Service status

Loading…

Components

nginx — Reverse proxy on port 80; routes to Web UI and Media API.

Web (Next.js) — Frontend; talks to Media API for recordings and streams.

Media API — Serves recordings list, playback streams, stats, services, and errors.

Recorder — Captures from HDMI device (/dev/video0), optionally audio (/dev/snd); writes segments and index to RECORD_DIR.

CodePipeline — CI/CD: build, test, coverage, optional SonarQube; deploys from CodeCommit.