Così overflow Hetzner e VOD YouTube restano in archivio dopo lo spegnimento del nodo, e la colonna ingest non si svuota.
Co-authored-by: Cursor <cursoragent@cursor.com>
I nodi cloud restano in provisioning finché :9997 risponde; retry su create_path e 503 retryable se l’ingest è ancora irraggiungibile.
Co-authored-by: Cursor <cursoragent@cursor.com>
Traccia i movimenti aggregati, overlay a gradienti sull’iframe della pagina e toggle click/move in admin.
Co-authored-by: Cursor <cursoragent@cursor.com>
Aggiunge filtri/colonne (società, orari) e dettaglio leggibile; evita 422 CSRF su logout e non cancella le cover slate custom in sync prod.
Co-authored-by: Cursor <cursoragent@cursor.com>
Un avviso ha un testo per lingua; per differenziare le piattaforme si creano due avvisi. L'app riceve già il copy risolto da Accept-Language.
Co-authored-by: Cursor <cursoragent@cursor.com>
Rifiuta file troppo grandi o non-immagine via Marcel prima di attach, e genera la slate in sync anche quando cover_image esiste ma cover_slate non è ancora pronta.
Co-authored-by: Cursor <cursoragent@cursor.com>
Permette upload da portale e app con ereditarietà partita→squadra→società, generazione MP4 via ffmpeg e distribuzione su home lab e nodi CPX per pause e assenza segnale.
Co-authored-by: Cursor <cursoragent@cursor.com>
Dopo la conferma admin la card restava su «Paga con bonifico»; la società parte da Free, l'owner è staff trasmissione e le mail non bloccano se manca SMTP.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il piano si attiva solo dopo la conferma admin; Stripe resta a listino se non c'è un prezzo commerciale.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il relay HLS→RTMPS resta sul worker/agent del nodo assegnato, così tre dirette contemporanee restano in onda sul sito e sul canale della società senza schermo nero.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il form invito è sulla pagina squadra, genera il link e manda la mail; in caso di errore SMTP resta la copia manuale.
Co-authored-by: Cursor <cursoragent@cursor.com>
L'encoder scende in congestione e risale piano; la regia imposta il pavimento, mostra lo stato del telefono e apre il selettore dal bitrate colorato.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drain sicuro in scale-in, alert Ops su overflow e controlli admin senza abilitare il deploy in produzione.
Co-authored-by: Cursor <cursoragent@cursor.com>
Scala i nodi overflow quando gli slot calano, mantiene una spare a caldo sotto carico e spegne gli idle, disattivabile con STREAM_AUTOSCALE_ENABLED.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prepara l'architettura multi-nodo (MediaMTX+ffmpeg) con assignment URL per sessione, admin di provision/drain e provider Cloud/DNS astratti verso mltv-stream.net.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gli header Accept-Language dalle app e i fix di padding/menu sul web chiudono il giro password-policy; il doc guida il lavoro su Mac.
Co-authored-by: Cursor <cursoragent@cursor.com>
Tutte le view marketing, legali, viewer, dashboard e admin usano t(); mailer utente-facing e flash localizzati; admin con LocaleResolver e selettore lingua.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il selettore lingua funziona sul web e sulle app native; su Android la preferenza è persistita e applicata al riavvio. Incluse anche eliminazione replay a scope e campi pagina pubblica squadra.
Co-authored-by: Cursor <cursoragent@cursor.com>
Normalizza il periodo nel backend quando l'app invia "Q1" via cable, così advance_period aggiorna regia e overlay; rimuove i controlli cronometro dalla regia e rende più tollerante il decode iOS al resume sessione.
Co-authored-by: Cursor <cursoragent@cursor.com>
La regia remota non va più in 500 su basket/timed; iOS gestisce chiusura set, riconnessione RTMP e avanzamento quarti in modo affidabile.
Co-authored-by: Cursor <cursoragent@cursor.com>
Il proxy Rails gestisce il redirect MediaMTX su /live/match_* e riscrive le playlist; edge nginx reindirizza /live/ sotto /hls/. Su iOS, SessionBuilder HaishinKit, pipeline mixer corretta e refresh token.
Co-authored-by: Cursor <cursoragent@cursor.com>
Dopo auth Rails redirect a URL presigned su /media/ (edge → Garage); aumenta
RAILS_MAX_THREADS, corregge ingest log ops via stdin e keystore Play Console.
Co-authored-by: Cursor <cursoragent@cursor.com>
Aggiunge data personalizzata e pulsanti rapidi nell'archivio admin così il job di purge non elimina i video fino alla nuova scadenza.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gli admin possono vedere, modificare ed eliminare i replay di una società come la squadra proprietaria, riusando la stessa UI e logica dell'archivio pubblico.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce incidenti con dedup, job Sidekiq ogni 3 min, scan log cron, /up/deep,
dashboard /admin/ops e push ntfy; include Sentry opzionale e fix test suite.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix crash e race su +3, layout tabellone con squadre ai lati, safe area in diretta e rimozione overlay cronometro; backend con sync punteggio periodo, link diretta in regia e init score_state basket.
Co-authored-by: Cursor <cursoragent@cursor.com>
Le partite ereditano lo sport_key della squadra alla creazione invece del default pallavolo; l'organico mostra ruoli per board (basket, volley, timed) e il wizard Android usa lo sport del team per overlay e icona.
Co-authored-by: Cursor <cursoragent@cursor.com>
Dopo «Termina trasmissione» la partita restava visibile se esisteva una vecchia sessione idle precedente a quella ended; l'hub e l'app usano ora lo stato dell'ultima sessione.
Co-authored-by: Cursor <cursoragent@cursor.com>
Allinea i form società/squadra al catalogo sport, espone score_action per basket/timed e corregge bug namespace Sports e Result nel period engine; l'app nativa gestisce overlay e punteggio per board con wizard regole esteso.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>
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>