- 01-01-PLAN.md: core.py + mlb.py (executed) - 01-02-PLAN.md: nba.py + nhl.py - 01-03-PLAN.md: nfl.py + orchestrator refactor - Codebase documentation for planning context Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
Codebase Structure
Analysis Date: 2026-01-09
Directory Layout
SportsTime/
├── SportsTimeApp.swift # @main entry point
├── Features/ # Presentation layer
│ ├── Home/ # Dashboard, suggested trips
│ ├── Trip/ # Creation & detail views
│ ├── Schedule/ # Browse games
│ ├── Settings/ # User preferences
│ └── Progress/ # Stadium visits, achievements
├── Planning/ # Domain layer
│ ├── Engine/ # Planning algorithms
│ └── Models/ # Planning-specific types
├── Core/ # Data layer
│ ├── Models/ # Domain + Local + CloudKit models
│ ├── Services/ # Data providers, sync, APIs
│ ├── Theme/ # Design system
│ ├── Extensions/ # Swift extensions
│ └── Utilities/ # Helpers
├── Export/ # PDF generation
│ ├── PDFGenerator.swift # Main generator
│ └── Services/ # Asset services
├── Resources/ # Assets, bundled JSON
└── Info.plist # App configuration
SportsTimeTests/ # Unit tests
SportsTimeUITests/ # UI tests
Scripts/ # Python data pipeline
docs/ # Documentation
Directory Purposes
Features/ (Presentation):
- Purpose: SwiftUI Views + @Observable ViewModels
- Contains: Feature-organized modules
- Key files:
HomeView.swift,TripCreationView.swift,TripDetailView.swift - Subdirectories: Views/, ViewModels/ per feature
Planning/ (Domain):
- Purpose: Trip planning business logic
- Contains: Engine algorithms, planning models
- Key files:
TripPlanningEngine.swift,GameDAGRouter.swift,PlanningModels.swift - Subdirectories: Engine/, Models/
Core/ (Data):
- Purpose: Models, services, infrastructure
- Contains: Domain structs, SwiftData models, services
- Key files:
DataProvider.swift,CloudKitService.swift,LocationService.swift - Subdirectories: Models/Domain/, Models/Local/, Models/CloudKit/, Services/
Export/ (PDF):
- Purpose: PDF generation with parallel asset fetching
- Contains: PDF generator, asset services
- Key files:
PDFGenerator.swift,MapSnapshotService.swift,PDFAssetPrefetcher.swift - Subdirectories: Services/
Key File Locations
Entry Points:
SportsTime/SportsTimeApp.swift- App entry, SwiftData schemaSportsTime/Features/Home/Views/HomeView.swift- Main TabView
Configuration:
SportsTime/Info.plist- App configuration, background modesSportsTime.xcodeproj/project.pbxproj- Build settings
Core Logic:
SportsTime/Core/Services/DataProvider.swift- Single source of truthSportsTime/Planning/Engine/TripPlanningEngine.swift- Planning orchestratorSportsTime/Planning/Engine/GameDAGRouter.swift- Route finding
Testing:
SportsTimeTests/TravelEstimatorTests.swift- 50+ testsSportsTimeTests/ScenarioAPlannerSwiftTests.swift- Scenario A testsSportsTimeTests/ScenarioBPlannerTests.swift- Scenario B testsSportsTimeTests/ScenarioCPlannerTests.swift- Scenario C tests
Documentation:
CLAUDE.md- Project instructions for Claude Codedocs/MARKET_RESEARCH.md- Competitive analysis
Naming Conventions
Files:
- PascalCase for Swift files:
TripDetailView.swift,DataProvider.swift - Pattern:
{TypeName}.swiftmatches primary type - Views:
*View.swift - ViewModels:
*ViewModel.swift - Services:
*Service.swift
Directories:
- PascalCase for feature directories:
Features/Trip/ - Plural for collections:
Models/,Services/,Views/
Special Patterns:
index.tsequivalent: None (Swift doesn't use barrel files)- Test files:
*Tests.swiftinSportsTimeTests/
Where to Add New Code
New Feature:
- Primary code:
Features/{FeatureName}/Views/andViewModels/ - Tests:
SportsTimeTests/{FeatureName}Tests.swift - Config if needed: Update
SportsTimeApp.swiftschema if adding models
New Service:
- Implementation:
Core/Services/{ServiceName}.swift - Tests:
SportsTimeTests/{ServiceName}Tests.swift
New Planning Algorithm:
- Definition:
Planning/Engine/{PlannerName}.swift - Protocol: Implement
ScenarioPlannerprotocol - Tests:
SportsTimeTests/{PlannerName}Tests.swift
New Domain Model:
- Domain struct:
Core/Models/Domain/{Model}.swift - SwiftData model (if persisted):
Core/Models/Local/{Model}.swift - Add to
SportsTimeApp.swiftschema
Utilities:
- Shared helpers:
Core/Utilities/ - Extensions:
Core/Extensions/
Special Directories
Resources/ (Bundled Data):
- Purpose: Bootstrap data for offline-first
- Source: Generated by
Scripts/generate_canonical_data.py - Contents:
stadiums_canonical.json,teams_canonical.json,games_canonical.json - Committed: Yes
Scripts/ (Python Pipeline):
- Purpose: Data scraping, canonicalization, CloudKit import
- Contents:
scrape_schedules.py,cloudkit_import.py,canonicalize_*.py - Committed: Yes
.planning/ (Project Planning):
- Purpose: GSD workflow documents
- Contents: STATE.md, PLAN.md, codebase/
- Committed: Yes
Structure analysis: 2026-01-09 Update when directory structure changes