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.