Architecture

Architettura

Architecture

Arquitectura

アーキテクチャ

Under the Hood

Sotto il Cofano

Sous le Capot

Bajo el Capó

内部の仕組み

How Rugby Radio Live Works

Come Funziona Rugby Radio Live

Comment Fonctionne Rugby Radio Live

Cómo Funciona Rugby Radio Live

Rugby Radio Liveの仕組み

Rugby Radio Live separates the live product from the content factory: an Angular PWA and Android TWA talk to an ASP.NET Core REST API, SQL Server stores matches and generated messages, and Hangfire jobs prepare AI commentary, voices, images, blog pages and SEO files.

Rugby Radio Live separa il prodotto live dalla fabbrica dei contenuti: Angular PWA e Android TWA parlano con un'API REST ASP.NET Core, SQL Server conserva partite e messaggi generati, e i job Hangfire preparano telecronache AI, voci, immagini, pagine blog e file SEO.

Rugby Radio Live sépare le produit live de l'usine de contenu : l'Angular PWA et l'Android TWA parlent à une API REST ASP.NET Core, SQL Server stocke matchs et messages générés, et les jobs Hangfire préparent commentaires IA, voix, images, pages de blog et fichiers SEO.

Rugby Radio Live separa el producto en vivo de la fábrica de contenido: la Angular PWA y la Android TWA hablan con una API REST ASP.NET Core, SQL Server almacena partidos y mensajes generados, y los jobs Hangfire preparan comentarios IA, voces, imágenes, páginas de blog y archivos SEO.

Rugby Radio Liveはライブ機能とコンテンツ生成を分けています。Angular PWAとAndroid TWAがASP.NET Core REST APIと通信し、SQL Serverが試合と生成メッセージを保存し、HangfireジョブがAI実況・音声・画像・ブログページ・SEOファイルを準備します。

System Overview

Panoramica del Sistema

Vue d'ensemble du Système

Visión General del Sistema

システム全体像

CLIENT API DATA EXT Angular PWA Firebase Hosting · CDN Angular 18 · TypeScript PWA · ngx-translate · Sentry Static Blog Pre-generated HTML RugbyRadioBlog · CDN SEO Indexed · Match Pages Android App (TWA) Google Play · TWA wrapper Same Angular PWA · No code diff Push Notifications · Offline REST API · ASP.NET Core 13 Controllers · 69 Endpoints · API Versioning JWT Auth · Google OAuth · CORS · Audit Middleware Users · Channels · Matches · Events · Voices · Followers Firebase FCM push · Swagger UI · Sentry error tracking SQL Server 2 Databases App DB: users, channels, matches, events, voices HF DB: job queue & history Entity Framework Core · MSSQL CDN Storage storage-sh.rugbyradiolive Match images (WebP) Voice audio (MP3) Blog HTML pages Media assets · Sitemap Hangfire Worker Recurring Jobs · Hangfire Dashboard AI Message Catalog · TTS Audio Match & Channel Images Static Blog HTML Generator SEO Sitemap · Social Media Azure Speech Text-to-Speech · TTS Firebase FCM Push Notifications AI LLM Talker Commentary Generation Image AI (Painters) ComfyUI · Match Images SMTP / Social Email · Facebook

Platform Components

Componenti della Piattaforma

Composantes de la Plateforme

Componentes de la Plataforma

プラットフォームコンポーネント

Frontend

Frontend

Frontend

Frontend

フロントエンド

Angular PWA

The user-facing web application, built with Angular 18 and TypeScript, hosted on Firebase Hosting as a Progressive Web App. It supports 5 languages (IT, EN, FR, ES, JA) via ngx-translate, delivers live push notifications via Firebase, tracks activity with Google Analytics and displays AdSense advertising. The same codebase is wrapped as an Android TWA app on Google Play.

L'applicazione web lato utente, costruita con Angular 18 e TypeScript, ospitata su Firebase Hosting come Progressive Web App. Supporta 5 lingue (IT, EN, FR, ES, JA) via ngx-translate, invia notifiche push in diretta tramite Firebase, traccia l'attività con Google Analytics e mostra pubblicità AdSense. Lo stesso codice è pubblicato come app Android TWA su Google Play.

L'application web côté utilisateur, construite avec Angular 18 et TypeScript, hébergée sur Firebase Hosting comme Progressive Web App. Elle prend en charge 5 langues (IT, EN, FR, ES, JA) via ngx-translate, envoie des notifications push en direct via Firebase, suit l'activité avec Google Analytics et affiche des publicités AdSense. Le même code est publié en tant qu'application Android TWA sur Google Play.

La aplicación web de cara al usuario, construida con Angular 18 y TypeScript, alojada en Firebase Hosting como Progressive Web App. Admite 5 idiomas (IT, EN, FR, ES, JA) mediante ngx-translate, envía notificaciones push en vivo a través de Firebase, rastrea la actividad con Google Analytics y muestra publicidad de AdSense. El mismo código se publica como app Android TWA en Google Play.

Angular 18とTypeScriptで構築されたユーザー向けWebアプリ。Firebase HostingにPWAとしてホスト。ngx-translateで5言語(IT・EN・FR・ES・JA)対応、Firebaseリアルタイムプッシュ通知、Google Analyticsトラッキング、AdSense広告表示。同一コードがGoogle PlayでAndroid TWAアプリとして公開されています。

Angular 18 TypeScript Firebase CDN PWA ngx-translate Sentry Google Play TWA

Backend

Backend

Backend

Backend

バックエンド

REST API · ASP.NET Core

An ASP.NET Core Web API with 13 controllers and 69 endpoints. It handles JWT and Google OAuth authentication, user and channel ownership, match setup, live event storage, reactions, comments, follows and Firebase FCM notifications. Match pages are read back with the user's commentary language so stored event types can be rendered with the right approved system message.

Un'API Web ASP.NET Core con 13 controller e 69 endpoint. Gestisce autenticazione JWT e Google OAuth, ownership di utenti e canali, creazione partite, salvataggio eventi live, reazioni, commenti, follow e notifiche Firebase FCM. Le pagine partita vengono rilette con la lingua di telecronaca dell'utente, cosi gli eventi salvati possono usare il messaggio di sistema approvato corretto.

Une API Web ASP.NET Core avec 13 contrôleurs et 69 endpoints. Elle gère l'authentification JWT et Google OAuth, la propriété des utilisateurs et canaux, la création de matchs, le stockage des événements live, réactions, commentaires, abonnements et notifications Firebase FCM. Les pages match sont relues avec la langue de commentaire de l'utilisateur afin d'afficher le bon message système approuvé.

Una API Web ASP.NET Core con 13 controladores y 69 endpoints. Gestiona autenticación JWT y Google OAuth, propiedad de usuarios y canales, creación de partidos, almacenamiento de eventos en vivo, reacciones, comentarios, seguimientos y notificaciones Firebase FCM. Las páginas de partido se leen con el idioma de comentario del usuario para mostrar el mensaje de sistema aprobado correcto.

13コントローラー・69エンドポイントのASP.NET Core Web API。JWTとGoogle OAuth認証、ユーザー・チャンネル権限、試合作成、ライブイベント保存、リアクション、コメント、フォロー、Firebase FCM通知を担当します。試合ページはユーザーの実況言語で読み直され、保存済みイベント種別に対応する承認済みシステムメッセージを表示します。

ASP.NET Core C# 13 Controllers 69 Endpoints JWT Auth Google OAuth EF Core Firebase FCM

Background Worker

Worker in Background

Worker en Arrière-plan

Worker en Segundo Plano

バックグラウンドワーカー

Hangfire · Content Jobs

The background application is not in the live request path. Hangfire prepares and maintains content: AI system-message drafts in 5 languages and multiple talker styles, approval/versioning for those messages, Azure TTS audio, AI images for matches and channels, static blog HTML, SEO sitemaps, Facebook publishing and maintenance jobs. Jobs use SQL Server storage and are monitored through the Hangfire dashboard.

L'applicazione in background non sta nel percorso live della richiesta. Hangfire prepara e mantiene contenuti: bozze di messaggi di sistema AI in 5 lingue e piu stili di talker, approvazione/versioning dei messaggi, audio Azure TTS, immagini AI per partite e canali, HTML statico del blog, sitemap SEO, pubblicazione Facebook e manutenzione. I job usano storage SQL Server e sono monitorati dalla dashboard Hangfire.

L'application en arrière-plan n'est pas dans le chemin live des requêtes. Hangfire prépare et maintient les contenus : brouillons de messages système IA en 5 langues et plusieurs styles de talkers, approbation/versioning de ces messages, audio Azure TTS, images IA pour matchs et canaux, HTML statique du blog, sitemaps SEO, publication Facebook et maintenance. Les jobs utilisent SQL Server et sont suivis via le dashboard Hangfire.

La aplicación en segundo plano no está en la ruta en vivo de la petición. Hangfire prepara y mantiene contenido: borradores de mensajes de sistema IA en 5 idiomas y varios estilos de talker, aprobación/versionado, audio Azure TTS, imágenes IA para partidos y canales, HTML estático del blog, sitemaps SEO, publicación en Facebook y mantenimiento. Los jobs usan SQL Server y se monitorizan con el dashboard Hangfire.

バックグラウンドアプリはライブリクエスト経路には入りません。Hangfireはコンテンツを準備・保守します。5言語・複数トーカースタイルのAIシステムメッセージ草案、承認とバージョン管理、Azure TTS音声、試合・チャンネル画像、静的ブログHTML、SEOサイトマップ、Facebook投稿、メンテナンスジョブを扱います。ジョブはSQL Serverストレージを使い、Hangfireダッシュボードで監視されます。

Hangfire AI Commentary Azure TTS Image AI Blog Generator SEO Sitemap Social Posts

Data & Storage

Dati & Storage

Données & Stockage

Datos & Almacenamiento

データ&ストレージ

SQL Server · CDN

Two SQL Server databases: the application database stores users, channels, matches, commentary events, AI messages and subscriptions; the Hangfire database manages the job queue and execution history. Static media files — match and channel images (WebP), voice commentary audio (MP3), and pre-generated blog HTML pages — are stored on a dedicated CDN storage server at storage-sh.rugbyradiolive.com.

Due database SQL Server: il database applicativo memorizza utenti, canali, partite, eventi di telecronaca, messaggi AI e sottoscrizioni; il database Hangfire gestisce la coda dei job e la cronologia di esecuzione. I file media statici — immagini di partite e canali (WebP), audio telecronaca vocale (MP3) e pagine HTML statiche del blog pre-generate — sono archiviati su un server CDN storage dedicato su storage-sh.rugbyradiolive.com.

Deux bases de données SQL Server : la base applicative stocke les utilisateurs, canaux, matchs, événements de commentaire, messages IA et abonnements ; la base Hangfire gère la file d'attente des jobs et l'historique d'exécution. Les fichiers médias statiques — images de matchs et canaux (WebP), audio de commentaires vocaux (MP3) et pages HTML de blog pré-générées — sont stockés sur un serveur CDN de stockage dédié sur storage-sh.rugbyradiolive.com.

Dos bases de datos SQL Server: la base de datos de aplicación almacena usuarios, canales, partidos, eventos de comentarios, mensajes IA y suscripciones; la base de datos Hangfire gestiona la cola de trabajos y el historial de ejecución. Los archivos multimedia estáticos — imágenes de partidos y canales (WebP), audio de comentarios de voz (MP3) y páginas HTML de blog pregeneradas — se almacenan en un servidor CDN de almacenamiento dedicado en storage-sh.rugbyradiolive.com.

2つのSQL Serverデータベース:アプリケーションDBはユーザー・チャンネル・試合・実況イベント・AIメッセージ・サブスクリプションを管理。HangfireDBはジョブキューと実行履歴を管理。静的メディアファイル(試合・チャンネル画像WebP、音声実況MP3、事前生成ブログHTML)はstorage-sh.rugbyradiolive.comの専用CDNストレージサーバーに保管されています。

SQL Server Entity Framework Core App DB Hangfire DB CDN Storage WebP Images MP3 Audio

AI Content Pipeline

Pipeline dei Contenuti AI

Pipeline de Contenu IA

Pipeline de Contenido IA

AIコンテンツパイプライン

Prompt Catalog Event types Talker styles TailoorTalker AI generator 5 lang · styles Draft Checks Coherence ≥80% Language ≥70% System Message Approved · Stored SQL Server DB Runtime + Media Match rendering Azure TTS · Blog HTML Images · Social · SEO

AI jobs prepare reusable commentary assets, not one LLM call per live event. Hangfire reads prompt catalogs for event types and talker styles, calls TailoorTalker in 5 languages, verifies coherence and language scores, then stores approved system-message versions. During a match, the API renders saved events with those approved messages. Separate jobs generate Azure Speech MP3 files, TailoorPainter images, static blog HTML, Facebook cards and SEO sitemaps.

I job AI preparano asset di telecronaca riutilizzabili, non una chiamata LLM per ogni evento live. Hangfire legge cataloghi di prompt per tipi evento e stili di talker, chiama TailoorTalker in 5 lingue, verifica punteggi di coerenza e lingua, poi salva versioni approvate dei messaggi di sistema. Durante la partita, l'API renderizza gli eventi salvati con quei messaggi. Altri job generano MP3 Azure Speech, immagini TailoorPainter, HTML statico del blog, card Facebook e sitemap SEO.

Les jobs IA préparent des assets de commentaire réutilisables, pas un appel LLM pour chaque événement live. Hangfire lit les catalogues de prompts par type d'événement et style de talker, appelle TailoorTalker en 5 langues, vérifie cohérence et langue, puis stocke les versions approuvées des messages système. Pendant le match, l'API rend les événements sauvegardés avec ces messages. D'autres jobs génèrent les MP3 Azure Speech, images TailoorPainter, HTML statique, cartes Facebook et sitemaps SEO.

Los jobs IA preparan recursos de comentario reutilizables, no una llamada LLM por cada evento en vivo. Hangfire lee catálogos de prompts por tipo de evento y estilo de talker, llama a TailoorTalker en 5 idiomas, verifica coherencia e idioma y guarda versiones aprobadas de mensajes de sistema. Durante el partido, la API renderiza eventos guardados con esos mensajes. Otros jobs generan MP3 Azure Speech, imágenes TailoorPainter, HTML estático, tarjetas Facebook y sitemaps SEO.

AIジョブはライブイベントごとにLLMを呼ぶのではなく、再利用できる実況素材を準備します。Hangfireがイベント種別とトーカースタイルのプロンプトを読み、TailoorTalkerを5言語で呼び、整合性と言語スコアを検証して承認済みシステムメッセージのバージョンを保存します。試合中はAPIが保存済みイベントをそれらのメッセージで表示します。別ジョブがAzure Speech MP3、TailoorPainter画像、静的ブログHTML、Facebookカード、SEOサイトマップを生成します。

External Integrations

Integrazioni Esterne

Intégrations Externes

Integraciones Externas

外部インテグレーション

Azure Speech Text-to-Speech
Firebase FCM Push Notifications
Google OAuth Identity / Auth
AI LLM Talker Commentary Gen
ComfyUI AI Image Generation
Facebook API Social Posts
Aruba SMTP Transactional Email
Cloudflare Tunnel / CDN
Sentry Error Monitoring
Google Analytics Web Analytics
Google AdSense Advertising
Firebase Hosting PWA CDN Delivery

Live Match Flow

Flusso di una Partita Live

Flux d'un Match en Direct

Flujo de un Partido en Directo

ライブ試合のフロー

1

Touchline reporter opens the app

The Angular PWA loads from Firebase CDN. The user authenticates with email/password or Google OAuth, receiving a JWT token.

2

Channel and match creation

A rugby club channel is created via the REST API. The match is set up with home/away teams, date, and linked to the channel.

3

Live event reporting

During the match, each event (try, penalty, card...) is stored by the API with score, minute, team and optional player data. Followers can receive Firebase FCM notifications for the latest event.

4

Commentary rendering

When the match is read back, the API combines stored events with approved system messages in the viewer's commentary language and talker style. Headset events keep the reporter's own text.

5

Content factory

Separately, Hangfire jobs maintain the AI message catalog, generate Azure TTS audio, create match/channel images, publish static blog HTML and rebuild SEO sitemaps/social cards.

1

Il reporter apre l'app dal bordo campo

L'Angular PWA si carica dal CDN Firebase. L'utente si autentica con email/password o Google OAuth, ricevendo un token JWT.

2

Creazione canale e partita

Viene creato un canale per la squadra di rugby tramite la REST API. La partita viene impostata con squadre casa/ospite, data e collegata al canale.

3

Reportage degli eventi in diretta

Durante la partita, ogni evento (meta, calcio di punizione, cartellino...) viene salvato dall'API con punteggio, minuto, squadra e possibile giocatore. I follower possono ricevere notifiche Firebase FCM sull'ultimo evento.

4

Rendering della telecronaca

Quando la partita viene riletta, l'API combina gli eventi salvati con i messaggi di sistema approvati nella lingua e nello stile di telecronaca dell'utente. Gli eventi headset mantengono il testo scritto dal reporter.

5

Fabbrica dei contenuti

Separatamente, i job Hangfire mantengono il catalogo di messaggi AI, generano audio Azure TTS, creano immagini di partite/canali, pubblicano HTML statico del blog e rigenerano sitemap SEO/card social.

1

Le reporter ouvre l'app depuis le bord du terrain

L'Angular PWA se charge depuis le CDN Firebase. L'utilisateur s'authentifie avec email/mot de passe ou Google OAuth et reçoit un token JWT.

2

Création du canal et du match

Un canal pour le club de rugby est créé via l'API REST. Le match est configuré avec équipes domicile/extérieur, date, et lié au canal.

3

Reporting d'événements en direct

Pendant le match, chaque événement (essai, pénalité, carton...) est stocké par l'API avec score, minute, équipe et joueur éventuel. Les abonnés peuvent recevoir des notifications Firebase FCM pour le dernier événement.

4

Rendu du commentaire

Lorsque le match est relu, l'API combine les événements stockés avec les messages système approuvés dans la langue et le style de commentaire du spectateur. Les événements headset gardent le texte du reporter.

5

Usine de contenu

Séparément, les jobs Hangfire maintiennent le catalogue de messages IA, génèrent l'audio Azure TTS, créent les images matchs/canaux, publient le HTML statique du blog et reconstruisent les sitemaps SEO/cards sociales.

1

El reportero abre la app desde el campo

La Angular PWA se carga desde Firebase CDN. El usuario se autentica con email/contraseña o Google OAuth, recibiendo un token JWT.

2

Creación de canal y partido

Se crea un canal para el club de rugby mediante la API REST. El partido se configura con equipos local/visitante, fecha y vinculado al canal.

3

Reporte de eventos en directo

Durante el partido, cada evento (ensayo, penalti, tarjeta...) se almacena en la API con marcador, minuto, equipo y posible jugador. Los seguidores pueden recibir notificaciones Firebase FCM del último evento.

4

Renderizado del comentario

Cuando se lee el partido, la API combina los eventos guardados con mensajes de sistema aprobados en el idioma y estilo de comentario del usuario. Los eventos headset conservan el texto del reportero.

5

Fábrica de contenido

Por separado, los jobs Hangfire mantienen el catálogo de mensajes IA, generan audio Azure TTS, crean imágenes de partidos/canales, publican HTML estático del blog y reconstruyen sitemaps SEO/tarjetas sociales.

1

タッチラインのレポーターがアプリを開く

Angular PWAがFirebase CDNから読み込まれます。ユーザーはメール/パスワードまたはGoogle OAuthで認証し、JWTトークンを受け取ります。

2

チャンネルと試合を作成

ラグビークラブのチャンネルをREST APIで作成。試合をホーム/アウェイチーム・日付と共に設定し、チャンネルに紐付けます。

3

ライブイベントのレポート

試合中、各イベント(トライ・ペナルティ・カード...)はスコア、分、チーム、任意の選手情報とともにAPIに保存されます。フォロワーは最新イベントのFirebase FCM通知を受け取れます。

4

実況の表示

試合を読み返すと、APIは保存済みイベントと承認済みシステムメッセージを、閲覧者の実況言語とトーカースタイルに合わせて組み合わせます。ヘッドセットイベントはレポーターの本文を保持します。

5

コンテンツ生成

別経路でHangfireジョブがAIメッセージカタログ、Azure TTS音声、試合/チャンネル画像、静的ブログHTML、SEOサイトマップ、SNSカードを維持・生成します。

Technology Stack

Stack Tecnologico

Stack Technologique

Stack Tecnológico

テクノロジースタック

Frontend

Frontend

Frontend

Frontend

フロントエンド

Angular 18 TypeScript RxJS ngx-translate @angular/fire PWA Service Worker Firebase Hosting Google Play TWA Sentry Angular AdSense

Backend

Backend

Backend

Backend

バックエンド

ASP.NET Core C# Entity Framework Core Hangfire SQL Server JWT Firebase Admin SDK Azure Speech SDK Google APIs Auth MailKit SMTP Cloudflare Tunnel Swagger / OpenAPI
a little help to keep everything free un piccolo aiuto per mantenere tutto gratis un petit coup de pouce pour tout garder gratuit una pequeña ayuda para mantener todo gratis すべてを無料に保つための小さな助け