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분 만에 확인하기League Page v2: two-league fantasy publication system (private source; audited static output deploys to Vercel)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A league "newspaper" for two Sleeper fantasy football leagues — Disco Chat and
The Surfeit — with a private Commissioner's Desk for authoring each weekly issue
and a static public site for reading them.
• Full product spec: docs/SPEC.md
• Architecture decisions: docs/DECISIONS.md
• Current state / next steps: docs/HANDOFF.md
• Working conventions: CLAUDE.mdREADME 전문 보기 ↗A league "newspaper" for two Sleeper fantasy football leagues — Disco Chat and The Surfeit — with a private Commissioner's Desk for authoring each weekly issue and a static public site for reading them.
| Layer | Where it lives |
|---|---|
| Private source | GitHub private repo Biomusician/league-page-v2 |
| Private authoring | Commissioner's Desk, runs only on this machine; its runtime state (data/, logs/, editorial/managers.json) never enters git |
| Published data | Sanitized immutable issue snapshots under published/, git-tracked |
| Public build | scripts/build_public_site.py renders dist/ and fails on any privacy-audit finding |
| Deployment | Vercel production (league-page project) serves the site branch, which carries only the audited dist/ output — see docs/DEPLOY.md |
Double-click Launch Commissioner Desk.cmd in this folder (or the
"League Commissioner Desk" desktop shortcut). It starts the private server,
waits until it is healthy, and opens your browser at
http://localhost:8026/commissioner. Keep the terminal window open while you
work; closing it stops the Desk. If 8026 is held by another program, the
launcher picks a nearby free port and opens that instead; if a Desk is
already running, it just opens the browser. Startup log:
logs/desk-startup.log.
Troubleshooting fallback (what the launcher runs for you):
.venv\Scripts\python.exe scripts\desk.py
Every Tuesday at noon a cloud routine ("League-Page Tuesday prep", https://claude.ai/code/routines) posts a research pack: last week's post-mortem, next week's matchups, a per-team news sweep, award candidates, and the reminder that writing is due Wednesday evening. It runs in the cloud on public data only — the steps below are the local half, and the Desk's ghost briefs stay authoritative.
Launch Commissioner DeskNo terminal needed. The CLI below is troubleshooting fallback only.
.venv\Scripts\python.exe scripts\export_commissioner_state.py
Writes a complete, checksummed bundle of everything you have written and
decided (prose, approvals, revisions, team-name overrides, rankings,
story/award decisions, manager context) to backups/ — gitignored,
because it contains private material. To prove a backup is good, restore
it somewhere harmless and diff the checksum:
.venv\Scripts\python.exe scripts\import_commissioner_state.py backups\<file>.json --dry-run
Restoring over the live store needs --force; restoring into a scratch
--db / --editorial needs nothing and is the safe way to verify.
.venv\Scripts\python.exe scripts\sync.py # same sync the Desk button runs
.venv\Scripts\python.exe scripts\import_archive.py # index archive/*.md into the DB
.venv\Scripts\python.exe scripts\seed_editorial.py # refresh editorial/managers.json from synced data
.venv\Scripts\python.exe -m pytest tests\ -q # run the test suite
From the Desk home, click EDIT DRAFT ISSUE (or EDIT WEEK N). The Issue Editor is one screen for the whole issue, and every empty section starts as a ghost writing brief: subdued private suggestions (strongest facts, story angles, callbacks, a structure) rendered inside the editor. Your first keystroke replaces the ghost; deleting everything brings it back; the same material stays available under Writing brief and Show evidence below each editor. Ghost text is never content: it cannot save, publish, or count as written. Cards autosave with per-section approve/preview, revision History with restore, and a team-name panel. Briefs recompute from the latest synced data at page load; a "data updated since written" chip appears when a sync postdates your prose.
Want Claude to write instead? Request Claude draft (empty section) or Request rewrite (existing text) queues a note; then tell Claude Code:
Work all pending rewrite requests in editorial////REVISION_REQUESTS.md.
Claude writes proposals/<section>.md; the editor shows it beside your
current text with Accept / Keep — your text is never replaced silently.
Publish… shows the exact blockers (or READY), then offers Publish
Locally or Publish & Deploy (build + privacy audit + Vercel production,
never past a failed audit).
Recurring sidebar features (currently The All-City Team and its
100,000-population variant The All-Marquee Team) are opt-in modules
backed by a git-tracked data edition. Include the module on the issue, and
the table, rule footnote and near-miss list render from
editorial/features/<feature>/<edition>.json while you write the copy in
the ordinary section card. Both can run in the same issue. See
editorial/features/all-city/README.md for the rule and the procedure for
running one again later in the season.
Launch Commissioner Desk.cmd.Work the task list in editorial///week-NN/AUTHORING_INDEX.md using my writing-style skill.
.venv\Scripts\python.exe scripts\sync.py
.venv\Scripts\python.exe scripts\build_weekly_packet.py --league surfeit --week 1
.venv\Scripts\python.exe scripts\desk.py
On the Desk (/commissioner/<league>/<season>/week/<N>/matchups): pick angles,
add notes, override prominence. Rebuild the packet so decisions flow in, then in
a Claude Code session ask:
Draft all unapproved matchup previews for surfeit week 1 using my writing-style skill. Follow each matchup's generated/AUTHORING.md.
Edit each draft on the Desk (remove the ROUGH DRAFT marker), approve or send revision requests, then publish the week page:
.venv\Scripts\python.exe scripts\publish_week.py --league surfeit --week 1
.venv\Scripts\python.exe scripts\sync.py
.venv\Scripts\python.exe scripts\build_editorial_packet.py --league surfeit --type draft
Review candidates/awards on the Desk, rebuild the packet (decisions flow in),
then have a Claude Code session author draft-issue.md per the packet's
AUTHORING_BRIEF.md. Edit it, save as issue.md (remove the ROUGH DRAFT
marker), then:
.venv\Scripts\python.exe scripts\publish_issue.py --league surfeit --issue draft --approve
.venv\Scripts\python.exe scripts\publish_issue.py --league surfeit --issue draft --publish
No API keys are required. Claude Code (this repo's editorial AI environment) authors prose from generated editorial packets; the deployed site is static and needs no LLM.