Remote Production

architecture Architecture Dashboard

Remote Production Solution Landscape

Application Cooperation Viewpoint

Explore how our systems interact through APIs, share data, and collaborate to deliver media production workflows. Diagrams use EBU Core terminology for media artifacts.

dashboard Primary Frontend: Nexus Operations Dashboard

The Nexus Operations Dashboard (/nexus/) is the primary front-end interface consuming all Worker APIs through browser-based JavaScript. It provides operators with real-time monitoring, job submission, and system control capabilities via authenticated REST and WebSocket connections. This represents the Frontend Client Pattern documented in our Integration Patterns.

hub System Integration Overview

Note: The Nexus Dashboard (highlighted in the User Interfaces section) acts as the primary browser-based client, consuming APIs from Resource Dispatcher and Process Conductor to provide a unified operational interface.

graph LR
    subgraph Users["👥 User Interfaces"]
        NexusUI["⭐ Nexus Dashboard
PRIMARY API CONSUMER
Operations Portal"] ArchUI[Architecture Dashboard
Documentation Portal] OpUI[Operator Dashboard
Resource Dispatcher UI] AdminUI[Admin Interface
Configuration Portal] end subgraph Applications["🎯 Application Services"] PC[Process Conductor
Decision Engine] JO[Resource Dispatcher
Execution Platform] end subgraph Storage["💾 Storage Layer"] SharedStorage[Shared Storage
Media Essence & Metadata] CFKV[Cloudflare KV
Cache & State] CFD1[Cloudflare D1
Job History] end subgraph Compute["⚙️ Execution Layer"] Proc01[proc-01] Proc02[proc-02] Proc03[proc-03] Proc04[proc-04] end subgraph External["🌐 External Services"] CFAccess[Cloudflare Access
SSO Authentication] Slack[Slack
Notifications] GitHub[GitHub API
Repository Data] end %% User authentication NexusUI -->|SSO Auth| CFAccess ArchUI -->|SSO Auth| CFAccess OpUI -->|SSO Auth| CFAccess AdminUI -->|SSO Auth| CFAccess %% User interactions NexusUI -->|Monitor & Control| JO NexusUI -->|View Processes| PC OpUI -->|Manual Job Submit| JO AdminUI -->|Configure Jobs| PC %% Dashboard data access ArchUI -->|Fetch Docs| GitHub NexusUI -->|Real-time Updates| JO %% Service-to-Service API calls PC -->|POST /api/jobs/submit| JO PC -->|GET /api/capacity| JO JO -->|WebSocket Updates| PC JO -->|WebSocket Updates| NexusUI %% Job execution JO -->|SSH Execute| Proc01 JO -->|SSH Execute| Proc02 JO -->|SSH Execute| Proc03 JO -->|SSH Execute| Proc04 %% Storage access Proc01 <-->|Read/Write Essence| SharedStorage Proc02 <-->|Read/Write Essence| SharedStorage Proc03 <-->|Read/Write Essence| SharedStorage Proc04 <-->|Read/Write Essence| SharedStorage %% Application data persistence JO -->|Job State| CFD1 JO -->|Capacity Cache| CFKV PC -->|Decision Cache| CFKV ArchUI -->|Repo Metadata| CFKV %% External integrations JO -->|Job Events| Slack %% Styling classDef ui fill:#e3f2fd,stroke:#1976d2,stroke-width:2px classDef primaryUI fill:#1976d2,stroke:#0d47a1,stroke-width:4px,color:#fff classDef app fill:#1976d2,stroke:#0d47a1,stroke-width:2px,color:#fff classDef storage fill:#fff3e0,stroke:#f57c00,stroke-width:2px classDef compute fill:#ff6f00,stroke:#e65100,stroke-width:2px,color:#fff classDef external fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px class NexusUI primaryUI class ArchUI,OpUI,AdminUI ui class PC,JO app class SharedStorage,CFKV,CFD1 storage class Proc01,Proc02,Proc03,Proc04 compute class CFAccess,Slack,GitHub external

api API Integration Patterns

verified Authoritative Specification - This sequence diagram serves as the single source of truth for API contracts and integration behavior

Primary API Consumer: The Nexus Operations Dashboard (/nexus/) serves as the primary front-end interface for all API interactions, providing operators with real-time monitoring and control capabilities. See Nexus Dashboard Integration section below for detailed UI patterns.

Full Documentation: For comprehensive integration patterns including Frontend Client Pattern, Service Client Pattern, and best practices, see Integration Patterns Documentation.

sequenceDiagram
    participant PC as Process Conductor
    participant JO as Resource Dispatcher
    participant Proc as Proc Node
    participant Storage as Shared Storage
    participant Slack as Slack

    Note over PC: Every 5 minutes:
Job Election Process PC->>JO: GET /api/capacity JO-->>PC: { availableSlots: 2, nodes: [...] } PC->>PC: Evaluate DMN Rules
Priority, Frequency, Time Windows PC->>JO: POST /api/jobs/submit
{ jobType: "rclone", source, destination } alt Capacity Available JO->>JO: Select proc node JO->>Proc: SSH: rclone copy ... JO-->>PC: 201 Created { jobId, node, status } Proc->>Storage: Read media essence (source) Proc->>Storage: Write media essence (destination) Proc-->>JO: Progress updates (%, bytes, ETA) JO->>Slack: Job Started notification JO->>JO: Update D1 job history Proc-->>JO: Job completed JO->>Slack: Job Completed notification JO-->>PC: WebSocket: Job completed event else No Capacity JO-->>PC: 429 Too Many Requests
{ reason: "No available slots" } PC->>PC: Skip this election cycle end

Key Integration Points

  • Process Conductor → Resource Dispatcher: RESTful API for capacity checks and job submission
  • Resource Dispatcher → Proc Nodes: SSH-based command execution with real-time output streaming
  • Proc Nodes → Storage: Direct file system access to shared Ceph/ZFS storage (NFS/SMB mounts)
  • Resource Dispatcher → Slack: Webhook notifications for job lifecycle events
  • WebSocket Updates: Real-time job status propagation to Process Conductor and UI clients

dashboard Nexus Operations Dashboard Integration

verified Primary Frontend Client Pattern - Production-ready browser-based UI serving as the main API consumer for operators and administrators
sequenceDiagram
    participant Operator as 👤 Operator
    participant Nexus as Nexus Dashboard
(DaisyUI/Tailwind) participant CFAccess as Cloudflare Access
(SSO) participant JOWorker as Resource Dispatcher
(Worker API) participant ProcNode as Proc Node participant Slack as Slack Note over Operator,CFAccess: Authentication Flow Operator->>Nexus: Access /nexus/ Nexus->>CFAccess: Validate session CFAccess-->>Nexus: JWT token (user@remoteproduction.no) Nexus-->>Operator: Render dashboard Note over Operator,JOWorker: Job Submission via Nexus UI Operator->>Nexus: Submit file transfer job
(Source, Destination, Priority) Nexus->>JOWorker: POST /api/jobs/submit
Authorization: Bearer [JWT] JOWorker->>JOWorker: Validate JWT
Check user permissions alt Authorized & Capacity Available JOWorker->>ProcNode: SSH: rclone copy ... JOWorker-->>Nexus: 201 Created {jobId, status} Nexus-->>Operator: Show "Job Started" notification JOWorker->>Slack: Post job started event Note over Nexus,JOWorker: Real-time Updates via WebSocket JOWorker->>Nexus: WebSocket: Progress update
{jobId, progress: 45%, bytesTransferred} Nexus-->>Operator: Update progress bar ProcNode-->>JOWorker: Job completed JOWorker->>Nexus: WebSocket: Job completed JOWorker->>Slack: Post completion notification Nexus-->>Operator: Show "Job Completed" banner else No Capacity JOWorker-->>Nexus: 429 Too Many Requests Nexus-->>Operator: Show "All nodes busy" message else Unauthorized JOWorker-->>Nexus: 403 Forbidden Nexus-->>Operator: Show "Insufficient permissions" end Note over Operator,Nexus: Node Monitoring Operator->>Nexus: View node status page Nexus->>JOWorker: GET /api/nodes/status JOWorker-->>Nexus: {nodes: [{id, cpu, memory, jobs}]} Nexus-->>Operator: Render node cards with health indicators

Nexus Dashboard Architecture

Purpose: Nexus is the primary operational interface for Remote Production, providing real-time monitoring and control of the Resource Dispatcher and Process Conductor systems.

Key Features

  • Conductor Overview: High-level dashboard showing active processes, decision metrics, and system health
  • Resource Dispatcher Management:
    • File Transfer: Node status, running jobs, configuration
    • Media Conversion: Transcode job monitoring and setup
    • Media Indexing: Analysis job tracking
  • Real-time Updates: WebSocket connections for live progress tracking and node health monitoring
  • Access Control: Authenticated via Cloudflare Access with remoteproduction.no SSO

Technology Stack

  • Frontend: DaisyUI 5 + Tailwind CSS 4 (custom "remoteproduction" theme)
  • Typography: Montserrat (headings) + Ubuntu (body text)
  • Components: DataTables, ApexCharts, Flatpickr for rich UI interactions
  • Deployment: Cloudflare Pages at /nexus/ path
  • Features: Dark mode support, fully responsive, 60+ pre-built pages

Dual-Dashboard Architecture Pattern

architecture

Architecture Dashboard

Audience: All employees, architects, developers

Purpose: Documentation & Understanding

Content:

  • System diagrams (Mermaid.js)
  • Integration patterns
  • Architecture decisions (ADRs)
  • Repository metadata from GitHub

Access: architecture.remoteproduction.io/

dashboard

Nexus Dashboard

Audience: Operators, administrators, L2 support

Purpose: Operations & Control

Content:

  • Real-time job monitoring
  • Node health & capacity
  • Job submission forms
  • Configuration management

Access: architecture.remoteproduction.io/nexus/

Design Principle: Separation of concerns - the Architecture Dashboard explains how the system works, while Nexus enables operators to actually work with the system.

movie Media Artifact Flows (EBU Core Model)

graph TB
    subgraph Sources["📥 Source Repositories"]
        SourceA[Source A
Camera Ingest] SourceB[Source B
MAM System] SourceC[Source C
Archive] end subgraph Processing["⚙️ Processing Pipeline"] Ingest[Ingest Job
rclone copy] Transform[Transform Job
ffmpeg transcode] Analyze[Analysis Job
mediainfo extract] end subgraph Storage["💾 Shared Storage - Media Assets"] Essence[Media Essence
Video/Audio Files
MXF, MP4, ProRes] Metadata[Technical Metadata
JSON/XML Sidecar
EBUCore, BMX] Thumbnails[Proxy & Thumbnails
Low-res Preview Files] end subgraph Destinations["📤 Target Systems"] DestA[Destination A
Playout Server] DestB[Destination B
Cloud Archive] DestC[Destination C
Distribution CDN] end %% Ingest flows SourceA -->|Original Essence| Ingest SourceB -->|With EBUCore XML| Ingest SourceC -->|Archived Assets| Ingest Ingest -->|Store Essence| Essence Ingest -->|Extract Metadata| Metadata %% Processing flows Essence -->|Read for Transcode| Transform Transform -->|Write Derivatives| Essence Transform -->|Update Metadata| Metadata Essence -->|Read for Analysis| Analyze Analyze -->|Write Tech Metadata| Metadata Analyze -->|Generate Thumbnails| Thumbnails %% Distribution flows Essence -->|Deliver Essence| DestA Metadata -->|Deliver Metadata| DestA Essence -->|Archive Essence| DestB Metadata -->|Archive Metadata| DestB Essence -->|CDN Distribution| DestC Thumbnails -->|CDN Previews| DestC %% Styling classDef source fill:#e8f5e9,stroke:#388e3c,stroke-width:2px classDef process fill:#ff6f00,stroke:#e65100,stroke-width:2px,color:#fff classDef storage fill:#fff3e0,stroke:#f57c00,stroke-width:2px classDef dest fill:#e1f5fe,stroke:#0277bd,stroke-width:2px class SourceA,SourceB,SourceC source class Ingest,Transform,Analyze process class Essence,Metadata,Thumbnails storage class DestA,DestB,DestC dest

EBU Core Terminology

  • Essence: The actual media content (video, audio, data) - the "substance" of the media asset
  • Technical Metadata: Information describing the essence (codec, resolution, bitrate, duration, etc.)
  • Sidecar Files: Metadata stored alongside essence in separate files (JSON, XML, EBUCore XML)
  • Derivatives: Transcoded versions of the original essence (proxies, mezzanines, distribution formats)
  • BMX (Broadcast Media eXchange): MXF wrapper format for professional media files

storage Data Storage & Access Patterns

folder_shared

Shared Storage (Proxmox)

Technology: Ceph / ZFS storage cluster

Access Pattern: NFS/SMB mounts on proc nodes

Data Types:

  • Media essence (video/audio files)
  • Technical metadata (JSON/XML sidecars)
  • Thumbnails and proxy files

Consumers: All proc nodes (proc-01 to proc-04)

data_object

Cloudflare D1 (SQL)

Technology: SQLite-based distributed database

Access Pattern: SQL queries from Workers

Data Types:

  • Job execution history
  • Job configurations
  • Audit logs and timestamps

Consumers: Resource Dispatcher Worker

key

Cloudflare KV (Key-Value)

Technology: Eventually-consistent global KV store

Access Pattern: Get/Put with TTL-based expiration

Data Types:

  • Capacity snapshots (5-min cache)
  • Repository metadata (5-min cache)
  • Decision engine state

Consumers: All Cloudflare Workers

cloud

Cloudflare R2 (Object Storage)

Technology: S3-compatible object storage

Access Pattern: S3 API (GET/PUT objects)

Data Types:

  • Archive media essence (cold storage)
  • Distribution copies
  • Backup artifacts

Consumers: Resource Dispatcher rclone jobs

settings_ethernet Integration Protocols & Technologies

🔌

REST API

HTTP/HTTPS with JSON payloads

  • Process Conductor ↔ Resource Dispatcher
  • Dashboard ↔ GitHub API
🔄

WebSocket

Real-time bidirectional streaming

  • Job status updates to UI
  • Live progress monitoring
🔐

SSH

Secure shell execution

  • Resource Dispatcher → Proc nodes
  • Command dispatch & output streaming
📁

NFS/SMB

Network file systems

  • Proc nodes → Shared storage
  • Media essence access
📦

S3 Protocol

Object storage API

  • rclone → Cloudflare R2
  • Archive & distribution
🪝

Webhooks

HTTP POST event notifications

  • Resource Dispatcher → Slack
  • Event-driven notifications