Client platform · Skyforest (Sweden)
Skyport
The operations platform that turns Skyforest's drone flights into finished map layers, end to end.
Skyforest, a Swedish forestry-tech company, needed drone photogrammetry to flow from the field to published layers without GIS specialists in the loop. I architected the platform and lead the Territorial team that builds and operates it: web app, API, and a distributed processing backend.
At a glance
- Backend built entirely on n8n workflows and Ordo, the orchestration control plane I created for this project
- Photogrammetry runs on a fleet of Windows machines coordinated through MinIO-backed distributed locks with Agisoft process detection
- Next.js web app with MapLibre maps for customers, missions, work orders and offline-first data submission
- Every mission, customer and processed layer flows through the system with nobody touching a terminal
The problem
Skyforest flies drones over forest estates and delivers orthomosaics, elevation models and derived layers to its customers. The bottleneck was never the flight: it was everything after it. Photo sets had to be moved by hand, processed in desktop software, checked, published to a map server and tracked in spreadsheets, and every step depended on someone who knew GIS.
The goal was a platform where the operations team submits a flight and the finished layers show up, with every job visible and recoverable along the way.
What we built
Skyport is three things: a web app where the team manages customers, missions and work orders and submits new photo sets; an API that owns the domain model and talks to storage; and a processing backend that does the heavy work. The web app is a Next.js application with MapLibre maps, deployed at the edge, with an offline-first submission flow so field data can be staged before a connection is available. A desktop toolkit covers the cases where submitting straight from the machine that holds the photos is faster.
The backend is where most of the engineering went. There is no bespoke job server: every processing step is an n8n workflow, and Ordo sits above n8n as the control plane. Ordo validates every job against executor contracts before it runs, tracks jobs, steps and artifacts as first-class database state, and lets n8n workers claim steps safely. Photogrammetry itself runs in Agisoft Metashape on a fleet of Windows workers. Each worker holds MinIO-backed locks with a TTL, detects a running Agisoft process to avoid double-scheduling, and a reaper workflow renews or releases locks based on whether the owning n8n execution is still alive. Finished rasters are published to GeoServer and become layers the customer can open the next morning.
Why it mattered
Skyport is the project that made Ordo necessary. Pure workflow automation was fine for the individual steps but could not guarantee that a multi-step job would either finish or fail visibly, with its artifacts accounted for. Once that layer existed, the rest of the platform became boring in the best way: the team submits, the fleet processes, the map updates.
Today Skyport runs Skyforest's production photogrammetry pipeline, and Sentinel watches every piece of it, from the n8n workers to GeoServer.
More projects
All projects
MapPrism
A LiDAR and bathymetry processing platform that turns raw point clouds into web-ready 3D and 2D products automatically.
- Ordo
- n8n
- PDAL
- GDAL
- +7
- Weather providers
- Argo Workflows
- Storage
- Edge Workers
- Weather map & clients
Weather-Data Platform
Lead engineer for Jane's Weather, an Australian weather-data platform now part of ACM: from building its weather map to running the whole platform with the Territorial team.
- React
- MapLibre
- PMTiles
- Python
- +10
- Client
- Ordo
- n8n workers
- Object storage
- Finalizer
Ordo
A contract-driven orchestration control plane for long-running processing jobs, built to sit above n8n.
- TypeScript
- Node.js
- Express
- PostgreSQL
- +3