Swim Events Countdown
Search upcoming swim competitions worldwide and see live countdowns to their start
翻譯準備中
AI 摘要 · 審核時修訂
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Power rankings, a live waiver-wire feed and data-nerd stats for the NFL Fantasy Championship Sleeper league.
#lab/team) puts one team's season on eight animated paper widgets: playoff odds, key players, lineup efficiency, weekly scores, position groups, the schedule left, an all-play luck switch and a face off against any rival. Trades (#lab/trades) finds every 1-for-1, 2-for-1 and 1-for-2 swap that improves both starting lineups at a fair consensus value. League (#lab/league): rank flow, luck index, points for vs against, weekly finishes heatmap, position-group ranks, playoff odds, lineup efficiency, biggest games, players the experts disagree on, and waiver/trade ROI.| Data | Where it comes from | How fresh |
|---|---|---|
| Rosters, scores, matchups, transactions | Sleeper API, via /api/league | Once each morning (6am Central), cached on the CDN for everyone |
| ROS rankings (FantasyPros, DraftSharks, LeagueLogs) | api/ros.js, a Vercel serverless function | Pulled once per day (first visitor each day, Central time), then cached at Vercel's edge |
| This week's player projections (FantasyPros API and Sleeper, averaged) | api/ros.js, alongside the rankings | Once per day, with the rankings; they drive the Games tab |
No cron job: the page requests /api/ros?d=YYYY-MM-DD, so each new day is a new cache key. If one ranking source fails, the others are still used and that response is only cached for an hour so it retries soon.
vercel.json sets the build (npm ci, npm run build, output dist), so the other settings can stay at their defaults. The build needs Node 20.19+ or 22.12+ (Project Settings → Build and Deployment → Node.js Version).https://<project>.vercel.app; share that link with the league.The site is built with Vite and is moving to React a page at a time (the Team dashboard is the first). To work on it locally: npm install once, then npx vercel dev and open http://localhost:3000 (or npm run dev for the page alone, without the API). Add ?demo=1 to the URL to see the saved Week 7 snapshot without calling any APIs.
The Games tab projects each matchup from this week's player projections: FantasyPros' and Sleeper's, averaged. Sleeper needs no setup. For FantasyPros, add an environment variable FANTASYPROS_API_KEY (your key from https://secure.fantasypros.com/api-keys/request/) in the Vercel project's Settings → Environment Variables, then redeploy. Without it the Games tab runs on Sleeper's projections alone.
The league desk is the discussion panel beside the headlines. Anyone can read it; only managers who have opened their personal link can post, and only Dan can delete. It uses the same Upstash store as fan picks, so set that up first.
TALK_ADMIN_KEY: any random string of 16 or more letters, numbers, - or _ that only you know. Redeploy.https://<your site>/#join=<that key> once on each of your devices. That signs you in as Dan.A new link for someone replaces their old one and signs out every device that used it, so a leaked link is one click to fix. Authors can edit a comment for a minute after posting.
Fan votes on the Games page need somewhere shared to live. Everything else works without it; until it's connected the voting box just doesn't appear.
KV_REST_API_URL and KV_REST_API_TOKEN variables.Optional: add an environment variable VOTE_SALT with any random string; it's mixed into the hashed IP addresses used for the per-network vote cap.
How it works: each phone keeps a random voter id, so voting again from the same phone switches the pick instead of adding one. One network can cast at most 3 votes per matchup (so a few friends on the same Wi-Fi still can), voting closes as soon as the week's first points are scored, and tallies stay visible to everyone. It's built for fun among friends, not to stop a determined cheater.
| What | Where |
|---|---|
| League ID, time zone | top of app.js (LEAGUE_ID, TZ) |
| Power-score weights | WEIGHTS in lib/engine.js |
| Source weights (LeagueLogs counts half by default) | SOURCE_WEIGHTS in lib/consensus.js |
| Rank-to-value curve | VALUE_DECAY in lib/consensus.js |
| Tier labels and explanation wording | tierFor and explain in lib/engine.js |
| Name mismatches between sites and Sleeper | NICKNAMES in lib/consensus.js |
Check /api/ros in the browser to see how many players each source matched (sources.*.matched).
index.html, styles.css, app.js the site: the frame, the data and the headlines
src/ the pages, in React (one folder each), the charts and the shared bits
lib/engine.js power score, explanations, playoff simulation, transaction grading
lib/consensus.js matches ranking rows to Sleeper IDs and blends the three sources
lib/sources.js parsers for each ranking site
lib/weekly.js this week's projections: FantasyPros + Sleeper, averaged
api/talk.js the league desk: one discussion thread a week, personal sign-in links
api/ros.js daily rankings endpoint (Vercel function)
demo/demo.json saved Week 7 snapshot for ?demo=1
fixtures/, scripts/ saved source data and tests (node scripts/test-engine.mjs)
The parsers read specific page structures: FantasyPros' embedded ecrData, DraftSharks' /ros-rankings/load-rows table rows, and LeagueLogs' rankings table. If a site redesigns, that source shows as offline on the Rankings page and the other two carry the score until the parser in lib/sources.js is updated.
Rankings data belongs to FantasyPros, DraftSharks and LeagueLogs; league data comes from the Sleeper API. This is a personal, non-commercial league site.