Salta al contenuto
Francesco Annunziata

← Progetti

2026Università

MatchWeb

Portale per tre campionati sportivi: calendario, pronostici a punti, recensioni e classifica utenti. Mi sono occupato dell interfaccia.

  • Java
  • Spring Boot
  • Thymeleaf
  • Bootstrap
  • Spring Security
  • OpenFeign

Il progetto

MatchWeb è il portale di tre campionati — pallanuoto, pallavolo e basket — con la parte pubblica aperta a tutti e un’area riservata a chi si registra. Progetto del corso di Programmazione Web all’Università di Trento, sviluppato in due.

Dalla parte pubblica si consultano le squadre di ogni disciplina, il calendario, le recensioni con voto a stelle e gli sponsor. Da registrati si accede alla schedina: si pronosticano i risultati della giornata e un servizio calcola il punteggio quando arrivano gli esiti, alimentando una classifica generale a cui l’amministratore assegna dei premi. C’è poi un’area di amministrazione per gestire gli utenti, far avanzare la giornata di campionato e pubblicare le news.

Due applicazioni, non una

MatchWeb non gestisce direttamente le partite: quelle stanno in PartiteWeb, un servizio separato che espone tre endpoint REST — calendario completo, partite di una giornata, risultati di una giornata.

Il collegamento passa da un client Feign dichiarativo: si descrive l’interfaccia remota come se fosse un’interfaccia Java normale e Spring genera l’implementazione. L’indirizzo del servizio sta in configurazione, non nel codice, così le due applicazioni si possono far girare su porte diverse in locale e su host diversi in produzione senza toccare una riga.

Il vantaggio vero non è tecnico: avendo separato le due parti, io e il mio compagno abbiamo potuto lavorare in parallelo senza pestarci i piedi, con il contratto REST come unico punto di accordo.

Cosa ho fatto io

Mi sono occupato principalmente dello studio e della realizzazione dell’interfaccia.

Ho portato i template a una struttura a fragment Thymeleaf riutilizzabili — barra di navigazione, piè di pagina, banner delle news, blocco dei campionati — invece di ripetere lo stesso markup su ogni pagina, e ho riorganizzato i 25 template in cartelle per area: pubblica, utente, amministrazione. Ho introdotto Bootstrap al posto del CSS scritto a mano, curato logo e stili, e uniformato tutti i testi dell’interfaccia in italiano.

Diverse funzionalità le ho fatte da capo a fondo, dalla query alla pagina: la schedina con il servizio che calcola i punteggi, la classifica utenti, la pagina calendario, gli sponsor e il banner delle news.

Sono 24 dei circa 80 commit del progetto; il resto è del mio compagno di corso, che ha seguito soprattutto il lato dati e l’infrastruttura.

Lo stack

Spring Boot con Thymeleaf per le pagine renderizzate lato server e Bootstrap per la grafica. Spring Security gestisce autenticazione e ruoli, con thymeleaf-extras-springsecurity6 per mostrare o nascondere pezzi di interfaccia a seconda di chi guarda. I dati stanno su H2 su file, l’accesso è via JdbcTemplate con RowMapper scritti a mano. Spring Cloud OpenFeign per il dialogo con PartiteWeb.

Cosa ne ho tratto

Che un’interfaccia si tiene insieme con i fragment, non con la disciplina: finché la navbar è copiata su venti pagine, prima o poi venti pagine divergono. E che dividere un progetto in due servizi costa qualcosa in configurazione, ma ripaga subito quando le persone che ci lavorano sono più di una.