BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Free, web-first boxing training that serves total beginners and experienced boxers / pros in one place. No app download, no proprietary hardware — just step in and train.
Train like a fighter. Look like an athlete.
Landing page, a game-like onboarding flow, real accounts (Supabase), an AI coach that rates your chances and builds a roadmap (Claude), and English/Russian localization. It runs with zero keys — auth shows a "not connected" notice and the AI uses a built-in engine until you add credentials. See SETUP.md to switch on Supabase + Claude.查看完整 README ↗Free, web-first boxing training that serves total beginners and experienced boxers / pros in one place. No app download, no proprietary hardware — just step in and train.
Train like a fighter. Look like an athlete.
Landing page, a game-like onboarding flow, real accounts (Supabase), an AI coach that rates your chances and builds a roadmap (Claude), and English/Russian localization. It runs with zero keys — auth shows a "not connected" notice and the AI uses a built-in engine until you add credentials. See SETUP.md to switch on Supabase + Claude.
app/globals.css via @theme)next/font: Anton (display), Oswald (condensed), Inter (body)npm install
npm run dev # http://localhost:3000
cp .env.example .env.local # then follow SETUP.md to fill in keys
/) — EN/RUSiteNav · Hero · AudienceSplit · FeaturePreview · FinalCTA · SiteFooter, with a LocaleSwitcher.
/onboarding)Client-side stepper (OnboardingFlow) with a "round" progress rail:
PathSelector — Beginner vs. Experienced / ProProfileForm — stats + sex, multi-select & custom goals, flexible timeframe (6w / 3m / 6m / custom), conditional target weightSetupStep — training environment + equipment inventory + free-text notesFuelStep — nutrition access tier, supplements, diet notesAnalysisReveal — AI feasibility %, verdict, phased roadmap, fuel plan, belt unlock (Novice)DashboardPreview — teaser: session, rank ladder, goal/streak, nutrition (marked Preview)Shared state is a useReducer over the Profile in lib/onboarding.ts.
/login, /register, /verify-email, /dashboard (guarded), plus /auth/callback & /auth/signout. Session refresh + route protection in proxy.ts.
app/api/analyze/route.ts — Claude (claude-opus-4-8, override via ANTHROPIC_MODEL) returns the Analysis shape and answers in the active locale; falls back to lib/analysis.ts's local engine on any error or missing key.
app/
layout.tsx # fonts, i18n provider, grain overlay
globals.css # design tokens (@theme), base, animations
page.tsx # landing
onboarding/page.tsx # <OnboardingFlow />
(auth)/ # login, register, verify-email (+ layout)
auth/ # callback + signout route handlers
dashboard/page.tsx # guarded dashboard shell
api/analyze/route.ts # Claude analysis (local fallback)
components/
ui/ landing/ onboarding/ auth/
lib/
onboarding.ts # types, constants (paths/goals/timeframes/equipment/nutrition/ranks), reducer
analysis.ts # feasibility+roadmap engine + requestAnalysis()
supabase/ # client, server, middleware(proxy), user, config
i18n/request.ts # cookie-based locale
messages/{en,ru}.json # translations
proxy.ts # Supabase session + route guard (Next 16 "proxy")
Dark, gritty boxing-gym aesthetic, tokens in app/globals.css: surfaces void→charcoal→surface→surface-2, accents blood/ember, text bone/ash/ash-dim, font-display/font-condensed/font-body. Reusable: .kicker, .badge, .btn*, .panel, .shine, animate-rise/pop/glow.
useTranslations)/dashboard