Military flight training management system — scheduling, authorization, execution, grading, and logbooks.
Built as a modular monolith for air-gapped, on-prem deployment. Serves 150-250 students, 50-150 instructors, and operations staff across multiple squadrons.
FlightOps handles the full training lifecycle:
- Course management — predetermined syllabi with progress tracking per student
- Daily scheduling — drag-and-drop program builder with conflict detection across instructors, students, and resources
- Flight authorization — configurable workflows per platform (full flow for aircraft, simplified for simulators/rooms)
- Operations room — squawk assignment, airborne/landed tracking, real-time status
- Digital grading — instructor assessments tied to syllabus events
- Logbook recording — automated flight hours tracking per crew member
- Multi-squadron support — squadron-isolated data with cross-squadron scheduling for shared resources
Draft → Staged → Published → [Authorized] → Accepted → [Airborne] → Landed → SignedBack
↓
Cancelled (with category + notes)
Three categories managed separately: Aircraft (individual tail numbers), Simulators, and Rooms. Each platform has a configurable authorization workflow.
.NET 10, ASP.NET Core, PostgreSQL (EF Core), MediatR, FluentValidation, Ardalis.Result, Serilog, QuestPDF, xUnit
Every API request flows through a pipeline of cross-cutting concerns before reaching business logic:
HTTP Request → Endpoint → MediatR Pipeline → Handler → Database
↓
Logging (Serilog)
Authorization (planned)
Validation (FluentValidation)
Transaction (EF Core)
- MediatR dispatches commands/queries to their handlers and wraps them in pipeline behaviors (validation, auth, logging, transactions) — no manual wiring needed
- FluentValidation defines input rules per command. Invalid requests are rejected before the handler runs
- Ardalis.Result wraps all handler responses in a typed result (
Success,Invalid,Error,NotFound) which endpoints map to HTTP status codes - EF Core talks to PostgreSQL directly — no repository pattern. The DbContext is the unit of work
See CONTRIBUTING.md for implementation details.
Prerequisites: .NET 10 SDK, Docker
# Start PostgreSQL
docker compose up -d
# Apply migrations (may show warning on first run - safe to ignore)
dotnet ef database update --project src/FlightOps.Infrastructure --startup-project src/FlightOps.Web
# Run the application
dotnet run --project src/FlightOps.Web
# Run tests
dotnet test tests/FlightOps.UnitTestssrc/
FlightOps.Web/ ASP.NET Core host, modules, API endpoints
Modules/
Auth/ Login, refresh tokens, logout, current user
Platforms/ Platform types, aircraft, simulators, rooms
Squadrons/ Squadron management
Courses/ Course management, syllabus
Scheduling/ Daily Program, conflict detection
Operations/ Authorization flow, flight ops
GradeSheets/ Student assessment
Logbooks/ Flight hours tracking
Users/ User management, roles, activation, cross-squadron access
Reporting/ PDF export (V1), dashboards (V2)
FlightOps.SharedKernel/ Base types, MediatR behaviors, interfaces
FlightOps.Infrastructure/ EF Core DbContext, entity configs, Identity
tests/
FlightOps.UnitTests/
FlightOps.IntegrationTests/
FlightOps.ArchitectureTests/
- Technical design:
docs/FlightOps_Technical-Design-v1.6.md - Contributing:
CONTRIBUTING.md - Frontend development:
CONTRIBUTING.md#frontend-development - Project instructions (for AI tooling):
CLAUDE.md