OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.md檢視完整 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.
| 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.