Remove CFB/NASCAR/PGA and streamline to 8 supported sports

- Remove College Football, NASCAR, and PGA from scraper and app
- Clean all data files (stadiums, games, pipeline reports)
- Update Sport.swift enum and all UI components
- Add sportstime.py CLI tool for pipeline management
- Add DATA_SCRAPING.md documentation
- Add WNBA/MLS/NWSL implementation documentation
- Scraper now supports: NBA, MLB, NHL, NFL, WNBA, MLS, NWSL, CBB

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-09 23:22:13 -06:00
parent f5e509a9ae
commit 8790d2ad73
35 changed files with 117819 additions and 65871 deletions

View File

@@ -12,6 +12,9 @@ enum Sport: String, Codable, CaseIterable, Identifiable {
case nhl = "NHL"
case nfl = "NFL"
case mls = "MLS"
case wnba = "WNBA"
case nwsl = "NWSL"
case cbb = "CBB"
var id: String { rawValue }
@@ -22,6 +25,9 @@ enum Sport: String, Codable, CaseIterable, Identifiable {
case .nhl: return "National Hockey League"
case .nfl: return "National Football League"
case .mls: return "Major League Soccer"
case .wnba: return "Women's National Basketball Association"
case .nwsl: return "National Women's Soccer League"
case .cbb: return "College Basketball"
}
}
@@ -32,6 +38,9 @@ enum Sport: String, Codable, CaseIterable, Identifiable {
case .nhl: return "hockey.puck.fill"
case .nfl: return "football.fill"
case .mls: return "soccerball"
case .wnba: return "basketball.fill"
case .nwsl: return "soccerball"
case .cbb: return "basketball.fill"
}
}
@@ -42,6 +51,9 @@ enum Sport: String, Codable, CaseIterable, Identifiable {
case .nhl: return .blue
case .nfl: return .brown
case .mls: return .green
case .wnba: return .purple
case .nwsl: return .teal
case .cbb: return .mint
}
}
@@ -53,6 +65,9 @@ enum Sport: String, Codable, CaseIterable, Identifiable {
case .nhl: return (10, 6) // October - June (wraps)
case .nfl: return (9, 2) // September - February (wraps)
case .mls: return (2, 12) // February - December
case .wnba: return (5, 10) // May - October
case .nwsl: return (3, 11) // March - November
case .cbb: return (11, 4) // November - April (wraps, March Madness)
}
}
@@ -70,8 +85,19 @@ enum Sport: String, Codable, CaseIterable, Identifiable {
}
}
/// Currently supported sports for MVP
/// Currently supported sports
static var supported: [Sport] {
[.mlb, .nba, .nhl]
[.mlb, .nba, .nfl, .nhl, .mls, .wnba, .nwsl, .cbb]
}
}
// MARK: - Array Chunking
extension Array {
/// Splits array into chunks of specified size
func chunked(into size: Int) -> [[Element]] {
stride(from: 0, to: count, by: size).map {
Array(self[$0..<Swift.min($0 + size, count)])
}
}
}

View File

@@ -25,7 +25,7 @@ enum PlanningMode: String, Codable, CaseIterable, Identifiable {
var description: String {
switch self {
case .dateRange: return "Find games within a date range"
case .dateRange: return "Shows a curated sample of possible routes — use filters to find your ideal trip"
case .gameFirst: return "Build trip around specific games"
case .locations: return "Plan route between locations"
}

View File

@@ -126,6 +126,9 @@ enum Theme {
static let nhlBlue = Color(hex: "003087")
static let nflBrown = Color(hex: "8B5A2B")
static let mlsGreen = Color(hex: "00A651")
static let wnbaPurple = Color(hex: "FF6F20") // WNBA orange
static let nwslTeal = Color(hex: "009688") // NWSL teal
static let cbbMint = Color(hex: "3EB489") // College Basketball mint
// MARK: - Dark Mode Colors

View File

@@ -215,6 +215,9 @@ extension Sport {
case .nhl: return Theme.nhlBlue
case .nfl: return Theme.nflBrown
case .mls: return Theme.mlsGreen
case .wnba: return Theme.wnbaPurple
case .nwsl: return Theme.nwslTeal
case .cbb: return Theme.cbbMint
}
}
}