Powrót do realizacji
    Serwis statystyk sportowych, projekt własny

    Unihokej Stats

    Bezpłatny serwis ze statystykami Ekstraligi Unihokeja, których nie ma w oficjalnym serwisie związku. Pięć sezonów rozłożyliśmy na pojedyncze zdarzenia, policzyliśmy od nowa i sprawdziliśmy co do punktu z oficjalną tabelą.

    Klient

    Unihokej Stats

    Rok

    2026

    Główne technologie
    React 19PostgreSQLCloudflare
    Unihokej Stats — tabela statystyk drużyn Ekstraligi Unihokeja na laptopie i telefonie

    Liga miała protokoły meczowe, nie miała statystyk

    Unihokej Stats liczy statystyki Ekstraligi Unihokeja mężczyzn, najwyższej klasy rozgrywkowej prowadzonej przez Polski Związek Unihokeja. Dyscyplina jest niszowa: oficjalny serwis podaje tabelę i podstawowe klasyfikacje, a reszta liczb zostaje w protokołach pojedynczych meczów. Zbudowaliśmy ten serwis u siebie, bez zlecenia, na tej samej mechanice, którą stosujemy w projektach dla firm.

    W bazie leży pięć sezonów, od 2021/22 do 2025/26: 320 meczów, 3672 gole, 1433 kary i 460 zawodników. Każdy mecz rozłożyliśmy na pojedyncze zdarzenia z czasem co do sekundy, więc sezony da się zestawiać ze sobą, a nie tylko przeglądać jeden po drugim.

    Na stronie są trzy widoki. Drużyny to tabela z 26 wskaźnikami, którą da się obrócić, zestawić po trzy zespoły obok siebie i zawęzić do Top 5. Zawodnicy otwierają się na kartach liderów, pod nimi jest pełna tabela z wyszukiwarką i sortowaniem zapisanym w adresie. Sędziowie dostali sam licznik meczów, kar i minut, bez ocen i bez sugerowania korelacji.

    Najwięcej wnoszą statystyki, których w oficjalnym serwisie nie ma: procent czasu spędzonego na prowadzeniu, punkty zdobyte przy remisie albo stracie jednej bramki, końcówki od 50. minuty, skuteczność gry w przewadze i w osłabieniu, duety regularnie współpracujące przy golach, powroty z trzech goli straty. Olimpia Łochów prowadziła w sezonie 2025/26 przez 68,2% czasu gry, przy 42 punktach w rundzie zasadniczej.

    Dane były publiczne, ale nie do użytku

    Wyzwanie

    Związek publikuje protokoły dla czytelnika, nie dla maszyny. Każdy mecz to osobna podstrona, zawodnicy nie mają identyfikatorów, a nazwisko bywa zapisane raz jako „Imię Nazwisko”, raz odwrotnie. Bramka samobójcza ma pustą etykietę strzelca, a niewykorzystany karny wygląda w kodzie jak gol. Żeby porównać sezony albo policzyć cokolwiek ponad sumę bramek, trzeba było przejść 320 stron po kolei.

    Rozwiązanie

    Parser chodzi po linkach z kalendarza, pobiera protokoły i zapisuje surowe zdarzenia do Postgresa. Każda statystyka to widok SQL, więc nowy wskaźnik powstaje z edycji jednego pliku, bez ponownego pobierania. Po weekendzie meczowym jedna komenda dokłada nowe mecze i sprawdza je z danymi związku. Jak ten proces działa krok po kroku, opisaliśmy w osobnym case study.

    Zobacz automatyzację pobierania danych

    Baza liczy, strona czyta gotowy plik

    Zdarzenia w Postgresie, statystyki jako widoki SQL, a na stronę trafia jeden plik JSON o wadze około 500 KB. Odwiedziny nie ruszają bazy i nic nie kosztują.

    Baza trzyma zdarzenia, nie gotowe tabelki: gol z czasem co do sekundy, asysta, kara z kodem i wymiarem, frekwencja. Dopiero z tego liczą się wskaźniki. Stan liczebności na boisku odtwarza własny silnik z osi czasu kar, bo flagi gry w przewadze w protokołach bywają błędne w obie strony.

    Frontend to React 19 z TypeScriptem i Tailwindem v4, zbudowany przez Vite i postawiony na Cloudflare. Strona nie łączy się z bazą w czasie działania: jedna komenda wypieka widoki SQL do statycznego pliku JSON, a Vite pakuje go razem z kodem. Sortowanie tabeli zawodników zapisuje się w adresie, więc konkretny widok da się wysłać linkiem. Statystyki odwiedzin zbieramy dopiero po zgodzie w oknie cookies.

    React 19TypeScriptTailwind CSS v4ViteNode.jsPostgreSQL (Neon)Widoki SQLCloudflare

    Pięć sezonów w archiwum, nowe mecze co tydzień

    Serwis działa pod adresem unihokejstats.pl i dla kibiców jest bezpłatny. Sezon 2025/26 mamy w komplecie: wszystkie 62 protokoły sparsowane, tabela policzona ze zdarzeń zgadza się co do punktu z oficjalną tabelą związku, a statystyki 219 zawodników pokrywają się z danymi ze stron klubowych.

    Nowy sezon to jeden wpis w konfiguracji, nowa statystyka to jeden widok SQL. Ten sam schemat obsłuży rozgrywki kobiet i I ligę, kiedy przyjdzie na nie czas. Dane odświeżamy po weekendzie meczowym, a publikacja na Cloudflare zajmuje dwie do trzech minut.

    5 sezonów

    od 2021/22 do 2025/26 w jednym archiwum

    3672

    gole, każdy z czasem co do sekundy

    26

    wskaźników na drużynę, do trzech drużyn obok siebie

    Mają Państwo dane rozsypane po cudzej stronie?

    Ceny konkurencji, przetargi, rejestry, notowania surowców. Pobieramy je, sprawdzamy z oryginałem i przenosimy do Państwa bazy. Prosimy o kontakt, omówimy źródło danych.