Strategic intelligence for elite performance.
Athena Performance Insights is an iOS app that blends sports data, AI-powered insights, and competition awareness into a lightweight companion for athletes, fans, and analysts, starting with track and field and designed to scale across sports.
The product name used throughout the codebase and internal tooling is Athena. The full consumer-facing name is Athena Performance Insights.
Sports data is abundant, but understanding is not. Athena focuses on interpretation, awareness, and strategic context—helping users understand not just what happened, but why it matters.
Athena is designed as a living track and field companion: what happened, what is happening, and what to watch next.
Athena is inspired by strength through intelligence: disciplined, resilient, and intentional.
Built with SwiftUI and MVVM for a clean, maintainable iOS codebase.
- Models: Athlete, Meet, Event, Result, CompetitiveStoryline
- ViewModels: HomeViewModel, AthleteViewModel, MeetViewModel
- Views: Home, Athletes, Meets, Settings
- Services: APIService and NotificationService
- Language: Swift
- UI: SwiftUI
- Architecture: MVVM (lightweight)
- AI: Hugging Face hosted models
- Minimum iOS: 17.0
- Concurrency: async/await
- Backend: FastAPI + Uvicorn, containerized in Docker
- Cloud: Azure Container Apps, ACR, PostgreSQL, Key Vault, Service Bus, App Insights
- Infrastructure: Terraform (>=1.7, AzureRM provider), remote state in Azure Blob
- Observability: Sentry (iOS crash reporting), Azure Application Insights (backend)
- CI/CD: GitHub Actions (iOS CI, backend CI, Terraform CI/apply, TestFlight release)
After cloning, run this once to activate the pre-push quality gate:
git config core.hooksPath .githooksThis wires the committed hook at .githooks/pre-push, which runs iOS build + Terraform validate + pytest + Alembic migration check before every push. Without this step, nothing catches failures locally.
Athena connects to a live Azure-hosted FastAPI backend. Local fallback mode is disabled by default — all builds use the live endpoint.
Live backend URL: https://ca-athena-dev-backend.orangetree-abd9b5a7.eastus2.azurecontainerapps.io
Core service endpoints:
GET /healthGET /athletesGET /meetsGET /events/{eventID}/resultsGET /storylines
Runtime API configuration is controlled via ATHENA_MANAGED_API_SETTINGS=YES in build settings. All builds default to live API. URL construction uses URLComponents to correctly split path and query string parameters.
Analytics and insight contracts are documented in the architecture specification.
- Home feed with key competitive storylines
- Athlete following
- Meet awareness + where to watch
- AI‑generated performance insights
- Lightweight, intentional notifications
- Settings and preference controls
See the MVP Architecture document in this repository for full details.
- Home: dashboard with storylines and upcoming meets
- Athletes: follow and analyze athlete profiles
- Meets: discover event schedules and watch context
- Settings: configure alerts, sources, and behavior
- Open the project in Xcode 16+
- Select the Athena target and an iOS 17+ simulator
- Build and run
swift test
xcodebuild -project Athena.xcodeproj -scheme Athena -destination 'platform=iOS Simulator,name=iPhone 16' build CODE_SIGNING_ALLOWED=NO- Live Azure backend deployed and healthy (
/healthreturns{"status":"ok"}) - All localhost fallbacks removed — live endpoint used by default in all build configs
- URL construction rebuilt using
URLComponentsto prevent query string encoding as path segments ATHENA_MANAGED_API_SETTINGS=YESactive in both Debug and Release- Tolerant Swift model decoders added for
MeetandCompetitiveStoryline(handles slim API payloads gracefully) - Sentry SDK guarded — only activates when
SentryDSNis non-empty; no fatal log noise when disabled - Pre-push enforcement active via
.githooks/pre-push→scripts/pre_push_checks.sh- Runs iOS build check, Terraform fmt/validate, backend pytest on changed files
- Engineering rules documented in
rules.md - All GitHub Actions secrets configured for TestFlight release workflow
- TestFlight release workflow (
release-testflight.yml) ready to run
- TestFlight beta testing (internal)
- Monitoring Sentry + App Insights for real-user sessions
- AI backend integration (Hugging Face explanation layer)
- Ranking Impact Simulator
- Rivalry Heat Index
- Record Threat / Milestone Watch
- Breakout Radar (high school + college athletes)
- Source coverage expansion: MileSplit + Athletic.net
Athena uses a two-workflow release model:
-
CI quality gate:
.github/workflows/ci.yml- Runs on PRs and pushes to
dev/main - Executes SwiftLint, Swift tests, and simulator build
- Blocks bad changes before they can be released
- Runs on PRs and pushes to
-
TestFlight release:
.github/workflows/release-testflight.yml- Triggered by
v*git tags or manual workflow dispatch - Archives + exports signed IPA
- Uploads IPA artifact and submits to TestFlight
- Uses
github.run_numberasCURRENT_PROJECT_VERSIONto keep build numbers increasing
- Triggered by
Recommended versioning:
- Keep
MARKETING_VERSIONfor semantic app versions (1.0,1.1,1.2). - Let CI set
CURRENT_PROJECT_VERSIONautomatically per run. - Cut a release tag (
v1.0.0,v1.0.1) for each production candidate.
Required GitHub secrets for release workflow (all configured):
| Secret | Purpose |
|---|---|
SIGNING_CERT_BASE64 |
Distribution certificate (.p12, base64-encoded) |
SIGNING_CERT_PASSWORD |
Password used when exporting the .p12 |
KEYCHAIN_PASSWORD |
Temp keychain password for CI runner |
PROVISIONING_PROFILE_BASE64 |
Provisioning profile (.mobileprovision, base64-encoded) |
APPSTORE_API_KEY_ID |
App Store Connect API key ID (App Manager role) |
APPSTORE_API_ISSUER_ID |
App Store Connect issuer ID |
APPSTORE_API_PRIVATE_KEY |
App Store Connect .p8 private key (full text, not base64) |
ATHENA_API_BASE_URL |
Live backend URL (must be https://...) |
SENTRY_DSN |
Sentry DSN for crash reporting (leave empty to disable) |
Notes for ATHENA_API_BASE_URL:
- A custom purchased domain is optional.
- You can use the default Azure Container Apps endpoint (
https://<app>.<region>.azurecontainerapps.io) for TestFlight and initial production. - If you later purchase a domain, map it to Container Apps and update
ATHENA_API_BASE_URL.
- Start dev with the low-traffic Terraform profile (
infra/terraform/envs/dev/dev.tfvars.example) and scale to zero where safe. - Keep production on a baseline profile (
infra/terraform/envs/prod/prod.tfvars.example) withmin_replicas >= 1. - Increase replicas, DB SKU, and queue tier only when metrics show sustained demand.
- Keep short log retention in dev and extend retention only for compliance or incident response needs.
- Review Azure spend and utilization monthly before changing SKU tiers.
- World Athletics stats zone: https://worldathletics.org/stats-zone
- FloTrack rankings: https://www.flotrack.org/rankings
- Track and Field News major results: https://trackandfieldnews.com/major-results-links/
- LA28 athletics disciplines: https://hospitality.la28.org/en/event-discipline/athletics
- MileSplit results and athlete coverage: https://www.milesplit.com/
- Athletic.net performance and athlete coverage: https://www.athletic.net/
- VibeCon agenda: https://vibecon.io/
- Hugging Face account: https://huggingface.co/mccoyale
These inputs support Athena across professional, collegiate, and high school competition layers so the product can surface breakout athletes before they are fully established on the professional circuit.
Copyright (c) 2026 Alexandra McCoy