Tento projekt je webová aplikace pro tým CB BUTchers. Slouží jako společný kalendář, seznam událostí, nástroj pro docházku a statistiky zápasů. Celý projekt je navržen tak, aby členové týmu měli v jednom místě přehled o plánovaných zápasech, trénincích a aktuální účasti.
Na hlavní stránce se zobrazují:
- měsíční kalendář s událostmi
- filtry podle zdroje (
excel,pdf,ical,manual) - seznam nejbližších událostí
- detail konkrétní události po kliknutí
- přehled účasti členů pro danou akci
- tlačítka pro přihlášení, odhlášení, změnu PINu a export
.ics
Uživatel si zde může:
- prohlížet zápasy a tréninky
- zobrazit detaily události
- označit svou účast jako Ano / Možná / Ne
- přidat nebo smazat ruční trénink (pokud má oprávnění)
- zadat výsledek zápasu a uložit ho do systému
Na stránce statistik se ukazují:
- celkový počet zápasů, výher, proher a remíz
- úspěšnost a skóre
- rozdíl branek
- forma posledních 5 utkání
- statistiky podle soutěže
- historie odehraných zápasů
Tato stránka čte výsledky zápasů z API a zobrazuje je v přehledné tabulce a kartách.
Aplikace načítá seznam událostí z API endpointu GET /api/events.
Do kalendáře se načítá:
- datum a čas události
- název a popis
- zdroj (
excel,pdf,ical,manual) - typ události (zápas, trénink, apod.)
- informace o výsledku, pokud zápas už má zaznamenaný výsledek
Pokud API není dostupné, frontend se pokusí načíst fallback data z data/events.json.
Aplikace načítá seznam uživatelů z GET /api/users.
V seznamu je možné vybrat jméno a přihlásit se PINem. Každý uživatel má:
- unikátní
id - jméno
- PIN (uložený v hashované podobě)
- příznak, zda může spravovat tréninky
Při otevření detailu události se načítá data o účasti z GET /api/attendance?eventId=... a přehled z GET /api/attendance-summary.
Na stránce se pak zobrazuje:
- kdo je přihlášen
- kdo má Ano / Možná / Ne
- celkový souhrn účasti na dané události
Výsledky se načítají jako součást API pro události i zvlášť přes GET /api/stats.
Zápas může mít:
- skóre CB BUTchers : soupeř
- poznámku ke zápasu
- čas poslední úpravy
Při změně účasti se uloží data do D1 databáze přes endpoint PUT /api/attendance.
Ukládá se:
eventIduserIdstatus(yes,maybe,no)- čas úpravy
Výsledky zápasů se ukládají do tabulky match_results přes endpoint PUT /api/results.
Ukládá se:
- id zápasu
- skóre pro CB BUTchers
- skóre soupeře
- poznámka
- uživatel, který výsledek upravil
- čas poslední změny
Výsledek je oddělený od importovaných dat, takže se nevymaže ani nepřepíše při přepnutí nebo opětovném importu eventů.
Ruční tréninky se zapisují přes POST /api/trainings a mažou přes DELETE /api/trainings/:id.
Ukládají se pole jako:
- datum
- začátek a konec
- místo a dráha
- poznámka
- zdroj typu
manual
Po přihlášení se v prohlížeči uloží session token do sessionStorage. Tento token se používá pro autorizaci dalších požadavků na API.
Uživatel vybere své jméno a zadá PIN. Poté se přihlásí do systému. Každý přihlášený člen může:
- zobrazit kalendář
- měnit svůj PIN
- označit účast
- zadat výsledek zápasu
Přihlášený uživatel může změnit svůj PIN v dialogu „Změnit PIN“.
PIN se ověřuje proti uloženému hashu a saltu, ne v otevřené podobě.
Uživatelé s příznakem can_manage_trainings mohou přidávat a mazat ruční tréninky. To je odděleno od běžné účasti na zápasech.
Projekt pracuje se zdroji:
- Excel (
.xlsx) - iCal/ICS
- ruční data vytvořená v aplikaci
Importní skript scripts/build_events.py z těchto zdrojů vytváří datovou sadu, která se pak použije pro kalendář.
index.html– hlavní stránka kalendářeapp.js– logika kalendáře, přihlášení, docházky, výsledků a exportustyles.css– styl hlavní stránkystats.html– stránka statistikstats.js– výpočet a zobrazení statistikstats.css– styl Statistikconfig/config.json– základní konfigurace webu a APIdata/– data pro fallback a importsources/– zdrojové soubory pro importcloudflare/src/index.js– API Workercloudflare/migrations/– SQL migrace pro databázicloudflare/users.example.json– vzor uživatelských dat
Projekt obsahuje:
- plánované zápasy a tréninky
- seznam členů týmu
- docházku jednotlivých členů
- výsledky zápasů
- souhrn statistik za sezonu
Všechny tyto informace jsou propojené do jednoho rozhraní, aby tým nemusel pracovat ve více nástrojích.
- přihlášení je přes jméno a PIN
- PIN se neukládá v čisté podobě
- token přihlášení je uložen jen v prohlížeči
- API omezuje přístup podle session tokenu a oprávnění
Aplikace je týmový curling kalendář, který:
- načítá zápasy a tréninky z různých zdrojů,
- zobrazuje je v kalendáři,
- umožňuje členům přihlásit se a označit účast,
- ukládá výsledky zápasů a statistiky,
- poskytuje jednoduchý přehled pro celý tým.
Cílem projektu není jen plánování, ale i evidování týmové aktivity v jednom systému.