A full-stack flight status aggregation system built as part of an EPAM AI-Assisted Development case study, exploring how GitHub Copilot, Claude AI, and ChatGPT can accelerate real-world software delivery.
Flight Status Tracker solves a common integration challenge: multiple flight data providers return the same information in different shapes. This application pulls status data from two providers, normalizes it into a single unified model, applies merge logic to resolve conflicts, and serves the result through a clean REST API and a React frontend.
Rather than tightly coupling business logic to any one provider's contract, the system is designed around a provider abstraction — making it straightforward to swap in real data sources as the project evolves.
The backend follows a layered architecture with clear separation of concerns:
Controller
└── FlightStatusService
└── IFlightStatusProvider
├── AeroTrackProvider
└── QuickFlightProvider
└── StatusNormalizerService
└── Unified FlightStatusResult
Each provider implements a shared interface and returns raw flight data. The StatusNormalizerService translates provider-specific statuses into a consistent format, and the merge logic picks the most recent result using LastUpdatedUtc as the tiebreaker.
Other backend highlights:
- Dependency Injection throughout, keeping components loosely coupled and testable
- Global Exception Middleware for consistent error handling across the API
- Structured Logging for visibility into provider responses and merge decisions
- Swagger / XML Documentation so the API is self-describing out of the box
- Unit Tests using xUnit, Moq, and FluentAssertions — covering normalization, merge logic, and service behavior
A lightweight Vite-powered UI lets you query flight status by flight number and date, and displays the normalized result returned by the API.
| Layer | Technology |
|---|---|
| API | ASP.NET Core 8, C# |
| Testing | xUnit, Moq, FluentAssertions |
| Frontend | React, TypeScript, Vite |
| Docs | Swagger |
FlightStatus.Api # ASP.NET Core Web API
FlightStatus.Tests # Unit test project
flight-status-ui # React + TypeScript frontend
dotnet restore
dotnet build
dotnet runSwagger UI is available at https://localhost:55124/swagger
npm install
npm run devApp runs at http://localhost:3000
GET /api/flights/status?flightNumber=AI101&date=2026-06-26
| Parameter | Description |
|---|---|
flightNumber |
IATA flight number (e.g. AI101) |
date |
Date in YYYY-MM-DD format |
- Provider stubs are used in place of real integrations — the focus of this case study is architecture and AI-assisted development workflow, not live data.
- No authentication is required; the API is intentionally open for evaluation purposes.
- Merge strategy: when providers return conflicting data, the response with the most recent
LastUpdatedUtcwins. - Provider responses are treated as deterministic for testing purposes.
This project is scoped as a case study, but the natural next steps for a production path would be:
- Integrating real flight data provider APIs
- Adding Redis caching to reduce provider round-trips
- Introducing authentication and rate limiting
- Containerizing with Docker and wiring up a CI/CD pipeline
- Health check endpoints for monitoring provider availability
This project was developed with active assistance from GitHub Copilot, Claude AI, and ChatGPT —used to accelerate scaffolding, implementation, testing, and documentation. All generated code was reviewed, refined, and validated before integration. The case study examines how these tools complement a developer's workflow rather than replace judgment.