BikeControl (SwiftControl)
Zwift Click과 Shimano 컨트롤러를 MyWhoosh와 Rouvy와 Zwift에서 쓴다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Same app as before, built to run as a real website instead of a Claude artifact. Each person's picks are private while the week is still open, PIN-protected, and lock in permanently once submitted — after that, everyone can see everyone's picks for that week.
/api/storage.js, a small serverless
function backed by a Redis database (not Claude's artifact-only storage).locked:week{n}:{name}) and rejects any further changes to
them — even a direct API call, not just the button in the UI.Push this folder to a GitHub repo, then import that repo into Vercel (vercel.com → New Project → select the repo).
Add a database. In your project, open Storage in the sidebar →
Create Database / Browse Marketplace → install "Upstash for
Redis". Create a database and connect it to this project, for all
three environments (Production, Preview, Development). Vercel injects
KV_REST_API_URL / KV_REST_API_TOKEN (or UPSTASH_REDIS_REST_URL /
UPSTASH_REDIS_REST_TOKEN) automatically — api/storage.js checks for
either name.
Set everyone's PINs. In the project's Settings → Environment
Variables, add a variable named PICK_PINS with a JSON value mapping
each name to a short PIN, e.g.:
{"Ace":"4821","Cisco":"1093","Dad":"5567","Lena":"2245","Mom":"8830","Tonio":"3391"}
Pick your own numbers — these are just examples. Add this for Production (and Preview/Development if you use those). Tell each family member their own PIN separately from the link you send them (e.g. text it, don't put it in the link).
Also add a second variable, COMMISSIONER_PIN, with a single PIN of your
own choosing (e.g. 7412). This gates the "enter final results" panel —
only whoever knows this PIN can open it and record game outcomes.
Redeploy so the build picks up the new environment variables.
Visit your *.vercel.app URL.
Each family member's link is yoursite.vercel.app?user=Name (e.g.
?user=Dad). Build each one yourself and send it to that person — there's
no in-app list of everyone's links. Send each person their link and,
separately, their PIN. The first time they open their link they'll be
asked for the PIN; after that it's remembered on their device (stored in
that browser only), so they won't need to re-enter it every visit.
If someone's PIN is ever compromised (e.g., a shared family device), just
change it in PICK_PINS, redeploy, and their old saved PIN on every device
stops working — they'll be asked to enter the new one next time.
npm install
vercel dev
vercel dev needs the same environment variables locally, including
PICK_PINS — run vercel env pull after linking the project to pull them
into a .env.local file.
results:week{n}), progress counts, and lock status
(locked:week{n}:{name}) are intentionally public — everyone needs to
see final results and who's submitted. Only the specific teams someone
picked stay gated, and only until that person submits.WEEKS object near the top of the
<script> in index.html — add a new week's games there each week and
redeploy.COMMISSIONER_PIN,
entered once per device the same way the personal pick PINs work.