This app uses a robust entity identification system to handle athletes with the same name across different sports.
Each entity has a unique ID that encodes:
Examples:
sport_f1 - Formula 1 as a sportteam_f1_redbull - Red Bull Racing teamathlete_f1_verstappen_33 - Max Verstappen (F1, car #33)athlete_nfl_smith_67890 - John Smith (NFL player)athlete_f1_smith_12345 - John Smith (F1 driver)[ { "id": "athlete_f1_smith_12345", "name": "John Smith", "sport": "Formula 1", "team": "Example Racing", "metadata": { "carNumber": "88" } }, { "id": "athlete_nfl_smith_67890", "name": "John Smith", "sport": "NFL", "team": "Example FC", "metadata": { "position": "WR" } } ]
Athletes like Max Verstappen who compete in multiple series have:
athlete_f1_verstappen_33["Formula 1", "IGTC"]Planned API integrations:
All schedules automatically filter to show only upcoming events:
When a race gets rescheduled:
User adds events → Store entity ID in calendar metadata
Daily cron job → Check for schedule changes
If changed → Update calendar event via Google Calendar API
/
├── main.tsx # Main UI component
├── api/
│ ├── search.ts # Entity search with disambiguation
│ ├── schedule.ts # Fetch events for specific entity
│ ├── add-to-calendar.ts # Google Calendar integration
│ └── auth/
│ └── google.ts # OAuth flow