FlightDeck Manual
Everything the app does, in plain English. Use the search box up top to jump straight to an answer.
First 10 minutes
Do these three things once and the rest of the app works the way you'd expect.
- Company (deck header) — your business name, address, phone, and logo. This is what prints on every invoice and every as-applied record you hand a customer.
- Customers — add who you bill. Each one can carry its own $/acre rate, a billing address, and a QuickBooks bill-to name if you invoice a parent company (e.g. three coop branches all billing to "GrainCo FS").
- Profile — the applicators (pilots) who show up on records, with phone numbers.
The daily flow
A normal week looks like this:
- Fly the job. Your drone logs it as usual.
- Export from EAVision — select the day's jobs and email yourself the
task_XXXX.zip. - Drop that zip into As-Applied Records. One zip can hold many jobs; FlightDeck splits them (see Batch).
- Check each record — acres, date, crop, conditions — then Add to this week's invoice.
- Open the Invoicer when you're ready to bill. Your queued jobs are waiting. Build the invoice, download the PDF, export the CSV for QuickBooks, or send it straight from your phone.
Everything you enter once flows through: the record becomes the invoice line, the invoice becomes the QuickBooks entry, and the map stays attached for the coop's records.
As-Applied Records
Turns a drone flight log into a clean, printable record for the coop.
What you can drop in
- EAVision
task_XXXX.zipor a loose.kml - EAVision Work Report
.pdf(FlightDeck reads the numbers off it) - DJI flight KMLs — the export
.zipor individual files - Nothing at all — hit start a blank field and draw the job yourself
The pieces list
Everything found in your upload shows in a list under Uploaded. Tick a piece to show it on the map, untick to hide it. FlightDeck auto-hides pieces that are clearly from a different field (marked OFF-FIELD) — tick them back on if it guessed wrong.
Acres on the map
Your typed acres print on the field. If a record covers several separate fields, each one gets its own label. Want specific numbers per field? Type them in the acres box on each row of the Boundaries list; leave a box blank and it splits the remainder by field size.
Finishing a record
- Preview — see the printed sheet before it prints
- Print / Save PDF for coop — the customer-facing record
- Add to this week's invoice — queues the job for billing and saves the map
Batch: many jobs at once
When one export holds several fields (even across several days), FlightDeck builds all the records in one pass.
- Drop the zip. Every piece appears in the list.
- Tick the pieces that belong to one job — the field plus any hand-fly headland that goes with it. Ticking a piece zooms the map to it.
- Hit Group the checked pieces → Job 1. They collapse into a job pill and leave the list.
- Repeat until the list is empty. Tap a pill to edit what's in it, or ✕ to ungroup.
- Hit Create N As-Applied records. Each job loads into the normal form — check it, fix anything, then Add to this week's invoice moves you to the next one.
Drawing & fixing maps
Under Draw tools on the record page:
| Tool | What it's for |
|---|---|
| Field boundary | Trace the field edge — required for DJI logs, which don't include one. Draw several for multiple fields; tick which to use. |
| No-spray zones | Areas to carve out of the coverage — creeks, buildings, a neighbor's organic ground. |
| Fill missing spray | Coverage the drone flew but didn't log. Draw one pass, Headland a perimeter lap, or Fill field the whole thing. |
Snap parallel + even spacing keeps filled passes lined up with the real ones. Headland passes when filling sets how many perimeter laps get laid down. Spray overlap % closes the gaps between passes so the coverage reads solid.
Field Mapper
Plan a job before you fly it: draw the ground, mark what to avoid, and hand the file to the drone.
Drawing
- Search a town or address to find the ground.
- Name the field, hit Draw a field, and tap the corners. Double-tap the last corner to close it (or press Finish).
- + Obstacle (violet) for grain bins, poles, tree lines. + No-spray (red) for creeks, beehives, sensitive neighbors.
- Tap any shape to select it — only the selected shape shows draggable corners, so a busy map stays readable.
Importing a map someone sent you
Import a map file, or just drag it onto the map. FlightDeck reads KML, KMZ, and GeoJSON, recognizes obstacles and no-spray zones however they were marked, and skips shapes you already have.
Exporting to the drone
Export KML asks what to name the file, then saves it to Downloads — or opens the share sheet on iPad/iPhone so you can AirDrop straight to the controller. Export GeoJSON is there for apps that want .json.
Past fields — respray
Every field you've ever recorded is pinned on the map. Zoom in and the real boundaries appear with their acres. Tap one → Load this field → export. No redrawing to spray the same ground again.
Invoicer
Billing application work
Jobs you queued from records show on the upload screen under This week's application jobs. Pick the customer, hit Build … invoice, and every field becomes a line at that customer's rate. A job with its own rate (the $/acre box on the record) bills at that rate instead — that's how one invoice carries corn at $12 and pumpkins at $36.
Billing hours
Upload a time export (.xlsx, .xls, or .csv — anything with Date and Hours columns, from Jibble, Clockify, Toggl, QuickBooks Time, or a plain spreadsheet), or hit Enter hours manually and type the lines yourself.
What you can produce
- Download PDF — the invoice, named after the invoice number. For queued jobs it's a package: invoice plus an as-applied page per field.
- CSV — QuickBooks-importable, this invoice only.
- Send — pick invoice, maps, or both; opens your share sheet with the PDFs attached.
- Records only — the as-applied maps with no pricing, for a coop that just wants proof of application.
Fixing a queued job
Tap the ✎ next to any job in the queue to correct field, crop, acres, or date without redoing the record. Dedupe collapses jobs accidentally queued twice.
Customers & rates
| Field | What it does |
|---|---|
| $/acre | This customer's default rate. Blank = your global default. |
| Address / email | Prints in the Bill To block. |
| QuickBooks bill-to | The name QuickBooks should see. Map several branches to one parent so they invoice together. Blank = use the customer name. |
| Chemical | Itemized lines or bundled into the $/acre — see below. |
Chemical & products
Off by default. Turn on I sell chemical in Company and a Products button appears.
- Products — add each chemical once: name, EPA reg #, unit, your cost, sell price, and quantity on hand.
- On any record, add a Products applied row: pick the product, type the rate per acre. FlightDeck computes the total applied.
- It prints on the record with the EPA number (which is what your FAA and state records need), and bills on the invoice.
- When the job is billed, on-hand inventory counts down automatically.
Itemized vs bundled is per customer: itemized shows chemical as its own invoice section with quantities and prices; bundled folds the chemical cost into the per-acre rate so the invoice shows one number.
Company profile
Your name, logo, address, phone, and license number. It swaps everywhere at once — invoices, as-applied records, PDF headers, page titles. The FlightDeck logo stays on the app itself; your logo goes on everything a customer sees.
QuickBooks
Two ways out: the CSV button on an invoice (that invoice only), or Reports → QuickBooks CSV (a date range, any customers you tick).
Both produce the columns QuickBooks Online expects — invoice number, customer, dates, item, description, quantity, rate, amount.
Reports & history
Reports (deck header) covers any date range and any set of customers: totals by customer, by crop, by field, plus three exports — plain CSV, QuickBooks CSV, and an As-Applied PDF pack.
Billed History lists every job you've already invoiced, with its invoice number, so nothing gets billed twice. Old jobs that lost their maps can be re-rendered with Rebuild saved maps.
FAA & state records
As a commercial ag operator, 14 CFR 137.71 requires you to keep, for at least 12 months: the name and address of each customer, the date of service, the name and quantity of material dispensed, and each pilot's name, address, certificate number, and the date they met the §137.19(e) requirements.
What FlightDeck already captures
Customer, date, field, acres, applicator, aircraft, rate, conditions, the map — and, with the chemical module on, the product name, EPA registration number, and total quantity applied.
Trouble: a map won't upload to the drone app
Nearly every rejected file comes down to one of these. The Field Mapper's Check for problems finds all of them.
| Symptom | Cause | Fix |
|---|---|---|
| Every shape imports as its own separate plot | Obstacles and no-spray zones marked in a format the drone app ignores (it reads Data name="visualType", not SimpleData, and never reads names) | Import the file into Field Mapper and export it again — FlightDeck rewrites the markings correctly |
| Import fails outright | More than one field boundary in a file that also has zones | Export chooses one field — the picker shows each boundary with its acres so you can see which is which |
| Import fails, or zones vanish | An obstacle or no-spray zone crosses the field boundary line | Check for problems → trims the stray corners just inside the field |
| A downloaded KML looks like it is missing the no-spray zones | That download only ever contains the boundary and obstacles — it leaves no-spray zones out even though the drone app stored them correctly | Check the plot’s Work Area instead. If it is smaller than the plot area by roughly the zone acres, the zones are in and the drone will avoid them |
| “Upload failed” on a file that worked before, or “uploaded 1, failed 1” | The plot name already exists in your drone account — it refuses duplicates. Files you downloaded from the drone app all carry the same internal name, so re-exporting them collides | The export box adds a date-time tag to keep the name unique. Keep it, or type a name you have not used yet |
| An extra tiny plot appears | A junk sliver boundary (a few points, ~0 acres) left by the tool that made the file | FlightDeck flags it on import — it flashes on the map so you can confirm before removing |
Trouble: QuickBooks import errors
| Error | What to do |
|---|---|
| "We can't match Aerial Application" | Create that Service in QuickBooks first — it only accepts items that already exist there. |
| "Multiple customers" on one invoice number | Already handled — FlightDeck adds a suffix per customer automatically. Re-export. |
| Due date missing | Set Due days in the invoicer settings; the CSV fills it from the invoice date. |
| Odd characters in descriptions | Already handled — exports use plain ASCII. Re-export. |
| QuickBooks wants to create new customers | Set the QuickBooks bill-to on those customers to the name QuickBooks already knows. |
Trouble: FlightDeck itself
I can't sign in
Use Forgot password? on the sign-in screen — you'll get an email with a reset link. New accounts wait for approval before the deck opens.
An old feature looks missing, or something acts strange
Hard-refresh the page (Cmd+Shift+R on Mac, Ctrl+Shift+R on Windows). Each tool is its own page with its own cache — check the version number in the header matches across tools.
A record has no map
Jobs billed before map-saving existed kept their data but not their imagery. Billed History → Rebuild saved maps re-renders them.
"Storage is full"
Maps are the heavy part. Build the pending invoice to clear the queue, then use Clear saved maps older than 12 months on the deck.
Weather didn't fill in
It needs a map and a start time first, and an internet connection. You can always type conditions by hand.
Data, backup & privacy
- Back up data (deck footer) downloads everything — jobs, customers, settings, records — as one file.
- Restore loads a backup file back in.
- Reset account data permanently erases this account's data. There's no undo, so back up first.
- Your data is yours. It's isolated per account and never shown to other users — see Terms & Privacy.