OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證web
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Webová aplikace Floorball Stars Ligy. Plná funkční parita s mobilní aplikací (fsl-mobile) + veřejná SEO část pro fanoušky. Komunikuje se stejným backendem (fsl-backhand) jako mobilní aplikace. • Next.js 16 (App Router) + TypeScript • Tailwind CSS v4 — design tokeny převzaté z mobilní aplikace • TanStack Query — server state, polling živých zápasů • Zustand — auth store • axios — API klient s českými chybovými hláškami • Google Identity Services — přihlášení V repozitáři je jednoduchý mock API server s testovacími daty (týmy, hráči, zápasy, statistiky, draft, platby, administrace):檢視完整 README ↗
Webová aplikace Floorball Stars Ligy. Plná funkční parita s mobilní aplikací
(fsl-mobile) + veřejná SEO část pro fanoušky. Komunikuje se stejným backendem
(fsl-backhand) jako mobilní aplikace.
npm install
cp .env.example .env.local # vyplň API URL a Google Client ID
npm run dev # http://localhost:3000
V repozitáři je jednoduchý mock API server s testovacími daty (týmy, hráči, zápasy, statistiky, draft, platby, administrace):
cd mock-api && npm install && node server.js # http://localhost:4000/api
a v .env.local nastav NEXT_PUBLIC_API_URL=http://localhost:4000/api.
Volitelně NEXT_PUBLIC_DEV_LOGIN=1 zobrazí na přihlašovací stránce tlačítko
„Testovací přihlášení".
| Proměnná | Popis |
|---|---|
NEXT_PUBLIC_API_URL | URL backendu včetně /api |
NEXT_PUBLIC_GOOGLE_CLIENT_ID | Google OAuth Web Client ID (musí být povolený i na backendu jako GOOGLE_WEB_CLIENT_ID) |
NEXT_PUBLIC_DEV_LOGIN | 1 = zobrazí testovací přihlášení (jen pro lokální vývoj) |
Web používá Inter (variabilní řez, optical sizing) načítaný z Google Fonts přes
<link> v layout.tsx. Systémové písmo slouží jako okamžitý fallback, takže text je
čitelný i než se Inter stáhne.
Pomocné třídy v globals.css:
.tabular — číslice stejné šířky (tabulky, skóre, statistiky).num-display — velká čísla se sevřenějším prostrkáním.label-caps — kapitálkové popisky sekcí s volnějším prostrkánímPokud bys chtěl nulové externí requesty, dá se Inter self-hostovat přes
next/font/local — stáhnout .woff2 řezy do src/app/fonts/ a nahradit <link>.
src/
├── app/
│ ├── (veřejné) tabulka, zapasy, statistiky, tymy, hraci, rozhodci,
│ │ pavouk, porovnani, hledat, aktuality, aplikace, právní
│ ├── prihlaseni Google Sign-In
│ ├── registrace onboarding (hráč / vedoucí / rozhodčí)
│ ├── muj-ucet rozcestník podle rolí
│ ├── muj-profil, nastaveni, oznameni, platby, zadost
│ ├── draft draft pool, karta hráče, vlastní profil
│ ├── tym/ soupiska, pozvánka, sestava, po-zápasový formulář
│ ├── zapasy/[id]/skore live scoring pro rozhodčí
│ └── admin/ dashboard, týmy, zápasy, rozlosování, rozhodčí,
│ platby, aktuality, žádosti
├── components/ UI knihovna (karty, chipy, modály, skeletony, toasty)
├── hooks/ divize, sezóny, stav v URL
├── lib/ API klient, typy, formátování, validace
└── store/ auth (role hráč / vedoucí / rozhodčí / supervisor)
| Role | Odvození | Přístup |
|---|---|---|
| Host | nepřihlášen | veřejná část |
| Hráč | user.player | profil, platby, draft, oznámení |
| Vedoucí | user.manager.length > 0 | soupiska, pozvánka, sestavy, po-zápas |
| Rozhodčí | user.referee | nasazení, profil, live scoring |
| Supervisor | user.player.isSupervisor | celá administrace |
Role jsou aditivní — jeden účet může mít všechny současně. Klientské kontroly jsou jen UX vrstva, oprávnění vynucuje backend.
Viz DEPLOY.md.