Anonymized case study / Business aviation

A trip-feasibility engine for a business-aviation operator

A dispatcher used to spend hours per trip checking whether a flight was even possible, across a dozen disconnected systems. I built the engine that gathers that whole picture in one place, and kept a human in charge of every call it cannot make cleanly.

16 automated checks 5 AI-assisted, confidence-scored 10+ data sources unified 15-week delivery to production team of 5, hired and led
01The problem

Feasibility lived in a dozen places, and in one person's head

Before anyone could quote a private or charter trip, someone on the concierge team had to assemble the entire feasibility picture by hand. Is the runway long and strong enough for this aircraft, fully loaded, wet? Are there NOTAMs closing anything? Are customs and immigration open at those hours? Is the crew inside its duty limits? Do we have permits to overfly and land?

Each answer lived in a different system, and no system talked to the next. A single trip meant hopping between maintenance records, flight planning, NOTAM feeds, security advisories, passport and visa data, and noise rules, then holding all of it in your head long enough to make a call. It was slow, it did not scale past the people who knew it cold, and the knowledge walked out the door at the end of the day.

Runway strength
NOTAMs
Customs hours
Crew duty time
Immigration and visas
Overflight permits
Aircraft performance
Maintenance status
Insurance coverage
Destination security
Noise abatement
Parking and slots

A dozen systems, checked by hand, on every trip.

02What I built

One engine that runs 16 feasibility checks per flight leg

I designed and built a flight-operations portal around a single idea: the concierge builds a trip, and the system runs the whole feasibility check for them, per leg, against a unified copy of every source that used to be checked by hand. Each check returns a clear status, and the ones that call for interpretation carry a confidence score so the operator knows how much to trust them.

The checks are organized into four modules. Tap through them.

Status per check: pass, warning, fail, incomplete, or bypassed AI-assisted checks carry a confidence score
PASS WARNING FAIL INCOMPLETE BYPASSED MANUAL REVIEW REQUIRED · confidence 0
Not knowing must always be visible, never absorbed.
03The design principle

The human stays in command, and every override is on the record

An automated feasibility check is only trustworthy if a person can overrule it and if the system is honest about what it does not know. Both were first-class from day one.

An operator can bypass a check or force-fail it, and every change is attributed and logged. A read-only workflow history shows every field that moved, old value to new, who changed it, and why. Concierge, admin, and super-admin roles see different slices of that trail by design.

When an AI check fails, it gets louder, not quieter

If an AI-assisted check cannot complete, say a source times out, the system does not crash the trip and it does not quietly wave the check through. It converts the failure into Manual Review Required, confidence zero, and the interface renders that state more prominently than a pass. A gap in knowledge is surfaced, never swallowed.

That is the whole safety model in one rule: a failed check can never silently look like a passed one.

04How it shipped

Architected, built, and delivered into production

I architected the system and personally built it on Azure, while hiring and leading a five-person team. We went from ten discovery interviews, through a fifteen-week agile delivery, into production, live for four teams and twenty-five users, and handed over with a developer guide, a user manual, and an operations runbook. It was built to be handed over, not babysat.

10
discovery interviews before a line of production code
15 wk
agile delivery from discovery to production
4 / 25
teams and users live on it in production
5
person team, hired and led through the build
05Architecture

A hub-and-spoke over a unified copy of every source

The concierge portal sits at the center. Around it, the four check modules run as spokes, each reading from a local store that a data-ingestion engine keeps in sync with the outside sources on an hourly job. The checks run against that unified copy, so a trip is evaluated in one place instead of ten.

FrontendNext.js and React, Mantine UI, TypeScript
BackendASP.NET Core 9, REST API
DataAzure SQL, Entity Framework Core migrations
AIAzure OpenAI, confidence-scored assessments
CloudAzure App Service, Key Vault, AD, DevOps CI/CD
Ingestionhourly sync of 10+ sources into a unified store
06Outcome

What the operator reports

The engine collapsed a manual, hours-long, dozen-system feasibility check into a single reviewed screen, with the human firmly in the loop on anything the system flags. The headline figures below are what the operator reports from running it.

~75%
less manual concierge workload, operator-reported
~90%
faster time-to-decision on trip feasibility, operator-reported
$250K+
saved annually, operator-reported
A note on these numbers

These are figures the operator reports, not measurements taken from inside the system. I keep them labeled that way on purpose. What is verifiable in the build is the scope: sixteen checks across four modules, five of them AI-assisted and confidence-scored, over ten-plus unified data sources, in production for four teams, with human override and a full audit trail.

The judgment was in deciding which checks a machine should make, and which ones a person always signs.
How I design these systems → Back to hamz.ai