Phase 2.1: Additional Sports Stadiums - 3 plans created (MLS, WNBA, NWSL modules) - CBB deferred to future phase (350+ D1 teams) - 6 total tasks defined - Ready for execution Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
141 lines
6.1 KiB
Markdown
141 lines
6.1 KiB
Markdown
---
|
|
phase: 2.1-additional-sports-stadiums
|
|
plan: 03
|
|
type: execute
|
|
---
|
|
|
|
<objective>
|
|
Create NWSL sport module with complete hardcoded stadium data.
|
|
|
|
Purpose: Enable NWSL stadium data to flow through the canonicalization pipeline.
|
|
Output: nwsl.py module with 13+ stadiums including capacity, year_opened, and coordinates.
|
|
</objective>
|
|
|
|
<execution_context>
|
|
~/.claude/get-shit-done/workflows/execute-phase.md
|
|
~/.claude/get-shit-done/templates/summary.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
@.planning/PROJECT.md
|
|
@.planning/ROADMAP.md
|
|
@.planning/STATE.md
|
|
|
|
# Prior plans in this phase:
|
|
@.planning/phases/2.1-add-stadium-data-mls-wnba-nwsl-cbb/02.1-01-SUMMARY.md
|
|
@.planning/phases/2.1-add-stadium-data-mls-wnba-nwsl-cbb/02.1-02-SUMMARY.md
|
|
|
|
# Pattern reference:
|
|
@Scripts/mlb.py
|
|
@Scripts/mls.py (created in 02.1-01)
|
|
@Scripts/wnba.py (created in 02.1-02)
|
|
|
|
# Current NWSL data:
|
|
@Scripts/scrape_schedules.py (NWSL_TEAMS dict at line 126)
|
|
|
|
# MLS stadiums (some shared with NWSL):
|
|
@Scripts/mls.py
|
|
|
|
# Core module:
|
|
@Scripts/core.py
|
|
|
|
**Tech stack available:** Python 3, dataclasses, requests
|
|
**Established patterns:** Sport module structure from mlb.py, mls.py, wnba.py
|
|
**Key insight:** Several NWSL teams share stadiums with MLS teams - can reference mls.py hardcoded data
|
|
</context>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Create nwsl.py module with complete stadium data</name>
|
|
<files>Scripts/nwsl.py</files>
|
|
<action>
|
|
Create nwsl.py following the established pattern:
|
|
|
|
1. Module docstring and imports (try/except for core imports)
|
|
2. __all__ exports list
|
|
3. NWSL_TEAMS dict (copy from scrape_schedules.py, 13 teams - verify current roster)
|
|
4. get_nwsl_team_abbrev() function
|
|
5. Hardcoded NWSL stadiums dict with COMPLETE data:
|
|
|
|
NWSL Teams and Stadiums (2025 season - 14 teams as of expansion):
|
|
- LA: Angel City FC → BMO Stadium (Los Angeles, CA) - shared with LAFC, ~22,000, opened 2018
|
|
- SJ: Bay FC → PayPal Park (San Jose, CA) - shared with SJ Earthquakes, ~18,000, opened 2015
|
|
- CHI: Chicago Red Stars → SeatGeek Stadium (Bridgeview, IL) - ~20,000 capacity, opened 2006
|
|
- HOU: Houston Dash → Shell Energy Stadium (Houston, TX) - shared with Houston Dynamo, ~22,039, opened 2012
|
|
- KC: Kansas City Current → CPKC Stadium (Kansas City, MO) - NWSL-specific, ~11,500, opened 2024
|
|
- NJ: NJ/NY Gotham FC → Red Bull Arena (Harrison, NJ) - shared with NY Red Bulls, ~25,000, opened 2010
|
|
- NC: North Carolina Courage → WakeMed Soccer Park (Cary, NC) - ~10,000, opened 2002
|
|
- ORL: Orlando Pride → Inter&Co Stadium (Orlando, FL) - shared with Orlando City SC, ~25,500, opened 2017
|
|
- POR: Portland Thorns FC → Providence Park (Portland, OR) - shared with Portland Timbers, ~25,218, opened 1926 (renovated 2019)
|
|
- SEA: Seattle Reign FC → Lumen Field (Seattle, WA) - shared with Sounders/Seahawks, ~69,000, opened 2002
|
|
- SD: San Diego Wave FC → Snapdragon Stadium (San Diego, CA) - shared, ~35,000, opened 2022
|
|
- UTA: Utah Royals FC → America First Field (Sandy, UT) - shared with Real Salt Lake, ~20,213, opened 2008
|
|
- WAS: Washington Spirit → Audi Field (Washington, DC) - shared with DC United, ~20,000, opened 2018
|
|
- BOS: Boston Breakers FC (if active - verify current NWSL roster)
|
|
|
|
Cross-reference mls.py for shared stadium coordinates and verify current league membership.
|
|
|
|
6. scrape_nwsl_stadiums_hardcoded() function returning list[Stadium]
|
|
7. scrape_nwsl_stadiums() function with fallback sources
|
|
8. NWSL_STADIUM_SOURCES configuration
|
|
|
|
Note: NWSL has had expansion and contraction - verify current team roster matches actual 2025 season.
|
|
</action>
|
|
<verify>python3 -c "from Scripts.nwsl import NWSL_TEAMS, scrape_nwsl_stadiums_hardcoded; s = scrape_nwsl_stadiums_hardcoded(); print(f'{len(s)} stadiums'); print(f'{len(NWSL_TEAMS)} teams'); assert all(st.capacity > 0 for st in s); assert all(st.year_opened for st in s)"</verify>
|
|
<done>nwsl.py exists with current NWSL teams, all stadiums with non-zero capacity and year_opened values</done>
|
|
</task>
|
|
|
|
<task type="auto">
|
|
<name>Task 2: Integrate NWSL module and finalize phase</name>
|
|
<files>Scripts/scrape_schedules.py</files>
|
|
<action>
|
|
Update scrape_schedules.py to use the new nwsl.py module:
|
|
|
|
1. Add import at top (with try/except pattern):
|
|
- from nwsl import NWSL_TEAMS, get_nwsl_team_abbrev, scrape_nwsl_stadiums, NWSL_STADIUM_SOURCES
|
|
|
|
2. Remove inline NWSL_TEAMS dict (lines ~126-140) - now imported from nwsl.py
|
|
|
|
3. Update get_team_abbrev() function to use get_nwsl_team_abbrev() for NWSL
|
|
|
|
4. Update scrape_nwsl_stadiums() stub function to use the new module's implementation
|
|
|
|
5. Verify NWSL games scraping still works
|
|
|
|
6. Run full stadium update to verify all 3 new sports integrate:
|
|
python3 scrape_schedules.py --stadiums-update
|
|
|
|
Do NOT remove the game scraping functions - those stay inline for now.
|
|
</action>
|
|
<verify>cd Scripts && python3 -c "from scrape_schedules import NWSL_TEAMS, get_team_abbrev; print(f'NWSL teams: {len(NWSL_TEAMS)}'); abbrev = get_team_abbrev('Portland Thorns FC', 'NWSL'); print(f'Thorns abbrev: {abbrev}'); assert abbrev == 'POR'"</verify>
|
|
<done>scrape_schedules.py imports NWSL_TEAMS from nwsl.py, get_team_abbrev works for NWSL, all 3 secondary sport modules integrated</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<verification>
|
|
Before declaring plan complete:
|
|
- [ ] nwsl.py exists with complete module structure
|
|
- [ ] All NWSL stadiums have capacity > 0 and year_opened values
|
|
- [ ] scrape_schedules.py imports from nwsl.py successfully
|
|
- [ ] `python3 Scripts/scrape_schedules.py --stadiums-update` includes MLS, WNBA, and NWSL stadiums
|
|
- [ ] No import errors when running pipeline
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
|
|
- nwsl.py module created following established pattern
|
|
- All NWSL stadiums with complete data (capacity, year_opened, coordinates)
|
|
- scrape_schedules.py integration works for all 3 new sports
|
|
- Phase 2.1 complete (MLS, WNBA, NWSL modules created)
|
|
- CBB deferred to future phase (documented in summary)
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.planning/phases/2.1-add-stadium-data-mls-wnba-nwsl-cbb/02.1-03-SUMMARY.md` with:
|
|
- Summary of all 3 plans (MLS, WNBA, NWSL modules)
|
|
- Note that CBB was deferred (350+ D1 teams requires separate scoped phase)
|
|
- Phase 2.1 complete status
|
|
</output>
|