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.
| Area | Screens | Actions | API | Records | What it covers |
|---|---|---|---|---|---|
| app | 13 | 429 | 193 | 25 | FastAPI backend: operator, client-portal and device APIs, domain models, billing/Stripe, reports/LLM, email, Celery jobs and integrations. |
| src | 82 | 0 | 0 | 0 | React/Mantine operator console and customer-facing client portal and ToS pages. |
| src | 0 | 16 | 4 | 9 | Rust/axum flight-parser microservice that decodes DJI, Litchi and Airdata logs into normalized flights, telemetry and extended details. |
| alembic | 0 | 24 | 0 | 1 | Alembic migration environment and the versioned schema revision chain (0001-0011) for the Postgres database. |
| Shared & root | 1 | 10 | 0 | 0 | Root-level one-shot maintenance scripts, the p-eval parser-comparison harness and other files outside the three main packages. |
19 paths are described in the model; the longest 12 are here, with how many areas each one crosses.
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…
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…
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…
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…
Keeps aircraft airworthy: default DJI maintenance schedules are seeded per aircraft, and due or overdue alerts surface on the dashboard. Recording work advances the…
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,…
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…
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…
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…
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…
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…
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.…
9 rules are described; each one watches a record and changes something else when it moves.
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…
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…
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…
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…
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…
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…
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…
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…
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
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 →
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.
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.
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 →