★ New · feat/fleet-manager

Is this aircraft legal to fly? One registry knows.

3D Map Explorer's fleet manager is the operator's airworthiness ledger: a drone registry, flight-hour aggregation, maintenance-due tracking (by calendar and hours), and per-battery cycle logging. Log a flight once and the aircraft's totals, maintenance thresholds, and battery cycles all roll forward — the "is this aircraft legal/safe to fly" answer, in one place.

Aircraft registryFlight-hour aggregationMaintenance-due alerts Calendar + hours thresholdsBattery-cycle loggingStatus: Active / Retired / Maintenance
What it does

A registry that stays in sync as you fly.

Each Aircraft carries aggregate usage — total flight hours, total flights, total distance, battery cycles, last-maintenance timestamp — and FleetService.LogFlightAsync keeps them in sync as flights are logged. Maintenance is driven by both a calendar threshold (LastMaintenanceUtc) and a flight-hours threshold recorded at each service.

  • Aircraft registry — per-aircraft record with serial, status (Active / Retired / Maintenance), and rolling usage totals.
  • Maintenance log — categorized entries (scheduled / unscheduled) with FlightHoursAtService driving the next-due hours threshold.
  • Battery cycles — tracked per aircraft/battery-serial; the consumption metric that ages a pack.
  • One-call rollupPOST /api/fleet/logflight updates hours, distance, flights, and cycles in one transaction.
POST /api/fleet/logflight
// log a flight → totals roll forward
{
  "aircraftId": "MAVIC-3-007",
  "flightHours": 0.4,
  "distanceKm": 6.2,
  "batterySerial": "B-1042",
  "cycles": 1
}
→ aircraft + battery updated in sync
GET /api/fleet/overview
{ "aircraft": 12, "maintenanceDue": 2 }
Fleet manager panel with aircraft registry, maintenance-due alerts, and battery-cycle table
The airworthiness picture

What's due, what's retired, what's safe

Maintenance-due is computed two ways so an aircraft can't slip past either threshold: a calendar gate from LastMaintenanceUtc, and a flight-hours gate from the hours recorded at the last service. The overview endpoint surfaces the counts an operator actually checks before the day's flights.

🛩️

Aircraft registry

Serial, status, totals — the master record per airframe.

🔧

Maintenance log

Categorized entries; hours-at-service drives the next-due computation.

🔋

Battery cycles

Per aircraft + battery serial; the aging metric that grounds a pack.

📅

Calendar due

Days-since-last-service against the maintenance calendar threshold.

⏱️

Hours due

Flight-hours-since-service against the per-service hours threshold.

📊

Overview

One call — fleet size, maintenance-due count — for the daily go/no-go board.

REST API surface

Manage the fleet from your own tools

CapabilityEndpointNotes
Capability discoveryGET /api/fleet/capabilitiesRegistry + maintenance + battery
OverviewGET /api/fleet/overviewFleet size + maintenance-due counts
Aircraft CRUDGET · POST · PUT · DELETE /api/fleet/aircraft[/{id}]Registry
Aircraft flightsGET /api/fleet/aircraft/{id}/flightsPer-aircraft flight history
Maintenance CRUDGET · POST · PUT · DELETE /api/fleet/maintenance[/{id}]Service log
Battery CRUDGET · POST · DELETE /api/fleet/battery[/{aircraftId}/{batterySerial}]Cycle tracking
Log flight (rollup)POST /api/fleet/logflightHours + distance + cycles in one call

Registry + rollup logic reflect FleetService.LogFlightAsync and FleetModels.cs on commit 01591458d (feat/fleet-manager). The store is local to the workstation — for multi-station fleet sync, point the store at a shared GeoPackage on the LAN.

Part of the UAS loop

Plan → Preflight → Fly → Process → Exploit

The airworthiness ledger for every airframe

Registry, flight-hour aggregation, maintenance-due by calendar and hours, and battery-cycle logging — all rolling forward from one log-flight call.