Published model · 2026-09-23

DroneOps Command architecture,
read from the code.

59,638 lines of source, 822 parts described, 5 areas and 19 customer paths. Mission management for commercial drone operators. Every line on this page comes from the model — open it and check any of them.

In numbers

What the model holds.

59,638Lines of source read
822Parts described
5Areas
96Screens
479Actions
197API routes
35Records
74Services
19Customer paths
6Status flows
9Rules
44 of 197Endpoints on no described path
Areas

The 5 heaviest areas of 5.

AreaScreensActionsAPIRecordsWhat it covers
app1342919325FastAPI backend: operator, client-portal and device APIs, domain models, billing/Stripe, reports/LLM, email, Celery jobs and integrations.
src82000React/Mantine operator console and customer-facing client portal and ToS pages.
src01649Rust/axum flight-parser microservice that decodes DJI, Litchi and Airdata logs into normalized flights, telemetry and extended details.
alembic02401Alembic migration environment and the versioned schema revision chain (0001-0011) for the Postgres database.
Shared & root11000Root-level one-shot maintenance scripts, the p-eval parser-comparison harness and other files outside the three main packages.
Customer paths

What a person walks through, step by step.

19 paths are described in the model; the longest 12 are here, with how many areas each one crosses.

Generate and deliver the mission report19 steps · 2 areas

Produces the client-facing after-action report. Acreage and a coverage map are computed, the narrative is generated by Claude or a local Ollama model and checked for…

Customer intake and Terms of Service signature17 steps · 2 areas

Brings a customer on board: the operator issues an intake link, the customer signs the Terms of Service AcroForm, and the signed, hash-anchored PDF is kept as an…

Customer pays deposit and balance16 steps · 2 areas

Collects money in two phases through Stripe Checkout. The server recomputes the total before every charge, Stripe webhooks record each payment, and the balance payment…

Customer views missions in the client portal16 steps · 2 areas

Gives customers a read-only view of their missions, deliverables and invoice through scoped client tokens that are separate from operator auth. Sending the link also…

Track fleet maintenance16 steps · 2 areas

Keeps aircraft airworthy: default DJI maintenance schedules are seeded per aircraft, and due or overdue alerts surface on the dashboard. Recording work advances the…

Upload and ingest flight logs15 steps · 2 areas

Turns raw drone logs into flight records. Files are spooled and hashed, then parsed by the Rust flight-parser service. Duplicates are rejected by source-file hash,…

Operator first-run setup and sign-in13 steps · 2 areas

A new instance first creates its single admin account; after that the operator signs in locally, or through Cloudflare Access when it is configured, and holds an…

Mission pre-flight airspace and weather check12 steps · 2 areas

Gives the pilot an airspace, LAANC, TFR and weather picture for the mission site before flying. Each feed is fetched concurrently and degrades on its own, so one feed…

Back up and restore the database11 steps · 2 areas

Protects operator data: pg_dump and pg_restore run as background Celery jobs with Redis progress, archives are validated and checksummed, and old backups are pruned by…

Field controller flight sync11 steps · 2 areas

Moves flight logs from field controllers into the library without an operator logged in. The upload is authenticated by a device key and parsed off the request path by a…

Provision and rotate field-device API keys11 steps · 2 areas

Controls which field controllers can upload flights: keys are shown once and stored hashed, rotated without touching the device through a grace window, finalized by a…

Book and plan a mission11 steps · 2 areas

Creates a drone job for a customer and plans it: title, type, date, location and lead source. If a customer is assigned, the client-portal link is emailed automatically.…

Rules

What the product enforces on its own.

9 rules are described; each one watches a record and changes something else when it moves.

Cascade aircraft model rename to batterieswatches Aircraft · reaches Battery

Renaming an aircraft's model copies the new model name onto every battery linked to that aircraft, by foreign key and also by matching the old model string on batteries…

Deliver footage download link once the invoice is paidwatches Invoice · reaches Customer · Mission

When an invoice becomes paid in full, either through the Stripe balance webhook or the operator's manual mark-paid, deliver_download_link_if_due sends the mission's…

Persist extended flight details on importwatches Flight · reaches FlightDetails · FlightSeries

When the shared flight builder persists a parsed flight, the parser's extended details payload is written to the FlightDetails sidecar and its full-resolution series…

Send client-portal link when a customer is assignedwatches Mission · reaches ClientAccessToken · Customer

Creating a mission with a customer, or updating a mission to a different customer, mints a mission-scoped client-portal JWT, records it as a ClientAccessToken and emails…

Re-arm download-link delivery when the link changeswatches Mission · reaches Mission · Customer

A PUT to a mission that changes download_link_url clears the delivery stamp so a replacement link also reaches the client, then immediately attempts delivery. This…

Recalculate invoice totals when line items changewatches LineItem · reaches Invoice · Invoice

Every line-item add, update, delete or bulk replace recalculates the parent invoice's subtotal, tax and total, then re-derives the deposit as 50% of the live total…

Audience-leak gate on generated report contentwatches Report · reaches Report

After the LLM report task writes generated content, the audience-leak detector scans it for operator-coaching language and altitude or Part-107 exceedance remarks, then…

Track battery health from imported flightswatches Flight · reaches Battery · BatteryLog

Whenever a flight is imported, through the shared builder used by the upload, device-upload and reprocess paths or through the OpenDroneLog import, the battery serial in…

Status flows

The states records move through.

Mission · app

Mission status

Draft → Scheduled → In progress → Processing → Review → Delivered → Completed → Sent

8 states · 15 transitions

Customer · app

Customer intake and terms acceptance

Not invited → Invited → Terms signed → Intake completed

4 states · 4 transitions

FlightUploadJob · app

Device flight-upload batch status

Queued → Running → Complete → Failed

4 states · 2 transitions

Invoice · app

Invoice dunning stage

Unbilled → Billed → Reminder sent → Final notice sent

4 states · 4 transitions

Invoice · app

Invoice payment phase

Deposit due → Awaiting completion → Balance due → Paid in full

4 states · 8 transitions

DeviceApiKey · app

Device API key rotation

Active → Rotation grace window

2 states · 2 transitions

What the model says about itself

Answers nobody wrote down.

Computed from the model’s own connections, with the count behind each one.

How much of this product is built but unused?

22% of this product's API surface is dark: built and paid for, but part of no described customer path and consumed by no screen.

44 OF 197 ENDPOINTS · READ FROM 19 CUSTOMER PATHS DESCRIBED SO FAR

Where is it riskiest to make a change?

The riskiest place to change is “app”: more of the product depends on FlightDetails than on anything else.

83 INBOUND DEPENDENCIES · COMPUTED FROM THE REACH GRAPH, NOT ESTIMATED

Where did the engineering effort actually go?

The deepest engineering investment is “app” — 82% of the product's mass. “Shared & root” is compact and self-contained: the cheapest place to change.

675 VS 11 OBJECTS · CHANGE-COST RATING = SIZE × CROSS-DOMAIN COUPLING

Which customer experience breaks first?

The most fragile customer experience is “Upload and ingest flight logs”: it crosses 3 domains in 15 steps — the first place integration breaks.

INTEGRATION-TEST PRIORITY №1 · DOMAINS COUNTED PER PATH STEP

Ask the model your own question →How these answers were scored →

Questions

About this model.

How was this DroneOps Command architecture built?

GitMir read the public repository and established what the product does: its areas, screens, actions, API routes, records, customer paths, status flows and rules, with every statement traceable to the source it came from. Nothing on this page is written by hand; it is the published model, as of 2026-09-23.

Is it current?

This page is a snapshot of the published model. On a connected repository the model is updated as commits land, so people and AI agents work from the product as it is now rather than as it was when somebody last wrote it down.

Can I get this for my own repository?

Yes — connect a repository and GitMir builds the same thing for it: features, rules, customer paths and how they connect, available to people on the screen and to coding agents over MCP.

Supabase Studio architecture →OpenAI Codex architecture →cal.com architecture →Atlas architecture →Warpdrive architecture →Pronto architecture →Faktorio architecture →

Get this for your
own product.