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.
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.
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 Integration Patterns
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
Nexus Operations Dashboard Integration
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 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/
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.
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
Data Storage & Access Patterns
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)
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
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
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
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