What changed
- replace the licensed Transfermarkt API integration with authorized competition-page DOM retrieval
- parse club ID, name, squad size, average age, and total market value from each table row
- add
ts-web-scraper@^0.1.5and document optional DOM origin/user-agent overrides
Why
The valuation pipeline was API-key gated and never read Transfermarkt's public competition tables. Club facts now stay bound to the same DOM row, avoiding cross-club data when Transfermarkt reorders the table.
Validation
./buddy lint./buddy typecheck./buddy test(202 passing)