BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A private network for amateur combat sports: organizers publish fight cards, clubs
nominate fighters, and viewers follow events live. This is the web app; the
mobile app lives in a sibling repo (pugna-mobile-app) and talks to the same
backend in server/.
The backend uses a local SQLite file (server/data/pugna.db, created
automatically) — no external database to set up.
Web app (.env.local at the repo root, see .env.example):
• VITE_API_URL — base URL of the API server. Defaults to http://localhost:4000
if unset, so it's only needed once you're pointing at a deployed backend.README 전문 보기 ↗A private network for amateur combat sports: organizers publish fight cards, clubs
nominate fighters, and viewers follow events live. This is the web app; the
mobile app lives in a sibling repo (pugna-mobile-app) and talks to the same
backend in server/.
Two processes, in separate terminals:
cd server && npm install && npm run dev # API on http://localhost:4000
npm install && npm run dev # web app on http://localhost:5173 (or the port Vite prints)
The backend uses a local SQLite file (server/data/pugna.db, created
automatically) — no external database to set up.
Web app (.env.local at the repo root, see .env.example):
VITE_API_URL — base URL of the API server. Defaults to http://localhost:4000
if unset, so it's only needed once you're pointing at a deployed backend.Server (server/.env, see server/.env.example):
JWT_SECRET — auto-generated on first run if not set; only set it yourself
if you need a stable secret across restarts (e.g. in production).GOOGLE_CLIENT_ID_WEB / _IOS / _ANDROID — optional, only needed to enable
"Sign in with Google". Must match the mobile app's
EXPO_PUBLIC_GOOGLE_CLIENT_ID_* values (same client IDs, without the prefix).The server seeds itself automatically the first time it starts against an
empty database (server/src/seed.js, called from server/src/index.js) —
demo clubs, a couple of events, and the built-in weight-class template packs
(IBA 2024 Elite, Club Show, World Boxing).
To get a fresh seed, stop the server and delete the database file:
rm server/data/pugna.db
npm --prefix server run dev
There's no separate "seed one event" command — the seeding is all-or-nothing
based on whether the events/clubs/template_packs tables are empty. For a
one-off test event, it's usually faster to sign up an organizer account
through the app and create it directly.
Each event's QR code (Organizer → Manage Event → Setup tab) is generated at a
fixed 180×180px raster, sized for on-screen preview and small downloads —
scanning distance matters more than print size for QR codes in practice, but
if you're printing large (posters, banners), don't naively upscale the
downloaded PNG: it's not vector, and stretching it past roughly its native
size will blur the modules and hurt scan reliability. For a large print,
either keep the physical print size small (a few centimeters per side is
usually plenty for a phone camera at arm's length) or regenerate the code at
a higher resolution by changing the width passed to QRCode.toDataURL(...)
in src/pages/EventManage.tsx before printing.
See AGENTS.md for the frontend's file layout and conventions,
and docs/contract.md for the frontend/backend API
contract shared with the mobile app.