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 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An AI sports-passport and pathway app for athletes aged 18 and over. Live at
golsz.com.
An athlete records what they have actually done — sport, position, club,
benchmarks with the method and date each was measured — names a goal, and gets
a route with dated steps. An assistant called Scout reads that record and
answers in the athlete's own context.
npm run check must pass before any push. Pushing to main auto-deploys
production; there is no separate deploy step.
If you edit the JSX inside golsz-app.html:
The tests are the thing to read firstREADME 전문 보기 ↗An AI sports-passport and pathway app for athletes aged 18 and over. Live at golsz.com.
An athlete records what they have actually done — sport, position, club, benchmarks with the method and date each was measured — names a goal, and gets a route with dated steps. An assistant called Scout reads that record and answers in the athlete's own context.
npm ci # required: 8 suites need @babel/parser and @babel/traverse
npm run check # the gate — syntax-checks api/*.js and js/*.js, then the suite
npm run check must pass before any push. Pushing to main auto-deploys
production; there is no separate deploy step.
If you edit the JSX inside golsz-app.html:
npm run compile # regenerates js/app.js — the gate fails if you forget
| Path | What it is |
|---|---|
index.html, css/, js/main.js | The marketing site. Static, English only. |
golsz-app.html | The whole app — one ~1MB file, React via CDN, JSX in one text/babel-deferred block. |
js/app.js | Generated. tools/precompile.cjs compiles the JSX at author time; the browser never compiles. Do not hand-edit. |
api/*.js | Vercel serverless functions. At the 12-function ceiling — adding one means removing one. |
supabase-migration-NNN-*.sql | The database, one numbered migration at a time. Each carries its reasoning. |
supabase-schema.sql | Reference for what is deployed. See the warning below. |
tests/*.cjs | 110 suites, 5,252 assertions (as of 2026-10-22; node tests/run-all.cjs prints the current count). Plain Node, no framework. |
There is no framework. tests/run-all.cjs runs every test_*.cjs. Many suites
lift real expressions out of the source and eval them, so they fail when the
source changes rather than when a mock does, and several have been verified to
fail when the bug they guard is reintroduced.
They are also where the codebase keeps its history: most suites open with the
specific failure that motivated them. test_hook_order.cjs,
test_write_error_checked.cjs, test_client_scope.cjs and
test_features_off.cjs are the ones that explain the most about how this app
breaks.
supabase-schema.sql is an append-only ledger, not a clean dump. It is
safe to run against a brand-new project and unsafe against the live one — it
contains drop policy / create policy pairs and data statements. Change the
live database with a new numbered migration instead.&& ( or ? ( and its element parses as an
object literal and has taken the app down five times. Comments go above the
guard.test_hook_order.cjs
guards it.{ error } rather than throwing. Every write
must check it. test_write_error_checked.cjs guards it.STRIPE_PORTAL_LINK is correct (this bullet used to say it was wrong;
corrected 2026-10-22). It holds a genuine billing.stripe.com/p/login/...
customer-portal link. It shares its short code with the CAD Basic Payment Link
only because Stripe reuses short codes across the two hosts (verified against
the live account on 2026-10-09), so do not "fix" it. Subscribers can cancel at
period end, update their card and see invoices there; plan switching is off.PARENT_ACCOUNTS_ENABLED in
golsz-app.html; the plumbing is intact and production had zero of them.search_players(). The function and athletes.scout_visible are kept so it
returns by decision rather than by rebuild.PublicPassport looks dead to a
grep but is mounted via React.createElement — it is live.CLAUDE.md is the long-form version of all of this, including the reasoning
behind most decisions. SETUP.md covers standing up a fresh environment.