Skip to content

feat(site): source URL auto-detection for installation page#619

Merged
decepulis merged 2 commits intomainfrom
feat/site-source-url-detection
Feb 26, 2026
Merged

feat(site): source URL auto-detection for installation page#619
decepulis merged 2 commits intomainfrom
feat/site-source-url-detection

Conversation

@decepulis
Copy link
Copy Markdown
Collaborator

@decepulis decepulis commented Feb 26, 2026

Summary

  • Replaces the radio grid source picker on the installation page with a URL input + select dropdown
  • Auto-detects renderer from pasted URLs (domain-first, then file extension)
  • Injects the user's actual URL into generated HTML and React code output
  • Adds articleFor helper with Record<Renderer, "a" | "an"> for correct grammar in suggestion text ("an HLS link", not "a HLS link")
  • Extracts Mux playback IDs from stream.mux.com URLs and sets sourceUrl on Mux upload completion

Test plan

  • pnpm -F site test detect-renderer — 65 tests pass
  • Paste YouTube, Vimeo, HLS (.m3u8), DASH (.mpd), MP4 URLs and verify auto-detection + code output
  • Verify "an HLS link" / "an HTML5 Video link" grammar in suggestion text
  • Manually override via dropdown, verify "Select [Source]" revert link appears
  • Switch use cases with a URL present, verify re-detection
  • Upload via Mux, verify sourceUrl is set and code uses playback-id

Closes #485

🤖 Generated with Claude Code

Replace the radio grid source picker on the installation page with a URL
input + select dropdown. Users paste a media URL, the system auto-detects
the source type, and the generated code reflects their actual URL.

- Add `detectRenderer` utility with domain and extension-based detection
- Add `extractMuxPlaybackId` for Mux stream URL handling
- Add `articleFor` helper with `Record<Renderer, "a" | "an">` for correct
  grammar in suggestion text ("an HLS link", not "a HLS link")
- Replace `ImageRadioGroup` with URL input + `Select` dropdown
- Inject user's URL into HTML and React code output
- Set `sourceUrl` on Mux upload completion
- Add `sourceUrl` atom and `VALID_RENDERERS` map to installation store
- Add design doc and comprehensive tests

Closes #485

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Feb 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
vjs-10-demo-react Ignored Ignored Preview Feb 26, 2026 3:15pm

Request Review

@netlify
Copy link
Copy Markdown

netlify bot commented Feb 26, 2026

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 294e331
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/69a0637807281200085bbb8a
😎 Deploy Preview https://deploy-preview-619--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 26, 2026

📦 Bundle Size Report

Package Size Diff %
@videojs/core 6.61 kB 0 B ░░░░░░░░ 0%
@videojs/element 1.60 kB 0 B ░░░░░░░░ 0%
@videojs/html 9.45 kB 0 B ░░░░░░░░ 0%
@videojs/icons 3.79 kB 0 B ░░░░░░░░ 0%
@videojs/react 16.27 kB 0 B ░░░░░░░░ 0%
@videojs/store 1.94 kB 0 B ░░░░░░░░ 0%
@videojs/utils 2.47 kB 0 B ░░░░░░░░ 0%

Total: 42.12 kB · 0 B · 0%


Entry Breakdown

Subpath sizes are the additional bytes on top of the root entry point, measured by bundling root + subpath together and subtracting the root-only size.

@videojs/core
Entry Base PR Diff %
. 3.10 kB 3.10 kB 0 B 0%
./dom 3.50 kB 3.50 kB 0 B 0%
total 6.61 kB 6.61 kB 0 B 0%
@videojs/element
Entry Base PR Diff %
. 817 B 817 B 0 B 0%
./context 823 B 823 B 0 B 0%
total 1.60 kB 1.60 kB 0 B 0%
@videojs/icons
Entry Base PR Diff %
./react 2.27 kB 2.27 kB 0 B 0%
./html 1.52 kB 1.52 kB 0 B 0%
total 3.79 kB 3.79 kB 0 B 0%
@videojs/react
Entry Base PR Diff %
. 8.50 kB 8.50 kB 0 B 0%
./audio 238 B 238 B 0 B 0%
./background 302 B 302 B 0 B 0%
./video 7.24 kB 7.24 kB 0 B 0%
total 16.27 kB 16.27 kB 0 B 0%
@videojs/store
Entry Base PR Diff %
. 1.29 kB 1.29 kB 0 B 0%
./html 468 B 468 B 0 B 0%
./react 199 B 199 B 0 B 0%
total 1.94 kB 1.94 kB 0 B 0%
@videojs/utils
Entry Base PR Diff %
./array 104 B 104 B 0 B 0%
./dom 684 B 684 B 0 B 0%
./events 227 B 227 B 0 B 0%
./function 197 B 197 B 0 B 0%
./object 119 B 119 B 0 B 0%
./predicate 265 B 265 B 0 B 0%
./string 110 B 110 B 0 B 0%
./style 185 B 185 B 0 B 0%
./time 478 B 478 B 0 B 0%
./number 158 B 158 B 0 B 0%
total 2.47 kB 2.47 kB 0 B 0%

ℹ️ How to interpret

Sizes are minified + brotli, measured with esbuild.
Package totals are computed as root size + marginal subpath costs.
Subpath marginal cost = (root + subpath bundled together) − root alone.

Icon Meaning
No change
🔺 Increased ≤ 10%
🔴 Increased > 10%
🔽 Decreased
🆕 New (no baseline)

Run pnpm size locally to check current sizes.

React Compiler handles memoization automatically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@decepulis decepulis merged commit efd322a into main Feb 26, 2026
12 checks passed
@decepulis decepulis deleted the feat/site-source-url-detection branch February 26, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(getting-started): Auto-select Media based on source URL

1 participant