Back to your leagues

Refresh and connect leagues

Daily fast refresh

python3 -m pipeline.football

Refreshes both Sleeper leagues. Rosters and settings: 15-minute cache. Shared news and global adds: one hour. Upcoming NFL schedule: 30 minutes. Shared player catalog: once per 24 hours, including deep runs. Repeated runs reuse cached responses; league count never multiplies shared requests.

Once or twice weekly

python3 -m pipeline.football --deep

Forces league, news, trending and schedule collection; player catalog retains its 24-hour limit. All recommendations recomputed. Browser-imported Yahoo snapshots retain their original capture time; this command cannot renew them.

Rebuild without network

python3 -m pipeline.football --offline

Uses local cached sources and saved imports. Capture dates stay fixed; old rosters pause advice.

Yahoo and ESPN NFL

Yahoo league 544768, Team 9 has a local browser snapshot: its own roster, Week 5 projections and a partial availability list. Other managers' rosters are not imported, so only explicitly observed available players qualify. Refresh the browser snapshot when rosters, projections or status change.

Yahoo automated access needs authorized Fantasy API access. ESPN Fantasy Home currently shows your WNBA and NBA teams; no NFL league was found. Add a verified league through the snapshot import below. No browser secrets, cookies or tokens are stored by the NFL collector.

Raw caches, credentials and private imports stay on your machine and are gitignored. The sanitized snapshots for both requested Sleeper leagues and Yahoo Team 9 are published on GitHub Pages. After a local refresh, inspect and commit the generated files in docs/data/football/; push to main to update Pages. Yahoo retains its browser capture date until reimported. New league snapshots stay ignored until publication is requested.

Portable snapshot import

Save a JSON object with league and optional shared players. Validate against the exact JSON schema. League uses a stable slug ID, provider, name, season, captured_at with timezone, source_url, slots, scoring, settings and teams. Team uses stable id, players, starters and reserve arrays. Use verified Sleeper NFL player IDs, not names, to join shared data.

python3 -m pipeline.football --import /absolute/path/league.json

availability_complete defaults to false. Supply available_players from a verified available-player list when the full league roster is absent. Projections belong to the league: supply projections, projection_at, projection_source and projection_label together. Each league's scoring and projection window stay separate.

player_status, bye_players, game_times, and deadlines carry provider-specific observations. Deadline objects require title, timezone-aware at, and source_url. Exact cutoff unknown? Supply a reminder in reminders and confirm the cutoff in Rules. No default processing hour is invented.

Shared stat collection

Write optional shared player records to local data/nfl/stats.json. Each record requires id, name, positions, raw per-game stats, stats_at, and stats_source. Stat keys use the league's scoring vocabulary, such as rec, rec_yd and pass_td. Every enabled scoring category must exist; missing categories make the score unavailable. Raw stats older than seven days are not scored. Browser projections are not raw stats and cannot be shared between scoring systems.

Sleeper public API supplies player status and add activity, not point projections. Pickup rankings use unfilled roster coverage and global adds until verified stat inputs exist. Add counts are popularity, not skill or net lineup gain. Recovery dates are not inferred from news headlines; exact athlete-linked news is shown for inspection.

WNBA remains separate

python3 -m pipeline.refresh --dry-run
python3 -m pipeline.refresh

The existing WNBA optimizer, history and console are preserved. Its old August snapshot is visibly stale until refreshed through your local authorized ESPN session. One WNBA league is configured; additional WNBA pipelines remain future work.

Verification

python3 -m pytest -q
python3 -m pytest tests/test_football.py -q
node --check docs/assets/football.js
PORT=9876 node scripts/serve.mjs

Open localhost:9876. Check 375px and desktop: sport, league, team, roster, waiver search, status news and confirmed deadline calendar export. Imported Yahoo data is a snapshot; provider lineup locks remain the final authority.