BikeControl (SwiftControl)
Zwift Click과 Shimano 컨트롤러를 MyWhoosh와 Rouvy와 Zwift에서 쓴다
무료 팀 관리 앱, 신청·취소·명단·채팅·도우미·카풀 제공, 오픈소스 자체 설치, 비밀번호 없이
Kostenlose Mannschafts-App für Vereine: Zu- und Absagen, Kader, Chat, Helferdienste, Fahrgemeinschaften. Open Source, eigene Installation, ohne Passwörter.
스포츠·피트니스TypeScript · JavaScriptGitHub @witscher온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Free team app for amateur sports clubs: responses, squads, chat, helper duties, carpools. Own installation on Cloudflare, invitation only, passkeys.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Find Kabine useful? Consider giving the repo a ⭐ to support development.
Deutsch: README auf Deutsch
A self-hosted team app for amateur sports clubs that runs entirely on Cloudflare, with no server to run and nothing to pay on the free plan.
Trainings and games with yes/no responses, squads, team chat, push notifications, helper duties and carpools, for players, parents and coaches. Each club deploys its own copy into its own Cloudflare account with one click.
Try the demo, no sign-up: as a player · as a parent · as a coach · as an admin
It started as the app of a handball club, where several hundred players, parents and coaches use it every day. The demo and all pictures show an invented club; more in docs/screenshots.
git clone https://github.com/witscher/kabine && cd kabine
npm ci # Node.js 22 or newer
npm run secrets:generate -- --dev # local secrets in .dev.vars
npm run db:reset:local # local database with the invented demo club
npm run dev # http://localhost:5173
The first admin is set up at /einrichtung#<ADMIN_BOOTSTRAP_TOKEN> (see .dev.vars). npm run check runs the typecheck and all tests, npm run e2e the Playwright suite.
To run it for a club, use the Deploy button above: it creates the copy and all resources, and the free plan is enough for a typical club. Step by step: docs/install.md; running it (backups, season change, updates): docs/operation.md.
flowchart LR
app["PWA (Preact)<br/>installable, offline view"] -- "HTTPS / WebSocket" --> worker["Worker (Hono)<br/>API, passkeys, static assets"]
worker --> d1[("D1<br/>club data")]
worker --> kv[("KV<br/>logo, switches")]
worker --> chat["Durable Objects<br/>team chat, live helper plans"]
worker --> queue["Queue"] --> push["Web Push (VAPID)"]
cron["Cron, hourly"] --> worker
.po files anyone can correct.Built with TypeScript, Hono, Preact and Lingui. Architecture: docs/dev/architecture.md; design and decisions: docs/dev/design.md, docs/dev/decisions.md.
Optional modules: helper duties, youth referees, carpools, game schedules from handball4all (German handball), SMS codes and reminders.
One installation per club, in the club's own Cloudflare account: there is no central server, and the authors of Kabine have no access to any club's data. It is invitation-only, not in the app stores, and stores only what a team needs week by week. The full data inventory, deletion periods and a privacy policy template are in docs/privacy.md; questions about costs, GDPR and why Cloudflare are answered on kabine.dev.
The repository is built for contributions made with a coding agent (Claude Code, Codex, Cursor, …): every contribution is a folder or a file of its own, a generator creates the skeleton, and contract tests show at once what is missing. Good places to start:
| Add | Command |
|---|---|
| A sport (age groups, playing times, typical helper duties) | npm run new -- sport basketball --name "Basketball" |
| Game schedules from an association's system (nuLiga, SAMS, …) | npm run new -- connector nuliga --vendor "nuLiga" --domain nuliga.example --sport handball |
| A function clubs can switch on | npm run new -- module polls --label "Polls" --label-de "Umfragen" |
| A language or a better translation | docs/dev/translation.md |
The entry point for people and agents is AGENTS.md. A person sends the pull request, has tried it locally and answers questions. Ideas and requests: issues; security problems: SECURITY.md.
AGPL-3.0-only, see LICENSE. You may run, change and share Kabine. If you run a changed version for others, you must offer them its source code.
If Kabine is useful to you or your club, a ⭐ helps others find it.