BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證An Elo Scoreboard for Snooker Players in a Snooker Club.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
SCAA Snooker ELO is a shared snooker-club rating and record-keeping app. It publishes a live leaderboard from a common database, records match results, tracks player form and high breaks, and recalculates ratings as the club's history changes.
The interface is currently written for Traditional Chinese (Hong Kong), while the codebase and deployment configuration are TypeScript/Next.js-compatible.檢視完整 README ↗Snooker ELO is a shared snooker-club rating and record-keeping app. It publishes a live leaderboard from a common database, records match results, tracks player form and high breaks, and recalculates ratings as the club's history changes.
The interface is currently written for Traditional Chinese (Hong Kong), while the codebase and deployment configuration are TypeScript/Next.js-compatible.
docs/matchmaking-phase1-spec.md; release steps: docs/play-release.md.Visitors can browse the public leaderboard, players, and confirmed matches. A signed-in member can maintain their own player profile and create or edit matches involving them. Administrators can manage the full club roster and shared ELO configuration.
postgres and Drizzle tooling>=22.13.0Set one of the following environment variables before starting the app:
POSTGRES_URL=postgres://...
# DATABASE_URL and SUPABASE_DB_URL are also supported
The server creates or upgrades the required auth and rating tables on first use. Supabase migration files are also available under supabase/migrations/ for deployments that prefer explicit migrations.
Only the cup draw messages are emailed — matchmaking sends nothing; members find out by opening the app or from a link a friend shares. Set either a Resend key or your own relay endpoint; with neither set, notification calls are an inert no-op:
RESEND_API_KEY=... # plus NOTIFY_EMAIL_FROM
[email protected]
NOTIFY_WEBHOOK_URL=... # alternative: POST {to,subject,text} to your own relay
NOTIFY_WEBHOOK_TOKEN=... # optional bearer token for the webhook
NEXT_PUBLIC_SITE_URL=https://... # used to deep-link from emails back into the app
npm install
npm run dev
Then open the local URL printed by Vinext. The app starts with an empty shared state if no rating data has been seeded.
npm run dev # start the local development server
npm run build # create the production build
npm start # serve the Next.js production build
npm test # build and run the ELO/rendering tests
npm run lint # run ESLint
npm run db:generate # generate Drizzle migrations after schema changes
To regenerate the link-preview banners in public/ after changing their design in
lib/story-card.ts (needs Playwright's Chromium: npx playwright install chromium):
node --experimental-strip-types scripts/render-share-images.mjs
The Instagram story cards are drawn in the browser from the same module and need no build step.
To import a JSON state export into PostgreSQL:
POSTGRES_URL=postgres://... node scripts/seed-state.mjs path/to/state.json
The JSON must contain the app's state shape: players, matches, settings, and audits.
app/ Pages, UI, auth flows, and API routes
including the public share pages /m/<match>, /p/<player>, /c/<cup>, /s/<slot>
db/ PostgreSQL state and member/auth access
supabase/migrations/ Explicit database migrations
scripts/ Data import helpers
tests/ ELO model and rendered-build tests
public/ PWA manifest and icons
The project is configured for Vercel-style deployment. Set POSTGRES_URL (or a supported equivalent) in the deployment environment, run the configured Next.js build, and ensure the database is reachable over SSL. The production app uses the same public/member/admin permission model as local development.