Catalogo sport in YAML, board implicito, engine per volley/basket/timed/racket/timer/generic, regia e app Android allineate.
Co-authored-by: Cursor <cursoragent@cursor.com>
Player contenuto come la diretta, fix streaming thumbnail da S3, volume persistente ActiveStorage in produzione.
Co-authored-by: Cursor <cursoragent@cursor.com>
Riduce le colonne, impila dettagli e stato su due righe e usa date brevi per stare nel layout della pagina.
Co-authored-by: Cursor <cursoragent@cursor.com>
MediaMTX distroless non invoca i webhook wget: accendiamo record sul path quando il telefono pubblica RTMP e lo spegniamo in pausa/offline.
Co-authored-by: Cursor <cursoragent@cursor.com>
La pagina live mostra solo l'overlay nel video (niente tabellone HTML); l'app nativa non espone più l'archivio replay, il toggle regole punteggio parte spento e i controlli in diretta seguono il punteggio dalla regia.
Co-authored-by: Cursor <cursoragent@cursor.com>
Streaming chunked da Garage, purge con delete YouTube, privacy sincronizzata,
archivio club migliorato, retention 30/90 separata da stato abbonamento.
Co-authored-by: Cursor <cursoragent@cursor.com>
Corregge scadenza token regia oltre le 8h, tabellone HTML sulla pagina live,
pulsanti pausa/ripresa in regia, link admin e broadcast ActionCable diretto.
App Android: overlay branding, sync score da regia via WebSocket con reconnect e poll.
Co-authored-by: Cursor <cursoragent@cursor.com>
Filtra le partite visibili lato client/server, corregge il parsing date Rails su Android, semplifica lo step Partita del wizard e restringe l'API ai campi effettivamente usati (campionato, set e scoring_rules).
Co-authored-by: Cursor <cursoragent@cursor.com>
Il tabellone stile SportCam e il watermark Match Live TV sono bruciati in GPU via RootEncoder; sul backend spariscono OverlayRelay, job Sidekiq e volume stream_overlays.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pipeline YouTube con relay, overlay e publisher sync lato backend; fix GL pauseGlDuringRotation su Android per evitare crash in rotazione durante lo streaming Flutter.
Co-authored-by: Cursor <cursoragent@cursor.com>
Senza analyzeduration/probesize l'overlay non pubblicava su _air;
YouTube restava in attesa. Esclusi processi ffmpeg zombie da running?.
Co-authored-by: Cursor <cursoragent@cursor.com>
YouTube chiudeva la diretta (complete) senza ingest stabile; ora
enable_auto_stop è false e SetupBroadcast.recreate! rigenera link/stream key.
Co-authored-by: Cursor <cursoragent@cursor.com>
rsvg scrive su .tmp poi rename; il feeder ignora PNG parziali.
YouTube relay: no doppio avvio, reconnect RTMP; overlay restart solo dopo 3 miss.
Co-authored-by: Cursor <cursoragent@cursor.com>
ffmpeg: probesize/analyzeduration su _air, restart più rapido e avvio relay
al go_live. App: sincronizza started_at dal server e fallback al passaggio live.
Co-authored-by: Cursor <cursoragent@cursor.com>
ffprobe su rtmp://mediamtx si bloccava in Sidekiq e impediva
l'avvio del relay verso YouTube (pagina sempre in attesa).
Co-authored-by: Cursor <cursoragent@cursor.com>
Il relay verso YouTube ora gestisce _air senza traccia audio, ritenta
activate_broadcast finché l'ingest è active e riduce la finestra
scheduledStartTime a ~20s.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il relay non usa più copy (stream inactive su YouTube); PublisherSync
nel refresh overlay; activate solo quando lo stream YouTube è active.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il relay parte dal job overlay ogni 2s; scheduledStartTime ~90s invece di 5 min;
transition testing/live quando l'ingest RTMP raggiunge YouTube.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il motore Android ignorava startStream in CONNECTING/RECONNECTING; la camera
ora resetta prima di pubblicare. YouTube relay parte solo con overlay attivo.
Co-authored-by: Cursor <cursoragent@cursor.com>
Non propone più il link MLTV per sessioni YouTube; la pagina /live
reindirizza a YouTube; il relay verso YouTube si riavvia al connect.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il job Sidekiq falliva con ArgumentError unknown keyword :channel,
impedendo la creazione broadcast YouTube dopo la sessione API.
Co-authored-by: Cursor <cursoragent@cursor.com>
La setup broadcast YouTube (~23s) passa in background job; l'API risponde
subito. Aumentato anche il timeout Dio mobile per createSession YouTube.
Co-authored-by: Cursor <cursoragent@cursor.com>
La gem google-apis-youtube_v3 richiede stream_id: e non un terzo argomento
posizionale, causando 500 in creazione sessione YouTube.
Co-authored-by: Cursor <cursoragent@cursor.com>
Normalizza la data partita nel futuro richiesto dall'API: se scheduled_at
è passato o assente usa now+5min, con messaggio d'errore più chiaro.
Co-authored-by: Cursor <cursoragent@cursor.com>
Tabellone, badge e brand sono ricodificati nel flusso _air via OverlayRelay;
sync punteggio HTTP, volume condiviso rails/sidekiq, qualità 720p migliorata
e badge CONNECTING in ripresa da pausa.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il banner consente solo necessari o tutti i cookie; GA4 si carica solo dopo
consenso. Aggiornati privacy, footer, sitemap e variabile GOOGLE_ANALYTICS_MEASUREMENT_ID.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pipeline registrazione/upload con storage S3, archivio web e app, proxy replay
per il browser, OAuth YouTube sulla pagina club (Premium Full) e footer legale.
Co-authored-by: Cursor <cursoragent@cursor.com>
Metti in pausa ferma RTMP lato app mantenendo la camera aperta, MediaMTX
manda offline.mp4 agli spettatori e Chiudi termina definitivamente.
Co-authored-by: Cursor <cursoragent@cursor.com>
transition_live_broadcast richiede status, id e part; evita 500 in chiusura
diretta Match Live TV quando non c'è broadcast YouTube.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default pubblico; opzione unica privato/non in elenco per Match Live TV,
YouTube piattaforma e canale società. Elenco dirette solo sessioni pubbliche.
Co-authored-by: Cursor <cursoragent@cursor.com>
Premium Full può forzare il canale piattaforma; visibilità non in elenco o privato;
share_url unificato per Match Live TV e YouTube.
Co-authored-by: Cursor <cursoragent@cursor.com>
Premium Full senza canale società usa il canale piattaforma come Light;
in app restano solo Match Live TV e YouTube Live.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gli admin possono concedere o revocare Premium Light/Full senza Stripe;
il piano omaggio ha priorità sui webhook e la società vede un messaggio dedicato.
Co-authored-by: Cursor <cursoragent@cursor.com>
Upgrade Stripe con addebito immediato; downgrade programmato a fine periodo.
UX billing più sobria con box info; icone piani. API inviti e OAuth YouTube
per staff trasmissione; deep link join; scelta partita programmata o nuova.
Co-authored-by: Cursor <cursoragent@cursor.com>
Nome visibile in hero, meta application-name, JSON-LD e documentazione; corregge mismatch con «Match Live Tv» in Console.
Co-authored-by: Cursor <cursoragent@cursor.com>
Collegamento da Dettagli squadra e admin per il refresh token Match Live TV; API e app mobile allineate ai piani Light/Full.
Co-authored-by: Cursor <cursoragent@cursor.com>
Lista globale dei pagamenti da fatturare con dati intestazione, caricamento
PDF per riga che crea la fattura e invia email; rimuove il flusso bozza manuale.
Co-authored-by: Cursor <cursoragent@cursor.com>