Scalable Aerial Data Management and Processing
- Next.js app (Hydra Hub) to browse MinIO, manage datasets, view Prefect jobs, and visualize EPT point clouds
- Prefect 3 workflows for ingest, GPS extraction, geo-slicing, and OpenDroneMap (ODM) processing
- Docker Compose stacks for local infrastructure (Postgres, Redis-Stack, MinIO, Prefect, NodeODM)
- Monorepo orchestrated by Moon, JS/TS managed with pnpm
# 1) Install toolchains (Node 22 + pnpm 9, Python 3.12)
moon setup
# 2) Start local infra (databases, Prefect, NodeODM)
moon run docker:up.all
# 3) Start the web app (depends on infra)
moon run hydra-hub:dev
# 4) (Optional) Tail Prefect worker/deploy logs
moon run workflows:devOpen these UIs:
- Hydra Hub: http://localhost:3000
- Prefect UI: http://localhost:4200
- MinIO Console: http://localhost:9001 (minioadmin / minioadmin)
Hydra Hub uses:
PREFECT_API_URL(defaulthttp://127.0.0.1:4200/api) and optionalPREFECT_API_KEY
Create hydra-hub/.env.local if you need to override:
PREFECT_API_URL=http://127.0.0.1:4200/api
# PREFECT_API_KEY=...Workflows use Prefect deployments defined in workflows/prefect.yaml. ODM flows default to NodeODM on localhost:7070.
- Bucket:
hydra-data - Input imagery: upload to
ingest/(MinIO Console or S3 client) - Outputs:
odm_results/...(includesentwine_pointcloud/ept.jsonfor the 3D viewer)
Automation: If possible, provision hydra-data via your preferred S3 tool. Otherwise, create it in the MinIO Console and upload images to ingest/.
See notes/ports.md for the canonical list. Highlights:
- Prefect UI/API: 4200
- Hydra Hub: 3000
- MinIO API: 9050
- MinIO Console: 9001
- NodeODM (host): 7070 (container listens on 3000)
- Redis-Stack: 6379 (API), 8001 (UI)
- Postgres: 5432
Moon orchestrates dev workflows and Compose stacks. Common tasks:
# Docker stacks
moon run docker:up.databases # postgres, redis, minio
moon run docker:up.workflows # prefect (server + deploy + worker)
moon run docker:up.odm # nodeodm
moon run docker:up.all # all of the above (sequential)
moon run docker:down.all
# Apps
moon run hydra-hub:dev # starts infra then next dev
moon run workflows:dev # starts infra and tails Prefect logs- Prefect not ready: wait for
docker:up.workflowsto report healthy, then redeploy if needed. - NodeODM connectivity: ODM container listens on 3000 but is published to host port 7070. Prefect jobs target
localhost:7070by default. - MinIO access: Hydra Hub assumes API at
127.0.0.1:9050with default dev creds. Adjust if you change ports/creds. - Multiple JS lockfiles: prefer
pnpm. Remove stray global lockfiles to silence warnings.
- Keep edits minimal and localized. Avoid reformatting unrelated files.
- Update
notes/ports.mdand this README if changing ports or behavior. - See
AGENT.mdand.cursor/rulesfor assistant guidance.