From ff2865b5d8c7ddea941cc5dc59863bf6d0b8fc74 Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Sat, 23 May 2026 16:48:38 -0400 Subject: [PATCH] chore(web-ui): delete legacy standalone HTML pages; SPA is the only entry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this commit /public had two parallel UIs: the React SPA (index.html + screens-*.jsx) and a stack of pre-SPA standalone pages (home.html, recorders.html, jobs.html, ...). The SPA replaces every standalone page, nothing in the .jsx tree links to them, and the only outside references were login.html redirecting to home.html and the nginx fallback pointing at home.html. Delete 16 standalone pages (~9.2k lines of dead markup, ~430KB on disk): _primitives-smoke.html api-tokens.html capture.html cluster.html containers.html edit.html editor.html home.html jobs.html player.html projects.html recorders.html settings.html tokens.html upload.html users.html Keep: index.html — the React SPA shell login.html — the sign-in / setup screen Wire the redirects to the SPA: - login.html post-signin: home.html -> / - nginx try_files fallback: /home.html -> /index.html After this, sign-in lands the operator on the real React app instead of the stale 2025-era home page. The Editor screen continues to embed the separate editor service via the /editor/ nginx proxy (unaffected). Co-Authored-By: Claude Opus 4.7 (1M context) --- services/web-ui/nginx.conf | 4 +- services/web-ui/public/_primitives-smoke.html | 226 --- services/web-ui/public/api-tokens.html | 352 ---- services/web-ui/public/capture.html | 562 ------ services/web-ui/public/cluster.html | 396 ----- services/web-ui/public/containers.html | 283 --- services/web-ui/public/edit.html | 440 ----- services/web-ui/public/editor.html | 201 --- services/web-ui/public/home.html | 563 ------ services/web-ui/public/jobs.html | 914 ---------- services/web-ui/public/login.html | 2 +- services/web-ui/public/player.html | 546 ------ services/web-ui/public/projects.html | 580 ------- services/web-ui/public/recorders.html | 1517 ----------------- services/web-ui/public/settings.html | 749 -------- services/web-ui/public/tokens.html | 758 -------- services/web-ui/public/upload.html | 501 ------ services/web-ui/public/users.html | 643 ------- 18 files changed, 3 insertions(+), 9234 deletions(-) delete mode 100644 services/web-ui/public/_primitives-smoke.html delete mode 100644 services/web-ui/public/api-tokens.html delete mode 100644 services/web-ui/public/capture.html delete mode 100644 services/web-ui/public/cluster.html delete mode 100644 services/web-ui/public/containers.html delete mode 100644 services/web-ui/public/edit.html delete mode 100644 services/web-ui/public/editor.html delete mode 100644 services/web-ui/public/home.html delete mode 100644 services/web-ui/public/jobs.html delete mode 100644 services/web-ui/public/player.html delete mode 100644 services/web-ui/public/projects.html delete mode 100644 services/web-ui/public/recorders.html delete mode 100644 services/web-ui/public/settings.html delete mode 100644 services/web-ui/public/tokens.html delete mode 100644 services/web-ui/public/upload.html delete mode 100644 services/web-ui/public/users.html diff --git a/services/web-ui/nginx.conf b/services/web-ui/nginx.conf index c1a2caf..eb46eba 100644 --- a/services/web-ui/nginx.conf +++ b/services/web-ui/nginx.conf @@ -95,9 +95,9 @@ server { proxy_request_buffering off; } - # SPA fallback - try to serve file, else route to index.html + # SPA fallback - try to serve file, else route to the React shell. location / { - try_files $uri $uri/ /home.html; + try_files $uri $uri/ /index.html; expires -1; add_header Cache-Control "no-cache, no-store, must-revalidate"; } diff --git a/services/web-ui/public/_primitives-smoke.html b/services/web-ui/public/_primitives-smoke.html deleted file mode 100644 index 680ce21..0000000 --- a/services/web-ui/public/_primitives-smoke.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - Primitives smoke test - - - -
- - -
-
-
- -
-
- -
-
- - -
- -
-
- -
-

Asset cards

-
-
-
- 00:30 - 2 -
-
-
DRP_B004_081606_V1_0099.mov
-
Alissa Morris · Oct 14th, 2024
-
- -
-
-
- 00:05 - V2 -
-
-
DRP_A015_0815OF_V1_0023.mov
-
Alissa Morris · Oct 14th, 2024
-
- -
-
- -

Operational cards

-
-
-
- Studio A SRT - Recording -
-
-
-
- Receiving · 12450 fr · 30 fps - 00:23:14 -
-
-
- Last: Oct 14th, 2024 4:00 PM -
- -
-
-
-
-
- zampp2 - Online -
-
-
-
- CPU42% -
-
-
-
-
- Memory71% -
-
-
-
-
- DeckLink Duo 2 · 4 ports -
- -
-
-
-
- -

List rows

-
-
- Name - Image - Status - Actions -
-
- wild-dragon-mam-api-1 - wild-dragon-mam-api:latest - Up - -
-
- wild-dragon-web-ui-1 - wild-dragon-web-ui:latest - Up - -
-
- -

Buttons

-
- - - - - - -
- -

Form controls

-
-
- - -
Letters, numbers, dashes. Used in clip filenames.
-
-
-
- - -
-
- - -
-
- -
- -

Field group

-
-
-
- Master recording -
-
- - - -
-
-
-
- - -
-
- - -
-
-
-
-
- -

Empty state

-
- - - -
No recorders yet
-
Create a recorder to ingest live streams via SRT, RTMP, or SDI.
-
- -
-
-
-
-
- - diff --git a/services/web-ui/public/api-tokens.html b/services/web-ui/public/api-tokens.html deleted file mode 100644 index a0d30e9..0000000 --- a/services/web-ui/public/api-tokens.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - API Tokens — Dragonflight - - - - -
- - - - - -
-
-
- API Tokens -
-
- -
-
- -
-
-

- API tokens let scripts and integrations authenticate as you without using your password. - Tokens are shown once at creation — store them securely. - Use Authorization: Bearer <token> in your requests. -

-
- - - - - -
-
Loading…
-
- - -
-
-
- - -
-
-
- New API token - -
-
-
- - -
A label to help you remember what this token is for.
-
-
- - -
-
- -
- -
- - - - - - diff --git a/services/web-ui/public/capture.html b/services/web-ui/public/capture.html deleted file mode 100644 index 4862e0e..0000000 --- a/services/web-ui/public/capture.html +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - Capture — Dragonflight - - - - -
- - -
-
-
- Capture - / - Direct SDI -
-
- Loading devices… -
-
- -
- - - - - -
-
-
- -
- - - - - - - diff --git a/services/web-ui/public/cluster.html b/services/web-ui/public/cluster.html deleted file mode 100644 index 7e08149..0000000 --- a/services/web-ui/public/cluster.html +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - - Cluster — Dragonflight - - - - -
- - -
-
-
- Cluster -
-
-
- - Loading… -
- -
-
- -
-
-
-
-
Total nodes
-
-
-
-
Online
-
-
-
-
Offline
-
-
- - - - - - - - - - - - - - - - - - -
NodeIPRoleCPUMemoryVersionLast seenActions
Loading…
-
-
-
- -
- - - - - - diff --git a/services/web-ui/public/containers.html b/services/web-ui/public/containers.html deleted file mode 100644 index 00990f2..0000000 --- a/services/web-ui/public/containers.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - Containers — Dragonflight - - - - - -
- - -
-
-
- -
-
-
- - Loading… -
- -
-
- -
-
-
- Container - Image - State - Ports - Actions -
-
-
Loading…
-
-
-
-
-
- -
- - - - - - diff --git a/services/web-ui/public/edit.html b/services/web-ui/public/edit.html deleted file mode 100644 index 596b202..0000000 --- a/services/web-ui/public/edit.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - Editor — Dragonflight - - - - - -
- - -
-
-
- Editor - / - Phase A · single-track -
-
- - -
-
- -
- - - - -
-
-
-
- -
Drag a clip onto the timeline below, then click it to preview.
-
- -
-
- -
- --:--.-- / --:--.-- - - - -
-
- -
-
- Timeline · Track 1 - 0 clips · 00:00.00 -
-
-
Drag clips here from the Library
-
-
-
- - - -
-
-
- - - - - - diff --git a/services/web-ui/public/editor.html b/services/web-ui/public/editor.html deleted file mode 100644 index 927c15c..0000000 --- a/services/web-ui/public/editor.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - Editor (in development) — Dragonflight - - - - -
- - - -
-
-
- Editor -
-
-
- -
-
- - In Development -

The editor is under construction

-

- We're still wiring up the timeline editor — clip trimming, sequence - rendering, and Premiere round-tripping. It's not ready for use yet, - but it's coming. Use the sidebar to jump to Library, Recorders, - or Projects in the meantime. -

- - -
-
-
-
- - - - diff --git a/services/web-ui/public/home.html b/services/web-ui/public/home.html deleted file mode 100644 index 605b0f1..0000000 --- a/services/web-ui/public/home.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - - Home — Dragonflight - - - - - -
- - - -
- - - - - - - diff --git a/services/web-ui/public/jobs.html b/services/web-ui/public/jobs.html deleted file mode 100644 index df434e5..0000000 --- a/services/web-ui/public/jobs.html +++ /dev/null @@ -1,914 +0,0 @@ - - - - - - -Jobs — Dragonflight - - - - - -
- - - - - -
- - -
-
- Jobs -
-
- -
-
- - -
- - -
-
-
-
Total
-
-
-
-
Active
-
-
-
-
Completed
-
-
-
-
Failed
-
-
- - -
-
- - - - -
- -
- - - -
-
- Connecting… -
-
- - -
- -
- -
-
-
- - -
- - -
- - - - - - diff --git a/services/web-ui/public/login.html b/services/web-ui/public/login.html index eb46442..4436aa3 100644 --- a/services/web-ui/public/login.html +++ b/services/web-ui/public/login.html @@ -263,7 +263,7 @@ try{ const res = await fetch(API + '/login', {method:'POST',headers:{'Content-Type':'application/json'},credentials:'same-origin', body: JSON.stringify({username:$('username').value.trim(),password:$('password').value})}); - if(res.ok){ showFlash('Signed in, redirecting...','success'); setTimeout(()=>{location.href='home.html'},600); } + if(res.ok){ showFlash('Signed in, redirecting...','success'); setTimeout(()=>{location.href='/'},600); } else{ const d=await res.json().catch(()=>({})); showFlash(d.error||'Login failed','error'); } } catch(err){ showFlash('Network error: '+err.message,'error'); } finally{ btn.disabled=false; btn.textContent='Sign in'; } diff --git a/services/web-ui/public/player.html b/services/web-ui/public/player.html deleted file mode 100644 index c9a68da..0000000 --- a/services/web-ui/public/player.html +++ /dev/null @@ -1,546 +0,0 @@ - - - - - - - Player — Dragonflight - - - - - -
- - -
-
-
- Player -
-
- -
-
- -
-
- -
-
- -
-
- - - -
-
-
-
- - - - - - - diff --git a/services/web-ui/public/projects.html b/services/web-ui/public/projects.html deleted file mode 100644 index a10548b..0000000 --- a/services/web-ui/public/projects.html +++ /dev/null @@ -1,580 +0,0 @@ - - - - - - - Projects — Dragonflight - - - - - -
- - -
-
-
- Projects -
-
- -
-
- -
- - - - -
-
- - - -
Select a project on the left, or create a new one.
-
-
-
-
-
- - - - - - - - - - - - - diff --git a/services/web-ui/public/recorders.html b/services/web-ui/public/recorders.html deleted file mode 100644 index 1b9931c..0000000 --- a/services/web-ui/public/recorders.html +++ /dev/null @@ -1,1517 +0,0 @@ - - - - - - - Recorders — Dragonflight - - - - -
- - - -
-
-
- Recorders -
-
- -
-
- -
-
- -
-
-
- - -
-
-
- New recorder - -
-
- -
- - -
- - -
- -
- - - -
-
- - -
- - -
-
- Master recording -
-
- - - -
- - -
-
-
- - -
-
- - -
-
- -
-
- - -
ProRes / DNxHR pick bitrate from profile + resolution, so only framerate is configurable.
-
-
-
- - -
-
-
- - -
-
- - -
-
- -
- - -
-
- - -
MOV is recommended for ProRes / DNxHR masters. MXF for broadcast workflows.
-
-
-
- - -
- -
SDI sources record proxy in parallel. Network sources (SRT/RTMP) generate proxy after stop.
-
- - -
-
- Proxy -
-
- - - -
- -
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
- -
-
-
- - -
-
- - -
-
-
-
- - -
-
-
- -
-
- - -
-
-
- - -
- -
-
-
- - -
-
- - -
-
-
- -
- -
- - - - - - - - diff --git a/services/web-ui/public/settings.html b/services/web-ui/public/settings.html deleted file mode 100644 index 412c89e..0000000 --- a/services/web-ui/public/settings.html +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - Settings — Dragonflight - - - - -
- - -
-
- Settings -
-
- - -
-
-
- - - - - -
-
-
S3 / Object Storage
-
S3-compatible bucket for media asset storage (Garage, MinIO, AWS S3, etc.)
-
-
-
- -
- Initial setup required: - Configure your S3-compatible object store below. Changes take effect immediately without restarting the API. - Use Test Connection to verify credentials before saving. -
- -
-
- - -
Full URL including protocol and port. Leave blank to use AWS S3.
-
-
- - -
Required for AWS; use any value for self-hosted.
-
-
- -
- - -
- -
- - -
- -
- -
- - -
- -
- -
- - - Saved -
- -
- -
-
- - -
-
-
- - - - - -
-
-
GPU / Transcoding
-
NVIDIA NVENC acceleration for proxy generation and transcoding jobs
-
-
-
- - -
-
- Node hardware inventory - -
-
-
Loading…
-
-
- -
- - -
- -
When enabled, proxy generation and transcode jobs use NVENC instead of CPU ffmpeg.
-
- - - - -
- - Saved -
- -
-
- - -
-
-
- - - - - -
-
-
SDI Capture Service
-
Route SDI capture to a remote node with a Blackmagic DeckLink card
-
-
-
- -
- Multi-node capture routing: - By default the Capture page talks to the local capture sidecar. - Set a remote URL here to forward all SDI capture API calls to a secondary MAM node - running --profile capture (e.g. a machine with a DeckLink card). - Leave blank to use the local capture service. -
- -
- - -
Base URL of the capture service on the remote node. Leave blank for local sidecar.
-
- -
- - - Saved -
- -
- -
-
- - -
-
-
- - - -
-
-
AMPP Integration
-
Grass Valley AMPP platform connectivity for asset sync
-
-
-
- -
- - -
- -
- - - -
- -
- - - Saved -
- -
- -
-
- -
-
-
- -
- - - - - - - diff --git a/services/web-ui/public/tokens.html b/services/web-ui/public/tokens.html deleted file mode 100644 index 1551357..0000000 --- a/services/web-ui/public/tokens.html +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - - Token Pricing — Dragonflight - - - - - -
- - -
-
-
- Token Pricing - / - Enterprise Compute Compliance Engine v4.7 -
- -
- -
- - -
- Dragonflight Pricing -

Per-seat · Per-stream · Per-month
Per token.

-

Welcome to the future of broadcast media operations. Tokens are fungible compute credits that flexibly meter every action across the Platform™. Move faster. Pay precisely. Forecast nothing.

-
- - -
- -
-
Starter
-
$499 / mo
-
100,000 tokens · $4.99 / 1k
-
    -
  • 1 concurrent recorder
  • -
  • SD ingest (480p · 1.2× multiplier)
  • -
  • Standard support · email · 96h SLA
  • -
  • No HD codec access
  • -
  • No ProRes write
  • -
- -
- - - -
-
Broadcast
-
$8,999 / mo
-
2,400,000 tokens · $3.75 / 1k
-
    -
  • 12 concurrent recorders
  • -
  • 4K ingest (5.8× multiplier)
  • -
  • ProRes 4444 write (4.0× multiplier)
  • -
  • Named CSM · phone · 4h SLA
  • -
  • Token rollover (90 days, fees apply)
  • -
- -
- -
-
Enterprise
-
Contact us
-
Custom token allocation
-
    -
  • Unlimited* concurrent recorders
  • -
  • 8K / IMF / DCP write tiers
  • -
  • Dedicated solutions architect
  • -
  • Quarterly token true-up audits
  • -
  • Implementation fee not included
  • -
- -
- -
- - -
- Per-Service Metering - All rates exclusive of TVM · effective Q3 FY26 -
- -
-
- - Service - Meter - Base rate - Multiplier -
- -
-
-
LibraryAsset browse, search, thumbnail render
-
Per asset · per hour
-
0.012 tokens
-
1.00×
-
- -
-
-
IngestUpload + transcode to managed proxy
-
Per GB · per pass
-
14.4 tokens / GB
-
2.4× during business hours
-
- -
-
-
Recorder · SRTCaller-mode network ingest, includes HLS preview*
-
Per minute · per recorder
-
4.8 tokens / min
-
+22% Reliability Adjustment
-
- -
-
-
Recorder · RTMPGeneric ingest tier · legacy codec compatibility
-
Per minute · per recorder
-
3.6 tokens / min
-
1.00×
-
- -
-
-
Capture · SDIDeckLink baseband ingest · 12G-SDI add-on available
-
Per minute · per SDI channel
-
9.2 tokens / min
-
1.8× premium baseband multiplier
-
- -
-
-
Live HLS PreviewReal-time delivery acceleration (RTDA™)
-
Per active viewer · per second
-
0.0008 tokens
-
3.2× CDN egress premium
-
- -
-
-
ProRes HQ WriteMastering-grade codec licensing
-
Per minute of media
-
6.4 tokens / min
-
2.4× codec entitlement fee
-
- -
-
-
Editor renderServer-side concat / trim · brand-aligned codec ladder
-
Per minute of output
-
11.8 tokens / min
-
+18% Real-Time Render Surcharge
-
- -
-
-
Background JobsProxy gen, thumbnails, folder sync
-
Per job · per CPU-second
-
0.45 tokens
-
0.85× off-peak discount
-
- -
-
-
Premiere Pro ConnectorCEP bridge · per-NLE seat compatibility license
-
Per workstation · per month
-
22,000 tokens
-
+ $99 NLE Compatibility Levy
-
- -
-
-
API callGET /api/v1/* · includes 200-byte response budget
-
Per request
-
0.0011 tokens
-
1.00× (overage 3.4×)
-
-
- - -
- Current Token Burn - Last 14 days · nightly true-up · TVM applied -
-
-
-
MTD burn+0%
-
Forecast EOMover plan
-
TVM (live)stable
-
Peak drawWed
-
-
- -
- Ingest - Recorders - Render - Overage -
-
-
- - -
-
-
Monthly token estimator
-
Honest forecasts since 2019. Actual usage may vary by up to 340%.
-
-
-
-
-
-
-
-
-
-
- Estimated monthly tokens - -
-
- At Professional tier - -
-
Includes 2.4× business-hours Ingest multiplier. Excludes overage, peak-hour surcharge, codec entitlement, and the Token Velocity Modifier (TVM™), which fluctuates between 0.8× and 4.2× without notice.
-
-
- - - - -
-
-
- - - - - - - diff --git a/services/web-ui/public/upload.html b/services/web-ui/public/upload.html deleted file mode 100644 index a4beb12..0000000 --- a/services/web-ui/public/upload.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - Ingest — Dragonflight - - - - -
- - -
-
-
- Ingest -
-
- -
-
- -
-
- -
-
- - -
-
- - -
-
- - -
- -
- - - - - -
-
Drop files here or click to browse
-
Video, audio, and image files — up to 5 GB each
-
- - - - - - -
-
-
-
- -
- - - - - - - diff --git a/services/web-ui/public/users.html b/services/web-ui/public/users.html deleted file mode 100644 index 3aa9b1b..0000000 --- a/services/web-ui/public/users.html +++ /dev/null @@ -1,643 +0,0 @@ - - - - - - - Users — Dragonflight - - - - -
- - - - - -
-
-
- -
-
- -
-
- - -
- - -
- - -
-
-
- Users - -
-
-
- Username - Display name - Role - Groups - Created - Actions -
-
-
Loading…
-
-
-
-
- - -
-
-
- Groups - -
-
-
- Name - Description - Members - Created - Actions -
-
-
Loading…
-
-
-
-
-
-
- - -
-
-
- New user - -
-
- -
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
- - -
-
-
- New group - -
-
- -
- - -
-
- - -
- -
- -
- -
- - - - - - -- 2.45.2