πŸ“„ New Features Guide β€” v2.2
πŸ›Έ

Drone Control
Dashboard

Comprehensive guide to all new features added in v2.2 β€” Phase 1 Compliance, Phase 2 Operational Tools, Phase 3 Client Portal.

πŸ“… June 2026 ✨ 3 Phases Β· 9 New Features
πŸ—ΊοΈ

What's New in v2.2

Three development phases delivered as a single upgrade β€” full backward compatibility, database migrations are safe and additive
Phase 1 β€” Compliance
Phase 2 β€” Operational Tools
Phase 3 β€” Client Portal
PhaseFeatureWho uses it
Phase 1Pre-Flight Risk Assessment (with PDF export)Pilots, Admins
Phase 1Flight Log screen (all completed flights, CSV + PDF)All roles
Phase 1Expiry Alerts β€” daily email + dashboard bannersAdmins (receive), Pilots (benefit)
Phase 2Ops Calendar β€” week-view flight timelineAll roles
Phase 2Maintenance Scheduler β€” schedule + mark doneAdmins
Phase 2Battery Health Tracking β€” enhanced pack managementAdmins
Phase 2Max Wind Speed per drone β€” weather integrationAdmins
Phase 2Location GPS Coordinates β€” Lat/Lon fieldsAdmins
Phase 3Client Portal β€” token-gated public read-only URLAdmins (manage), Clients (view)
1
Phase 1 β€” Compliance
Formal risk documentation, complete flight records, and proactive expiry management
πŸ›‘οΈ

Pre-Flight Risk Assessment

Structured risk documentation per flight booking β€” mandatory fields, PDF download, audit trail

Overview

Every approved flight request now has a Risk Assessment button (πŸ›‘οΈ). Clicking it opens a form where the assessor documents identified hazards, mitigations, public proximity, airspace class, and an overall risk rating. The completed assessment is saved permanently against the flight and downloadable as a signed, dated PDF suitable for your operations folder or CAA audit.

The Risk Assessment Form

FieldRequiredGuidance
Identified HazardsRequiredList every hazard: environmental (wind, visibility), operational (BVLOS risk, other aircraft), site-specific (people, structures, powerlines). One per line or numbered list.
MitigationsRequiredFor each hazard, state the control measure that reduces the risk to an acceptable level. E.g. "Maintain 50 m lateral distance from all uninvolved persons at all times."
Public Proximity NotesOptionalNote footpaths, roads, car parks, public gathering points within 100 m. Include estimated numbers of uninvolved persons during planned operation window.
Airspace Class / NOTAMsOptionalState the airspace classification at the planned operating height (e.g. Class G below 700 ft). List any active NOTAMs. Note FISO / ATC contact if notification is required (ATZ, CTR).
Overall Risk RatingRequiredPost-mitigation risk level: Low / Medium / High. This is the assessor's professional judgment after applying all listed mitigations β€” not the same as the location's base risk.
Assessed ByRequiredFull name of the person completing the assessment. This becomes the signatory on the PDF.

PDF Download

After saving the assessment, click Download PDF to get a formatted document showing:

πŸ“
Best practice: download and save the PDF before each flight, keep a copy on the aircraft's SD card, and file one copy in your operations folder. This satisfies record-keeping requirements under UK SORA and GVC operational authorisations.

Database Changes

NEW TABLE risk_assessments (id, flightRequestId, hazards, mitigations, publicProximity, airspaceClass, overallRisk, assessedBy, createdAt, updatedAt)
MODIFIED flight_requests: +riskAssessmentId, +conditions, +actualStart, +actualEnd
πŸ“‹

Flight Log

Dedicated read-optimised view of all completed flights β€” filterable, searchable, exportable

Overview

The Flight Log is a new top-level screen (sidebar: Flight Log) that surfaces only Completed flights in a clean, print-ready table. Unlike the Flight Requests screen which shows all statuses and includes the approval workflow, the Flight Log is purpose-built for regulatory record-keeping, pilot logbook submissions, and operational reporting.

Filters

πŸ‘¨β€βœˆοΈ

Pilot filter

Scope to a single pilot's completed flights β€” for individual logbook review, licence renewal, or insurance submissions.

πŸ€–

Drone filter

All flights logged against a specific airframe β€” supports maintenance interval decisions and depreciation calculations.

πŸ“…

Date range

From / To date pickers produce period summaries β€” monthly, quarterly, financial year, or any custom range.

πŸ”

Text search

Client-side filter on pilot name, drone, location, or purpose β€” instant results without re-fetching from the server.

Export Options

πŸ“Š

CSV Export

All filtered rows exported as a spreadsheet. Compatible with Excel, Google Sheets, and any reporting tool. Includes all table columns.

πŸ“„

PDF Export

Server-rendered PDF via pdfkit. Includes a header with company name and date range, then one row per flight in a formatted table. Printable and signable.

πŸ”‘
The CSV and PDF exports respect whatever filters are currently applied β€” so a "Pilot = John Smith, From 01 Jan 2026" filter produces John's logbook for that period, not the full database dump.
πŸ””

Expiry Alerts

Daily automated emails + in-app banners for expiring pilot licences and insurance certificates

Overview

A daily scheduled job runs at 07:00 server time and checks every active pilot's certification expiry date and insurance expiry date against the configured alert threshold. If any pilot is expiring within the threshold window, an email is sent to the Drone Manager Email configured in Settings.

What gets checked

FieldWhere setAlert trigger
Pilot licence expiryPilots screen β†’ expiry date fieldWithin Alert Days threshold (default 30 days)
Pilot insurance expiryPilots screen β†’ insurance expiry field (new)Within Alert Days threshold

Configuration

Set the alert window in Settings β†’ Expiry Alerts β†’ Alert Days. Increasing this gives more lead time β€” useful for certifications that take weeks to renew (GVC, operational authorisations).

In-App Alerts

Regardless of email configuration, the system shows:

⚠️
A pilot whose certification has expired is automatically blocked from being assigned to new flight requests. This is enforced server-side β€” not just a UI warning.

Database Changes

MODIFIED pilots: +insuranceExpiry (DATE, nullable)
MODIFIED settings: +expiryAlertDays (INTEGER, default 30)
2
Phase 2 β€” Operational Tools
Calendar visibility, scheduled maintenance, battery lifecycle, and drone wind limits
πŸ“…

Ops Calendar

Week-view timeline of all scheduled flights β€” navigate, filter, and spot conflicts at a glance

Overview

The Ops Calendar is a new top-level screen (sidebar: Calendar) showing a Mon–Sun grid of all flight bookings. Every flight request in a non-terminal state (Approved, Completed, Submitted, Pending Manager, Pending Admin) appears as a colour-coded card in its day column. Today's column is highlighted. Navigate week by week with the Previous / Today / Next controls.

Flight Cards

Each card shows:

Status Colour Key

StatusCard colourMeaning
ApprovedGreenCleared to fly
CompletedBlueFlight has taken place
Submitted / Pending ManagerAmberAwaiting approval
Pending AdminOrangeHigh-risk β€” admin review required

Filters

Click Filters to show dropdowns for Pilot, Drone, and Location. Active filters are indicated by a ● dot on the Filters button. Useful for scheduling coordination β€” e.g. "Show all flights assigned to Drone X this week."

API Endpoint Added

NEW ENDPOINT GET /api/flight-requests/calendar?from=YYYY-MM-DD&to=YYYY-MM-DD[&pilotId=][&droneId=][&locationId=]
πŸ”§

Maintenance Scheduler

Schedule future maintenance tasks per drone β€” track overdue work across the whole fleet

Overview

The Maintenance Scheduler adds a dedicated Schedule panel to each drone. Unlike the existing Maintenance Log (which records past work), the Scheduler is forward-looking β€” create tasks with a due date, assign a technician, and mark them done when complete. Overdue tasks trigger a fleet-wide warning banner on the Drones screen.

Creating a Scheduled Task

1
Open the Maintenance Scheduler panel on a drone card

Click the Schedule icon on the drone row.

2
Click + Add Task

Choose a task type (Routine Service, Inspection, Repair, Battery Check, Firmware Update, Other), set a due date, assign a technician, and add notes.

3
Click Mark Done when the task is complete

The actual completion date is recorded. The task moves to Completed status and no longer appears in overdue counts.

Overdue Warning

Any scheduled task whose due date has passed and is not marked done causes a red warning banner at the top of the Drones screen listing the drone name, task type, and how many days overdue it is.

Database Changes

NEW TABLE maintenance_schedule (id, droneId, taskType, technicianName, dueDate, notes, status, completedAt, createdAt, updatedAt)
πŸ”‹

Battery Health Tracking (Enhanced)

Full lifecycle management for battery packs β€” health %, status, purchase date, drone compatibility

What changed

The existing battery panel (πŸ”‹ on each drone card) has been significantly expanded. Previous version tracked: label, cycle count, last-charged date, notes. New version adds health %, battery status, purchase date, last-used date, and drone model β€” enabling proper lifecycle decisions rather than just cycle counting.

New Fields

FieldValues / FormatHow to use
Health %0–100 integerManufacturer's or measured remaining capacity. Flag packs below 70% for retirement review.
Battery StatusActive / Degraded / RetiredActive = in service. Degraded = monitor closely. Retired = removed from service, kept for reference.
Purchase DateDateCalculate age against expected service life (typically 2–3 years for LiPo). Auto-flag old packs.
Last UsedDate (auto-stamped)Identifies idle packs that may need a conditioning cycle before next use.
Drone ModelFree textEnsures packs aren't accidentally assigned to incompatible airframes (voltage / connector mismatch).

Fleet-Wide Battery View

Admins can now fetch all battery packs across the entire fleet (not just per-drone) via the updated API, enabling future fleet-wide battery health dashboards.

Database Changes

MODIFIED battery_packs: +healthPercent, +purchaseDate, +batteryStatus, +lastUsed, +droneModel
πŸ’¨

Max Wind Speed & Location GPS

Per-drone wind limits and location coordinates for more accurate weather assessment

Max Wind Speed per Drone

Set a Max Wind Speed (m/s) on each drone in the Edit Drone form. This value is used by the weather RAG engine when evaluating a flight:

Location GPS Coordinates

Top-level Locations now have Latitude and Longitude fields. When set, these are used directly for weather geocoding instead of address-based lookup β€” more accurate for rural sites and locations without a precise postal address.

Database Changes

MODIFIED drones: +maxWindSpeed (REAL, nullable, m/s)
MODIFIED locations: +latitude (REAL, nullable), +longitude (REAL, nullable)
3
Phase 3 β€” Client Portal
Token-gated public read-only flight visibility β€” no account required, instant revocation
πŸ”—

Client Portal

Share a live flight visibility URL with clients or site owners β€” no login, no account, instant access

Overview

The Client Portal gives external stakeholders (property owners, site managers, clients) a read-only, public URL that shows all approved and completed flights at their location. The URL contains a cryptographically random token β€” it's secure without requiring the visitor to log in. Admins can revoke the token at any time, instantly cutting off access without changing any system configuration.

How it works β€” Admin perspective

1
Open Locations β†’ click the Portal button πŸ”— on a top-level Location

The inline portal panel expands below the location row.

2
Click Generate Token

A 32-byte random token is created and stored. The portal URL is displayed: https://drone.fkrisztian.co.uk/portal/[token]

3
Copy and share the URL

Send it to the client by email, WhatsApp, or any channel. Anyone with the URL can view the portal immediately β€” no account needed.

4
Revoke when the engagement ends

Click Revoke in the portal panel. The token is deleted from the database immediately. Any visitor using the old URL gets a 404. Generate a new token if access is needed again.

What the client sees

βœ…

Shown

  • Location name and address
  • All Approved and Completed flights at this location
  • Flight date, time window, drone model, mission purpose
  • Flight status badge
πŸ”’

Hidden

  • Pilot personal details (name, email, Flyer ID)
  • Draft, Pending, and Rejected requests
  • Internal notes and post-flight observations
  • Risk assessment documents
  • Any other location's data

Technical notes

πŸ”‘
Only Admin users can generate or revoke tokens. Operator-role users can see whether a token exists on a location but cannot create or remove one. This access boundary is enforced server-side.

Database Changes

MODIFIED locations: +clientPortalToken (TEXT, nullable, unique)
πŸ”‘

Licence & Pricing

Plans and pricing for Drone Control Dashboard β€” purchase at apps.fkrisztian.co.uk
PlanUsersIncluded Features
Solo 1 admin + up to 5 operators Dashboard, Flight Requests, Pilots, Drones, Locations, Approvals, Incidents, Training, Weather, Map, Import Footage, Site Documents, User Management, Settings, Audit Log
Team Unlimited users All Solo features + SOC View (separate port), Client Portal (token-gated), Flight Log, Ops Calendar, Pre-Flight Risk Assessment (PDF), Maintenance Scheduler, Battery Health, Expiry Alerts (email)
Enterprise Unlimited + multi-site All Team features + priority support, custom branding, dedicated onboarding
πŸ›’
Purchase or renew your licence at apps.fkrisztian.co.uk. After payment you will receive a licence key β€” enter it in Settings β†’ Licence Management β†’ Activate. The system validates immediately and caches the result for 7 days.

Entering your licence key

1
Go to Settings β†’ Licence Management

The current status shows: key entered, validation state, customer name, plan, and expiry date.

2
Paste your key in the Activate field

Format: XXXX-XXXX-XXXX-XXXX (16 characters in 4 groups of 4).

3
Click Activate

The system contacts the licence server immediately. On success, the status updates to Valid and the plan tier is shown.

4
Use Recheck if you've recently renewed

The licence is cached for 7 days. Recheck forces an immediate re-validation if you've upgraded your plan and want the new features unlocked now.

πŸ“Š

Full Change Summary

All database and API changes in v2.2 β€” safe, additive migrations; no data loss on upgrade

New Tables

risk_assessments β€” pre-flight risk assessment records + PDF metadata
maintenance_schedule β€” forward-looking maintenance task schedule per drone

Modified Tables

flight_requests: +riskAssessmentId, +conditions, +actualStart, +actualEnd
pilots: +insuranceExpiry
settings: +expiryAlertDays
battery_packs: +healthPercent, +purchaseDate, +batteryStatus, +lastUsed, +droneModel
drones: +maxWindSpeed
locations: +latitude, +longitude, +clientPortalToken

New API Endpoints

POST /api/risk-assessments
GET /api/risk-assessments/flight/:flightId
GET /api/risk-assessments/:id/pdf
GET /api/flight-log
GET /api/flight-log/export/csv
GET /api/flight-log/export/pdf
GET /api/flight-requests/calendar
GET /api/maintenance-schedule/:droneId
POST /api/maintenance-schedule
PATCH /api/maintenance-schedule/:id/mark-done
DELETE /api/maintenance-schedule/:id
GET /api/maintenance-schedule/overdue
GET /portal/:token (public β€” no JWT)
GET /api/portal/:token (public β€” no JWT)
POST /api/locations/:id/portal-token
DELETE /api/locations/:id/portal-token