Add multi-language audio tracks and self-hosted flag-icons

Introduce per-video language support and multiple audio tracks
(VideoAudioTrack model + migrations for language, description, title),
a reusable language-select component, and a track-editor form. Bundle
the self-hosted flag-icons v7.2.3 library and a NAS auto-sync command.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
ghassanandClaude Opus 4.7 committed 2026-05-22 21:32:52 +03:00
1 parent f8d13457fa
commit 66fd78c10f
314 files changed
+16507 -3172

No files matched your search

@@ -1,5 +1,13 @@
@props(['playlist'])
@php
$pl = $playlist;
$firstVid = $pl->videos->first();
$plUrl = $firstVid
? route('videos.show', $firstVid) . '?playlist=' . $pl->share_token
: route('playlists.show', $pl->id);
@endphp
@once
<style>
.pl-count-badge {
@@ -59,10 +67,8 @@
</style>
@endonce
@php $pl = $playlist; @endphp
<div class="yt-video-card">
<a href="{{ route('playlists.show', $pl->id) }}">
<a href="{{ $plUrl }}">
<div class="yt-video-thumb">
<img src="{{ $pl->thumbnail_url }}" alt="{{ $pl->name }}" loading="lazy" decoding="async" onload="this.classList.add('loaded');this.closest('.yt-video-thumb').classList.add('loaded')">
<div class="pl-count-badge">
@@ -94,7 +100,7 @@
</div>
<div class="yt-video-details">
<h3 class="yt-video-title">
<a href="{{ route('playlists.show', $pl->id) }}">{{ $pl->name }}</a>
<a href="{{ $plUrl }}">{{ $pl->name }}</a>
</h3>
@if($pl->user)
<a href="{{ route('channel', $pl->user->channel) }}" class="yt-channel-name"