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.