A custom flight-ops platform, sustained for a decade.
- 322,000lines of C# across 866 files
- 10+years · still shipping new features
- 13aircraft · multi-modal operator
Summary
A Tasmanian general aviation operator approaching fifty years of continuous operation — flight training, charter, scheduled regional flights, wilderness scenic tourism, university-partnered pilot training — running out of their own aerodrome near Hobart across a thirteen-aircraft mixed fleet. I've been building and sustaining their custom operations stack for over a decade.
Context
Aviation at this shape runs on compliance, tight rostering, and accurate weight-and-balance calculations across every flight. Commercial charter, pilot flight training, a university-accredited aviation degree pathway, regulated scheduled services, and wilderness tourism each drag their own obligations. The spreadsheet-and-paperwork baseline didn't scale as the charter, flight-school, and tourism sides of the business grew in parallel. No general-purpose product was going to fit the operational surface and the Australian aviation and vocational-education compliance obligations simultaneously.
What was built
-
Flight operations module
Duty rosters, weights and balance, pilot endorsements, scheduling. Wisej 3 on .NET 7 for the desktop-web surface; Blazor WASM on .NET 9 for newer modules.
-
Mobile training app
Originally Xamarin.iOS; since evolved into modern Blazor WASM.
-
Training and compliance module
Course management, fee schedules, AVETMISS reporting for Australian vocational-education obligations.
-
Integrations
Microsoft Graph and Gmail API for operational email. BloomSky weather feeds. Xero for finance. ClickSend for SMS. Stripe for payments. Online travel agents (Viator, Rezdy, GetYourGuide). NAIPS WCF for aeronautical data. TCSI/HEIMS for higher-education compliance.
-
Scale
322,000 lines of C# across 866 files. Property-level PII encryption. Soft-delete across all entities. MongoDB audit trail. Three parallel UI generations coexisting deliberately.
Outcome
A decade-old custom platform still shipping new features. Three successive UI architectures have layered in without a rewrite — the older modules keep working while the new ones go in beside them. Operations, training, compliance, and tourism bookings all flow through the same stack.
Reflection
Custom platforms only hold up if the person who wrote the code is still there to extend it. Ten years in, I can still tell you why a particular pattern exists and which of the three UI generations a new feature belongs in. That continuity is what keeps the system worth maintaining.