★ New · feat/preflight-gonogo

Before you fly — a single Go / No-Go verdict.

3D Map Explorer overlays controlled airspace and TFRs on the planning map, checks your mission footprint against them, runs a METAR wind gate, and folds in a checklist — then returns one honest verdict: Go, Caution, or No-Go. No separate preflight tool, no browser tab juggling.

Bundled Class-B/C/D/ETFR overlayNOTAMs METAR wind gateLAANC-awareMission intersectionChecklist → verdict
What it does

Airspace, NOTAMs, weather, checklist — composed into one answer.

The preflight composer (PreflightService) chains four checks. Each can fail gracefully on its own; the verdict assembly never throws, so a downed weather feed degrades to a carried reason instead of a crash.

  • Airspace — delegates to the existing LAANC / TFR / Class-B/C/D/E mission-intersection check (AirspaceService.Check). No-fly → No-Go; authorization-hard (e.g. LAANC required) → Caution.
  • NOTAMs — any TFR or AIRSPACE-class NOTAM intersecting the footprint is a No-Go reason; others surface as cautionary.
  • Weather — nearest METAR within range; wind-vs-limit gate plus headwind/crosswind component against the mission flight direction. LIFR/IFR is a strong No-Go; MVFR is cautionary.
  • Checklist — the FormStore uas-preflight-checklist; any failed required item is a No-Go.
POST /api/preflight/evaluate
// mission footprint + planned departure
{
  "mission": { "waypoints": [[34.05,-118.25,120]] },
  "departureIcao": "KLAX"
}
→ composed verdict
{
  "status": "Caution",
  "reasons": ["LAANC required: Class-B"],
  "weather": { "windKt": 8, "flightCat": "VFR" }
}
Preflight Go/No-Go dashboard with airspace overlay, METAR gate, and verdict panel
The airspace layer

Controlled airspace + TFRs, bundled and live

The Airspace module ships a bundled controlled-airspace dataset so the check works air-gapped, and refreshes TFRs when a network is available. The footprint intersection uses the same ring-extraction helper as the rest of the platform.

🗺️

Bundled airspace

Class-B/C/D/E surfaces in-box via BundledControlledAirspace — no external tile dependency for the core check.

🚧

TFRs

Active Temporary Flight Restrictions fetched and overlaid; POST /api/airspace/refresh pulls the latest.

📏

Mission intersection

Planned footprint (Polygon / LineString / waypoints) tested against airspace rings + max altitude.

📄

NOTAMs

Bbox or ICAO-scoped NOTAM fetch; TFR/AIRSPACE classifications gate the verdict.

🌤️

METAR + wind

Nearest METAR; wind limit gate with headwind/crosswind decomposition vs. flight direction.

Checklist

Reusable FormStore checklist; required-item failures are hard No-Go reasons.

REST API surface

Compose a verdict from your own tools

Every endpoint is a thin minimal-API lambda that never throws — failures return a result carrying the degrade reason. Wire your GCS or mission board straight into the verdict.

CapabilityEndpointNotes
Capability discoveryGET /api/preflight/capabilitiesWhich checks are available / healthy
Evaluate verdictPOST /api/preflight/evaluateMission footprint + options → composed Go / No-Go
NOTAMsGET /api/preflight/notams?bbox or ?icao
WeatherGET /api/preflight/weatherNearest METAR by lat/lon or icao
Checklist (get)GET /api/preflight/checklistFormStore uas-preflight-checklist definition
Checklist (submit)POST /api/preflight/checklistCompleted items folded into the verdict
Airspace featuresGET /api/airspace/featuresGeoJSON controlled airspace (?bbox)
Airspace checkPOST /api/airspace/checkFootprint + max altitude → severity + verdict text

Verdict logic reflects PreflightService.EvaluateAsync and AirspaceService.Check on commit b3726eb60 (feat/preflight-gonogo). LAANC authorization submission (obtaining the actual approval) is Phase-2 — today the verdict flags LAANC required; it does not file the request.

Part of the UAS loop

Plan → Preflight → Fly → Process → Exploit

One verdict before every flight

Airspace, NOTAMs, weather, and checklist — composed into a single Go / No-Go, with LAANC-aware cautions where authorization is required.