Files
boc/packages/api/README.md
T
Bernt 05ed037fe8 pilot.landvex.com: HTTPS + Full Stack Verified
- DNS: pilot.landvex.com -> 16.170.83.169
- TLS: Let's Encrypt certificate (expires 2026-09-30)
- Nginx: reverse proxy with SSL termination
- API: https://pilot.landvex.com/api/v1/missions
- UI: https://pilot.landvex.com/
- Upload: POST /api/v1/missions/import (multipart/form-data)

Verified:
 https://pilot.landvex.com/health
 https://pilot.landvex.com/version
 https://pilot.landvex.com/api/v1/missions (list)
 https://pilot.landvex.com/api/v1/missions/:id (get)
 POST /api/v1/missions/import (video upload)
 UI loads with title 'LandveX Intelligence Lab'

Next: Pilot 001 — Break the system!
2026-07-02 17:34:19 +00:00

1.4 KiB

@landvex/api

Mission Import API for LandveX Intelligence Lab.

MVP-0: First Field Upload

Minimal API for importing missions with video files.

Endpoints

Method Endpoint Description
POST /api/v1/missions/import Import mission with video
GET /api/v1/missions/:id Get mission by ID
GET /api/v1/missions List active missions
GET /health Health check

Import Mission

curl -X POST http://localhost:3002/api/v1/missions/import \
  -F "inspector=erik_svensson" \
  -F "location[lat]=59.3293" \
  -F "location[lng]=18.0686" \
  -F "device[model]=iPhone14,2" \
  -F "device[os]=iOS 17.0" \
  -F "device[appVersion]=1.0.0" \
  -F "video=@/path/to/video.mp4"

Response

{
  "missionId": "mission_20260702_000001",
  "sessionId": "session_20260702_000001",
  "artifactId": "artifact_000001",
  "status": "created",
  "file": {
    "originalName": "video.mp4",
    "size": 12345678,
    "path": "uploads/abc123.mp4"
  }
}

Architecture

Express Router → Application Handlers → Domain → In-Memory Repositories

No AI. No processing. Just store and track.

Dependencies

  • @landvex/application — use cases
  • @landvex/infrastructure — in-memory repositories (swap for PostgreSQL in PR-003B)
  • @landvex/domain — domain objects

Tests

npm test

5 tests verifying MVP-0 acceptance criteria.