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 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
내가 응원하는 일곱 팀을 한 화면에. 첫 화면은 팀 로고가 꽂힌 서가고, 표지를 고르면 그 팀의 다음 경기·일정·로스터·순위표·부상자·뉴스가 나온다. 골수팬용이다. 입문자에게 종목을 설명하지 않는다 — 다음 홈경기가 언제인지, 누가 다쳤는지, 지금 몇 위인지를 빨리 보여 주는 것이 전부다. 배포: Vercel — master 에 push 하면 production 으로 나간다(2026-10-04 까지는 production 브랜치가 없는 main 으로 잡혀 있어서 push 가 Preview 로만 갔다). 태평양 시간으로 그린다(팀도 나도 남부 캘리포니아에 있다). 모델을 안 태운다. 공개 JSON 을 그냥 읽는다 — 비용이 0 이고, 지어낼 자리가 없다.README 전문 보기 ↗
내가 응원하는 열여섯 팀을 한 화면에. 첫 화면에서 Los Angeles·Boston·London·Korea 중 하나를 고르면 그 도시의 팀 로고가 꽂힌 서가가 나오고, 표지를 고르면 그 팀의 다음 경기·일정·로스터·순위표·부상자· 뉴스가 나온다.
골수팬용이다. 입문자에게 종목을 설명하지 않는다 — 다음 홈경기가 언제인지, 누가 다쳤는지, 지금 몇 위인지를 빨리 보여 주는 것이 전부다.
Los Angeles
| 팀 | 리그 | 출처 |
|---|---|---|
| Los Angeles Rams | NFL | ESPN |
| Los Angeles Dodgers | MLB | ESPN |
| LA Clippers | NBA | ESPN |
| Anaheim Ducks | NHL | ESPN |
| Los Angeles FC | MLS | ESPN |
| UC San Diego Tritons | Big West 농구 | ESPN |
| Orange Lutheran Lancers | Trinity League 풋볼·야구 | 학교 공식 캘린더 + MaxPreps |
Boston
| 팀 | 리그 | 출처 |
|---|---|---|
| Boston Red Sox | MLB | ESPN |
| Boston Celtics | NBA | ESPN |
| Boston Bruins | NHL | ESPN |
| New England Patriots | NFL | ESPN |
| New England Revolution | MLS | ESPN |
| Harvard Crimson | Ivy League 풋볼 (FCS) | ESPN |
London
| 팀 | 리그 | 출처 |
|---|---|---|
| Chelsea FC | Premier League | ESPN |
Korea
| 팀 | 리그 | 출처 |
|---|---|---|
| LG Twins | KBO | 네이버 스포츠 |
| Suwon Samsung Bluewings | K League 2 | 네이버 스포츠 |
배포: Vercel — master 에 push 하면 production 으로 나간다(2026-10-04 까지는 production
브랜치가 없는 main 으로 잡혀 있어서 push 가 Preview 로만 갔다). 태평양 시간으로 그린다(팀도
나도 남부 캘리포니아에 있다).
모델을 안 태운다. 공개 JSON 을 그냥 읽는다 — 비용이 0 이고, 지어낼 자리가 없다.
site.api.espn.com — 키 없음. 일정·로스터·코치·순위표·뉴스·부상자·라이브 스코어.api-gw.sports.naver.com — 키 없음. ESPN 에 없는 KBO·K리그. 일정·순위표·
뉴스·라이브 스코어·KBO 포스트시즌 시리즈 전적. 로스터는 없다(선수 주소가 리그 전체 기록표다).oluathletics.org — 고등학교는 ESPN 에 아예 없다(검색해도 0건).
학교가 스스로 내보내는 캘린더 피드(.ics) 와 RSS 를 읽는다. 상대·홈/원정·결과·구장·
중계 링크까지 거기 다 있다. 내보내라고 만든 문이라 잘 안 부러진다.__NEXT_DATA__)을 읽는다.
여기만 공개용 문이 아니라서 모양이 어긋나면 그냥 없다고 말하게 해 뒀다 — 특히 로스터는
이름표 없는 배열이라, 줄마다 "전체 이름 == 이름+성" 을 확인하고 하나라도 틀리면 탭을 접는다.매일 크론이 돌면서 Claude 에게 팀마다 웹 검색을 시키고, 그 결과를 Postgres 에 적어 두고, 화면은 그 표를 읽었다. 그게 이 앱의 유일한 고정 비용이었고(8월에 그래서 크론을 껐다), 데이터는 늘 하루쯤 낡아 있었으며, 가끔 모델이 없는 경기를 지어냈다.
지금은 화면을 열 때 그 자리에서 읽는다. 크론도 DB 도 없다. 되살릴 것도 없다.
src/lib/sources/
teams.ts 열여섯 팀 표(도시 칸 포함). 팀을 더하고 빼는 일은 여기 한 줄을 고치는 일이다.
espn.ts ESPN 어댑터
naver.ts 네이버 스포츠 어댑터(KBO·K리그)
sidearm.ts 학교 캘린더(.ics)·RSS 어댑터
index.ts 화면이 부르는 창구. 어느 출처인지는 여기서 갈리고 여기서 끝난다.
split.ts 일정을 다음 경기·다음 홈경기·최근 경기로 가르는 셈(바깥을 안 부른다)
src/app/
page.tsx 도시 고르기 (Los Angeles · Boston · London · Korea)
[city]/ 도시 서가
team/[slug]/ 팀 화면 (Now · Schedule · Roster · Standings · News)
값은 Next 데이터 캐시가 들고 있고 TTL 은 종류마다 다르다 — 점수는 1분, 일정은 15분,
로스터는 6시간. 일정만은 받은 JSON 이 아니라 추려 낸 결과를 캐시한다: MLB 의 162경기
일정이 3.7MB 라 2MB 한도를 넘어 캐시를 조용히 빠져나갔다(espn.ts 의 readFresh 참고).
null 이 "못 가져왔다" 이고 [] 가 "없다" 다.
화면도 다르게 적는다 — 하나는 기다리는 것이고 하나는 새로고침이다.npm install
npm run dev
환경 변수는 SLKeyboard 엔드포인트에만 필요하다. 팀 데이터는 키가 없다.
| 변수 | 쓰는 곳 |
|---|---|
KEYBOARD_API_KEY | /api/transcribe, /api/correct (SLKeyboard 앱이 부른다) |
AI Gateway 는 Vercel OIDC 로 붙는다(/api/transcribe, /api/correct). 팀 데이터는 모델을 안 쓴다.
챗 어시스턴트(/api/chat, /api/speak)는 2026-10 에 걷어냈다.
ios/ 에 WKWebView 껍데기가 있다. 화면은 이 웹앱을 그대로 쓰고, 네이티브는 당겨
새로고침·복귀 시 갱신·바깥 링크·마이크만 맡는다. 빌드와 테스트플라이트는
ios/README.md.
천장에 걸린 우승 배너. python3 assets/icon/gen_icon.py 로 다시 만든다. 아이폰 앱
아이콘은 같은 그림의 모서리 안 깎은 판을 쓴다 — iOS 가 자기 마스크를 한 번 더 씌운다.