Verkos Reports

drone operations · AI report generation · enterprise security · FlytBase

AI powered automated security report generation

Verkos Reports turns a night's drone patrol into a stakeholder-ready PDF before the pilot finishes their coffee. The AI already detected what mattered mid-flight — my job was building the layer that knows what those detections mean. Designed and shipped as production code.

45 → 5 mins
Time Taken to make new reports
Estimated
187 → 0
Images manually tagged
Avg number of images per report that had to be tagged
A Verkos Reports detection view — the annotated east-gate frame with a labelled bounding box (Pickup truck, 98%) over the live drone capture.

The AI already detected what mattered mid-flight — my job was building the layer that knows what those detections mean.

Context

Enterprise security customers don't pay for drone flights. They pay for the report.

Flytbase had its own proprietary AI detection agents called Verkos Detect Anything Agents (DAA).

Before this project, every report was created manually. After landing, the pilot would spend hours working through a four-step workflow: draw an annotation, add a title, write an observation, and repeat. Sometimes across 187 images, long after the patrol itself had finished. The drone wasn't the bottleneck anymore. The pilot was.

Note: Due to client confidentiality and security requirements, the UI shown throughout this case study is a conceptual recreation of the shipped product. The underlying product decisions, workflows, and technical implementation remain unchanged.

The pilot was doing by hand, at 2am, work the AI can complete in the air.

A generated observation card — 'Observation #2: Lone individual standing in the scrubland,' Moderate priority, 86% AI confidence, with the pilot's observation and the raw capture showing the detection box.
Problem
south-fence detection — a labelled bounding box (Fence deformation, 87%) drawn over the drone capture of the site's south fence.

The platform could identify incidents in real time, but every finding still had to be manually reconstructed into a report after the flight.

Reframe
A detection is not a finding. And the pilot knows most at 18:15, not at midnight.

Is a white van on the perimeter road a breach, or the 6pm traffic that's there every evening? The pixels cannot answer that. The answer lives in three places the camera never sees: what's normal at this site, what this patrol was dispatched to look for, and what the pilot noticed that no configured event type covers.

We needed to find a way to put human context + AI detections together with site context and knowledge to combine all these data points into a meaningful report.

Who a report serves — the pilot (Command Center, hectic hours) creates and acts; business stakeholders observe: daily patrol checks and monthly breach-tracking.
Process

Designing a pipeline, not a screen.

Most of the design work happened before an interface existed. The artifact wasn't a wireframe — it was the flow of data, and the decision about where judgment enters it.

DronePilotDAALLMVerkos Reports
The report pipeline — Drone, Pilot, and DAA detections feed an LLM, which produces Verkos Reports.

We had to create a report making flow that let's the pilot create comprehensive reports easily without much manual effort after the flight has happened.

Before designing anything new, I audited what already existed. This is basic UX hygiene, but it's also where the builder dimension starts adding value: I wasn't just auditing the interface, I was auditing the data.

The FlytBase platform already had everything the raw material needed: drone flights, captured media, and Forensic Search — a VLM you query in plain text to detect anything in the footage. The intelligence existed. Nobody had turned it into a report.

Report creation was fully manual: a pilot on a night shift working a wizard, drawing annotation rectangles on 187 images, typing a title and description for each. It duplicated, by hand and hours late, work the AI had already done in the air.

The opportunity was clear: take the detections Forensic Search already produces, combine them with what the site is, what the patrol was looking for, and what the pilot noticed — and let a model write the report a human only has to review.

Then I had to start building the code architecture.

How would the report get its detections? Where do they come from?

Running my own vision model over every image at report time would re-derive what the platform already knows — 187 images per patrol, every night, every site, and cost per image forever.

After working through the options with Claude, the conclusion was to keep vision upstream: my product sends text queries to FlytBase's Forensic Search and receives structured detections back such as bounding boxes, labels, confidence. I never touch a pixel. Report generation runs on a text model over that structured data, which made the marginal cost of a report negligible.

How would the report know what a detection means?

Forensic Search returns “vehicle, 82%, near perimeter.” True, and useless alone — is that a breach or the 6pm traffic that's there every evening? The image can't answer that.

The conclusion was to make each agent hold named detection policies written in plain English — one authored instruction that serves as both the query sent to Forensic Search and the writing guidance the text model follows. Site context and pilot voice notes captured mid-flight join it, all keyed to one flight ID. A site manager can express “the scrubland by the east wall isn't a transit area” without writing code, and the report cites that policy back when it writes the finding.

DroneAIHILVerkos Reports
Context assembly — drone footage, AI detections, and Human-in-loop (HIL) context combine into Verkos Reports.

Verkos reports needed the drone footage + AI detections + Human in loop (HIL) context to create enriched meaningful reports.

Design Decisions

Each of these looked like a shortcut on paper. Each one traded the cheap, familiar option for the one that actually serves the reader who has to act on the report.

01 Detection events needed details for the VLM to fetch bounding boxes

The tempting option:

A checkbox list of supported detection types. Bounded, predictable, easy to validate.

The problem:

Presets rarely account for the variables in the real world. This is why the old report creation was so methodical and manual.

What I chose instead:

Each Verkos Reports agent already represented a complete reporting workflow. Every agent paired a named detection policy with a human-authored instruction describing exactly what should be identified and how it should be reported. I used those instructions as the source of truth instead of exposing individual detection types.

Why?:

That instruction is doing two jobs at once. It's the query that goes to Forensic Search, and it's the writing guidance the text model follows when it narrates the finding. One authored artifact, both ends of the pipeline.

The instruction became the system's single source of truth. It defined what to search for and how the finding should be described, ensuring the retrieval logic and generated report never drifted apart. Updating an agent meant updating one artifact, not two separate systems.

The detection-event editor — event name, severity, and the plain-English report instruction the AI writes from.

02 How to configure report structure and contents via editable templates

The tempting option:

A fixed report format. Pick a template, generate, done. One structure the whole company uses — least to build, least to explain, and every report comes out consistent.

What I chose instead:

Every section is independently configurable from its title and structure to the data it draws from, its writing style, and level of detail. Behind each section is a plain-language instruction that guides the AI, while a live preview updates instantly as changes are made.

Why I gave it up?:

A fixed format assumes every reader wants the same thing, and they don't. An executive wants a one-paragraph summary; a compliance officer wants the structured detection data; a site manager wants the narrative.

Configurability shifted the report from a static document to a communication tool. Instead of forcing every stakeholder through the same narrative, each section could be tailored to its audience while the underlying evidence remained unchanged. One report, multiple ways of telling the same story.

The template editor — every report section independently configurable, with a live preview beside it.

03 One screen from flight to report.

The tempting option:

A multi-step wizard. Site, then flights, then agent, then template — one decision per screen. Guided, hard to get wrong.

What I chose instead:

The hand-holding of a step-by-step flow, and the extra screens that make each choice feel considered.

Why I gave it up?:

The pilot does this every shift — they don't need a tutorial, they need speed. Site, flight, agent, all on one surface, with a running summary at the bottom (1 site · 1 flight · 1 agent) so the setup is legible without paging through it.

The wizard was safer for the first-timer. This is faster for the person who lives here — and it's the same principle as everywhere else in my work: design for who's actually in the seat.

The single-surface setup — site, flight, and agent on one screen with a running summary.
Features

Upload a sample report → extract structure & voice → template built.

The template extractor — upload a sample report and the system reads its structure and voice.

Templates by extraction

Creating a template offers three paths, but the recommended one is Upload a sample report. Drop in a PDF, Word doc, or pasted text, and the system extracts its structure, voice, and examples. Presets and start-from-scratch stay as fallbacks.

Three report types, because reports answer three different questions.

Patrol · Shift · Incident

The landing screen opens on the choice: Patrol report for a single flight, Shift summary to aggregate every flight across a shift, Incident report for accidents, near-misses, and safety events. Below it, every report ever generated — filterable by site, type, drone, and status.

The report library — the three report types and every generated report, filterable by site, type, drone, and status.

Land as draft → review each finding → edit severity → publish.

The review screen — each observation with an editable severity and status, the AI's analysis, and the source image, before Publish.

The human stays in the loop

Every report lands as a Draft, never a finished document. The pilot sees each observation with an editable severity and status, the AI's analysis, and the source image — and nothing ships until they hit Publish report. The images are swappable, the narrative is editable, the call is theirs.

Impact

Built to sell — the commercial logic I designed for

The deliverable is the thing customers pay for. Enterprise security buyers don't purchase flights — they purchase the compliance artifact that proves the patrol happened and says what it found. I built the layer that produces that artifact, which is the part of the workflow closest to the money.

I designed against the enterprise adoption blocker. The reason a customer won't switch reporting tools is that their compliance team already accepts a specific format. Template-by-extraction turns that blocker into an on-ramp — their existing report becomes the config. That's a deliberate go-to-market decision encoded in a feature.

It was built to be pitched. Verkos shipped as part of the Flink bundle FlytBase took into enterprise pitches across security, oil & gas, and solar — a net-new capability the sales motion could show, not just describe.